Eu já passei por muitas teorias sobre o que é encapsulamento e as três técnicas para implementá-lo, que são Associação, Agregação e Composição.
Encapsulamento
Encapsulamento é a técnica de tornar os campos em uma classe privados e fornecer acesso aos campos por meio de métodos públicos. Se um campo for declarado privado, ele não poderá ser acessado por ninguém fora da classe, ocultando assim os campos da classe. Por esse motivo, o encapsulamento também é conhecido como ocultação de dados.
O encapsulamento pode ser descrito como uma barreira protetora que impede que o código e os dados sejam acessados aleatoriamente por outro código definido fora da classe. O acesso aos dados e código é fortemente controlado por uma interface.
O principal benefício do encapsulamento é a capacidade de modificar nosso código implementado sem quebrar o código de outras pessoas que usam nosso código. Com esse recurso, o encapsulamento fornece manutenção, flexibilidade e extensibilidade ao nosso código.
Associação
Associação é um relacionamento em que todos os objetos têm seu próprio ciclo de vida e não há proprietário. Vamos dar um exemplo de professor e aluno. Vários alunos podem se associar a um único professor e um único aluno pode se associar a vários professores, mas não há propriedade entre os objetos e ambos têm seu próprio ciclo de vida. Ambos podem criar e excluir independentemente.
Agregação
A agregação é uma forma especializada de associação, na qual todos os objetos têm seu próprio ciclo de vida, mas existe propriedade e um objeto filho não pode pertencer a outro objeto pai. Vamos dar um exemplo de departamento e professor. Um único professor não pode pertencer a vários departamentos, mas se excluirmos o departamento, o objeto do professor não será destruído. Podemos pensar nisso como um relacionamento “tem um”.
Composição
A composição é novamente uma forma especializada de agregação e podemos chamar isso de relacionamento de "morte". É um tipo forte de agregação. O objeto filho não possui seu ciclo de vida e se o objeto pai excluir todos os objetos filhos também serão excluídos. Vamos retomar um exemplo de relação entre casa e quartos. A casa pode conter vários quartos, mas não há vida independente de um quarto e nenhum quarto pode pertencer a duas casas diferentes. Se excluirmos a casa, a sala será excluída automaticamente.
A questão é:
Agora, todos esses são exemplos do mundo real. Estou procurando uma descrição sobre como usar essas técnicas no código de classe real. Quero dizer qual é o objetivo de usar três técnicas diferentes de encapsulamento , como essas técnicas podem ser implementadas e como escolher qual técnica é aplicável no momento.