quinta-feira, 22 de setembro de 2016

Sobre encapsulamento

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.

Nenhum comentário:

Postar um comentário