1 - Quando aprendemos lógica de programação é notavél que ela é ensinada de uma forma a mudar sua ótica de mundo, quando vemos um um desing de projeto, avaliamos formas de fazer o uso da lógica de forma "fragmentada", toda vez que vou começar um assunto novo é como se ele estivesse levemente desconectado da realidade, tal como estamos sendo letrados, onde parece que por já sabermos falar aquele conhecimento é inútil, foi neste sentido.
2 - Em compreender em quais casos é valido utilizar aquele conhecimento e não só usado para dizer "Olha, eu sei usar este recurso".
3 - Conceitos de privacidade em um código por exemplo é algo que me deixa meio confuso, pois se é tão simples editar um código como essa segurança se estábelece em um sistema, entendo parcialmente o que a máquina faz por trás, mas ainda sim me parece ser algo que conflita com a facilidade de editar um código o que tornaria ele inseguro apesar das premisas de segurança adotada.
4 - Usando um exemplo comum com iniciantes, quando temos um numero rasuavelmente grande de comparações normalmente utilizamos if de forma desenfreada, quando muitas vez um swite case pode ser mais eficas, sempre que vou estudar ou fazer algum programa e vejo algum trexo que funciona, mas me parece ter ficado exagerado na quantidade de código procuro por comandos que possam fazer o mesmo com menos escrita, para facilitar a leitura do código.
Não sei se consegui ser muito claro
1 - Você descrevendo me parece que você tem dificuldade em conectar um conhecimento novo a um conhecimento que você já tem. É isso mesmo?
2 - Entendo e acredito que isso tenha bastante relação com o comentário do raf
. Você tem trabalhado em projetos pequenos e esse tipo de coisa (módulos e packages) faz muito sentido quando você trabalha em projetos maiores e com mais pessoas além de você.
3 - Quando você fala de privacidade, entendo que esteja falando de níveis de acesso (público, protegido e privado) e respondo com isso em mente. Caso não seja, por favor me corrija. A questão da privacidade (que também tem um impacto maior em projetos maiores) tem mais relação com a propagação de alterações. Se um método é privado sei que posso alterar ele com segurança pois não irá impactar outra parte do código fora da classe atual. Quando você altear um método público (tipo do parametro, quantidade de parametros, nome, retorno...) você precisa ajustar todo o código que usa aquele método e dependendo dos ajustes eles irão se propagar pela sua base de código. E isso tem um custo. Alterações demandam testes e muitas alterações demandam muitos testes.
4 - Entendo e sua lógica faz bastante sentido. Mas não entendi a conexão com a necessidade de evidenciar isso na forma de diagramas.
Em outras respostas você cita a necessidade de desenhar diagramas. Isso facilita o seu aprendizado e entendimento ? Ou é algo que você acredita que precisa fazer pois foi dessa forma que você aprendeu ?