| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/02/2008 00:49:10
|
bcartaxo
JavaTeenager
Membro desde: 06/11/2006 00:35:48
Mensagens: 193
Localização: Recife - PE
Offline
|
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
This message was edited 2 times. Last update was at 13/02/2008 01:02:27
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/02/2008 08:32:31
|
soudaniel_01
JavaEvangelist
Membro desde: 11/04/2007 18:55:00
Mensagens: 429
Offline
|
O pessoal está muito bitolado a definir q variável de instancia eh private para se ter encaspulamento e esquecem o protected.
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..
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.
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/02/2008 08:47:10
|
Marky.Vasconcelos
Moderador
![[Avatar]](/images/avatar/04940fadf3702cbd84b7a48161037c4f.png)
Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline
|
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.
|
Facebook @MarkyHitchhiker +Mark WP: MarkyTech's
Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais
DefaultTableModel?! PARE! Não faça isso! Faça melhor!
Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)
Develop games is fantastic, with words you can make worlds!!!
DON'T PANIC!
MarkyHitchhiker's Blog! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/02/2008 23:48:17
|
bcartaxo
JavaTeenager
Membro desde: 06/11/2006 00:35:48
Mensagens: 193
Localização: Recife - PE
Offline
|
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.
This message was edited 1 time. Last update was at 13/02/2008 23:53:34
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 09:12:08
|
rmalati
Virtual Machine Man
![[Avatar]](/images/avatar/3bc8f7011e08bfe6830c967b497bdf6d.jpg)
Membro desde: 26/11/2007 09:10:30
Mensagens: 593
Localização: Jundiaí-SP
Offline
|
Vamos com calma galera!
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.
|
Rodrigo Malatesta Barbosa
Graduando em Tecnologia Informática Unicamp
SCJP 1.6 - 93%
"A disciplina é o caminho mais curto para o sucesso"
"Se não puder destacar pelo talento, vença pelo esforço. (Provérbio indiano)" |
|
|
 |
|
|