Antes de falarmos sobre o falso encapsulamento, primeiramente, o que é encapsulamento?
O encapsulamento serve para controlar o acesso aos atributos e métodos de uma classe, não permitindo o acesso direto aos dados.
Assim, pode-se determinar onde a classe poderá ser manipulada.
Modificadores de visibilidade fazem parte do encapsulamento.
Getters e Setters fazem parte do encapsulamento.
Encapsulamento também pode ser ligado a uma ideia de abstração, separando os aspectos externos de um objeto, que são acessíveis a outros objetos, dos detalhes internos da implementação, que são escondidos de outros objetos.
Existe um equívoco cometido por alguns programadores ao pensar que ao criarem métodos getter e setter estão já dando por feito o trabalho do tal encapsulamento.
O fato de haver getters e setters não gera já o encapsulamento.
Se eu tenho um cenário em que:
- coloco um atributo como privado
- mas tenho getter e setter público na qual o atributo pode ser obtido através do getter e modificado através do setter
Não está havendo um real encapsulamento e nada está funcionando diferente do que se o atributo estivesse como público e estivesse sendo acessado e alterado diretamente.
Para evitar retornar uma informação com o getter e ela ser alterada por outros de maneira indesejada, ao invés de retornar diretamente o objeto em questão pode-se:
- retornar apenas um clone dele
ou
- ter métodos para retornar apenas informação propriamente dita de atributos do objeto, não retornando o objeto por inteiro
Essas seriam maneiras de retornar apenas a informação desejada para quem a solicitou, sem entregar o objeto e correr o risco de que seus dados sejam alterados de modo indesejado.
Espero que as informações tenham sido úteis!
Até a próxima.