Uso do protected

Recentemente vi um tópico perguntando quando usar protected. Gostaria de levantar uma discussão para quem quiser participar e dá sua opnião.

A própria classe, as classes filhas e as classes do mesmo pacote têm visibilidade dos membros protected. Essa é a especificação de Java.

Eu considero uma falha de Java tratar o protected dessa maneira, pq com isso vc pode quebrar o encapsulamento, e como ngm quer fazer isso acaba q membros protected são evitados e esse modificador muitas vezes perde seu sentido. Se ele se aplicasse apenas as proprias classes e classes filhas seria muito interessante.

Voltando a pergunta principal. Quando usar protected.

Costumo usar protected em membros (métodos ou atributos) que devem ser herdados, qd as classes filhas tem autoridade para saber da existência deles. O pessoal está muito bitolado a definir q variável de instancia eh private para se ter encaspulamento e esquecem o protected. Dai classes filhas q teriam total propriedade para conhecer determinados membros, perdem esse direito tendo q ter acesso via get e set.

Para exemplificar umj atributo nome da classe Pessoa, deveria ser protected, daí a classe Cliente q herda de Pessoa teria acesso direto. Afinal cliente TEM um nome! Deve haver henraça sim, caso seja private não haverá herança e o acesso terá q ser dado por get e set.

O pecado do protected de Java é aquele mesmo, daí algumas pessoas justificam com isso o eterno uso dos privates. Porém ainda há uma defesa =P Normalmente classes q ficam no mesmo pacote só quem tem acesso é vc ou alguem do seu grupo de desenvolvimento. Se vc destribui uma framework ou biblioteca ngm poderá botar classes nos seus pacotes e quebrar o encapsulamento pq vc usou protected. Bem… essa eh minha opinião. Quem tiver outras bota ai q a gente discute. Sempre quis saber opiniões dos demais sobre esse assunto.

[]´s

encapsulamento tem muito menos haver com modificadores de acesso, encapsulamento é a parte de OO que diz respeito a interface de uso de um objeto…procure um pouco sobre isso…

Cara nada haver, Cliente é uma Pessoa e mantem o estado de nome, portando não tem nada haver oque você esta dizendo…

…eu não uso protected, numca vi necessidade, mais se algum dia eu prescisar usar vou usar, algum caso onde alguma tarefa tenha q estar disponivel somente para objetos do mesmo pacote.

Apesar que em caso de serem apenas para o mesmo pacote eu deixo com o modificador default, sem nada. Assim nem classes filhas de outros pacotes vem.

daniel se eu achasse q encapsulamento tinha somente a ver com modificadores de acesso eu não teria criticado o hábito de todos acharem q botando atributos private estariam encapsulando. Encapsulamento eh algo bem maior que isso. Porém gostaria de frisar q sim… encapsulamente tem sim a ver com modificadores de acesso e q sim modificadores de acesso é a ferramenta mais importante para se iniciar um sistema q pode-se chamar de “encapsulado”… ou vc acha q poderia encpasular seus objetos e subssistemas se todos os seus membros forem visiveis a todos??

Quanto ao fato de vc dizer q meu exemplo pessoa cliente “não tem nd a ver”, gostaria q explicasse oq eh esse “nd a ver”, afinal dizer q uma coisa n tem nd a ver com a outra ainda n virou argumento. Ao contrario do q fiz,qd expus pq acredito q seria uma boa prática usar esses atributos como protected, expliquei pq tenho esse ponto de vista. Se vc n concorda ao menos poste uma justificativa plausivel, ao inves de dizer somente “nd a ver”.

Se vc nunca viu necessidade de usar protected ai são outros quinhetos. Mas gostaria de lhe dizer um exemplo bem interessante de uso de protected q a menos q vc me mostre uma solução melhor, e não simplesmente faça afirmações sem fundamento, eu aceitarei.

Vc define metodos de validação comuns a todos os controladores e define um controlador base, esses metodos só devem ser enxergados pelos controladores do seu sistema. Oq vc faz? bota private e n adianta de nd seus metodos, ja q seu controlador base n tem regra de negocio alguma??? Ou sai replicando codigo de validção em todos os controladores? uma palavrinha magica chamada protected ajudaria nesse ponto. Caso tenhas uma solução melhor… exponha e diga pq seu ponto de vista eh mais adequado, caso argumente com fundamento e de forma respeitosa, um discussão saudável se daria nesse forum.

Vamos com calma galera! :slight_smile:
Eu como iniciante em Java, não vejo a utilização do modificador Protect como ruim.
Sei que em certos casos, o uso desse modificador pode ferir o encapsulamento, mas acredito que há casos em que seja necessário usar.
Ou seja, na minha modesta opinião, cada caso é um caso e tem que ser analisado a parte.
Abraço.