Implementar interfaces também pode violar o encapsulamento

“Nunca exponha métodos de sua classe como públicos, mesmo que para implementar uma interface, a menos que eles devam se tornar parte de sua API. Ao invés disso, use uma inner class privada para implementar os métodos dessa interface e deixe sua classe gerenciar a classe interna de maneira encapsulada.”

O que acham dessa afirmação? Recentemente escrevi um artigo sobre esse tema no meu blog. Gostaria de saber o que vocês acham sobre o assunto.

Vocês podem ver o artigo completo em:

Pouco atrasado, mas estou aqui. :slight_smile:

Concordo com sua afirmação.

Quando é necessário programar alguma funcionalidade interna, de forma encapsulada, esta funcionalidade não deve ser pública, pois o que é publico é o que faz parte da API, através do contrato da interface.

Estou desenvolvendo um framework pra automatização de relatório (baseado em Jasper) e passei por este problema.
Estou redesenhando uma parte que não ficou boa de modo que as interfaces estabeleçam somente o contrato, deste modo, posso ter classes internas implementando interfaces específicas do meu encapsulamento, sem torná-la pública.

Att.

Achei muito interessante…

Nunca tinha pensado em interfaces como quebra no escapsulamento.

Mas realmente, assim funciona bem.

Parabéns.

Até mais…

ViniGodoy parabéns pelo artigo!

Tira uma duvida sobre encapsulamento.
Sou iniciante e estou estudando MVC.
Entao no meu projeto de estudos, eu fiz as seguintes classes:

Proprietario : com get’s e set’s

ProprietarioDAO : com CRUD no meu banco

DAOFactory : FÁbrica de DAOs, sigleton, que dá acesso as classes DAO

ProprietarioBO : Regras de Negocio, q chama os métodos CRUD da ProprietarioDAO.

Mas por exemplo, se eu quiser instanciar um objeto do tipo ProprietarioDAO e acessar o método Create eu consigo, pois ele public, para eu conseguir acessá de dentro da DAOFactory.
Tem como só a DAOFactory “ver” os métodos da ProprietarioDAO

Eu acho que é melhor separar as interfaces em: “API” e “Métodos internos”.

Se é API, implementa sem problemas.
Se são métodos internos, daí sim implementa em uma classe interna.

Obrigado a todos que comentaram! Desculpem não responder antes, mas como não estou recebendo e-mails do GUJ, não vi que tinha respostas! :shock: