Protegendo segredos através da ocultação da implementação
Até aqui, você viu que uma interface pode ocultar a implementação subjacente de um objeto. Quando oculta a implementação atrás de uma interface, você protege seu objeto de uso não projetado ou destrutivo. Proteger seu objeto de uso não projetado é uma vantagem da ocultação da implementação. Entretanto, existe outro lado na história: os usuários de seus objetos.
A ocultação da implementação leva a um projeto mais flexível, pois ela impede que os usuários de seus objetos se tornem fortemente acoplados à implementação subjacente dos objetos. Então, não apenas a ocultação da implementação protege seus objetos, como também protege aqueles que usam seus objetos, estimulando um código fracamente acoplado.
Novo Termo O código fracamente acoplado é independente da implementação de outros componentes.
Novo Termo O código fortemente acoplado é fortemente vinculado à implementação de outros componentes.
Você poderia estar se perguntando, “para que serve código fracamente acoplado?”
Quando um recurso aparece na interface pública de um objeto, todo mundo que usa o recurso se toma dependente do fato de ele existir. Se o recurso desaparecer repentinamente, você precisará alterar o código que tiver se desenvolvido de forma dependente a esse comportamento ou atributo.
Novo Termo Código dependente é dependente da existência de determinado tipo. O código dependente é inevitável. Entretanto, existem graus para a dependência aceitável e para a superdependência.
Existem graus para a dependência. Você não pode eliminar a dependência totalmente. Entretanto, você deve se esforçar para minimizar a dependência entre objetos. Normalmente, você limita tal dependência programando uma interface bem definida. Os usuários só podem se tornar dependentes quanto ao que você decide colocar na interface. Entretanto, se alguma implementação do objeto se tornar parte da interface, os usuários do objeto poderão se tornar dependentes dessa implementação. Tal código fortemente acoplado elimina sua liberdade de alterar a implementação de seu objeto. Uma pequena alteração na implementação de seu objeto podería necessitar de uma cascata de alterações por todos os usuários do objeto.
O encapsulamento e a ocultação da implementação não são mágica. Se você precisar alterar uma interface, precisará atualizar o código que é dependente da interface antiga. Ocultando os detalhes e escrevendo software para uma interface, você cria software que é fracamente acoplado.
O código fortemente acoplado anula o objetivo do encapsulamento: criar objetos independentes e reutilizáveis.
Comentários
Postar um comentário