Herança Multipla.  XML
Índice dos Fóruns » Assuntos gerais (Off-topic)
Autor Mensagem
AndrewAguiar
JavaChild

Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline

Olá pessoal.

Continuando a serie de topicos do tipo "Por que java não XXX" http://www.guj.com.br/posts/list/65469.java#344793

agora é a vez de herança multipla.

Por que naum por herança multipla no java.. tipo do que eles tem medo que saiam anomalias dos sistemas..
Não é errado isto da linguagem presumir que voce é um idiota então proibir tudo que possa causar confusão.

Afinal em nenhuma hipotese seria util modelar algo com herança multipla..

Gostaria da opnião de voces..

Grato.
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

AndrewAguiar wrote:Olá pessoal.

Continuando a serie de topicos do tipo "Por que java não XXX" http://www.guj.com.br/posts/list/65469.java#344793

agora é a vez de herança multipla.

Por que naum por herança multipla no java.. tipo do que eles tem medo que saiam anomalias dos sistemas..
Não é errado isto da linguagem presumir que voce é um idiota então proibir tudo que possa causar confusão.

Afinal em nenhuma hipotese seria util modelar algo com herança multipla..

Gostaria da opnião de voces..

Grato.


Lei de Murphy: Tudo o que poder dar errado, vai dar errado.
Se vc libera a HM algo vai dar errado. Isso foi provado com C++ ( assim como manipular ponteiros directamente) e foi removido em Java. Java sim é um linguagem que defende melhores formas de programação
e portanto elimina tudo o que pode causar anomalias. Não necessáriamente presume que o programador é idiota.Ela presume que o programador comete erros , e certos erros são idiotas. Por exemplo, a palavra chave "goto" é reservada em Java exatamente para que não seja usada.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
paulohrl
Virtual Machine Man

Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline

Como não encontrei nada que não pude fazer em Java por falta de herança múltipla, não me atrapalha o fato de não tê-la.

Talvez algumas coisas até fosse facilitadas com ela, mas tudo que encontrei foi possível de ser resolvido de outra maneira.
[Email] [MSN]
AndrewAguiar
JavaChild

Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline

Mais no caso da herança multipla não tem como cometer erros.. ou o cara modela com HM ou não. Penso q isso de "evitar que o programador se confunda", apenas tira flexibilidade.
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

AndrewAguiar wrote:Mais no caso da herança multipla não tem como cometer erros.. ou o cara modela com HM ou não. Penso q isso de "evitar que o programador se confunda", apenas tira flexibilidade.


como vc mesmo disse " Afinal em nenhuma hipotese seria util modelar algo com herança multipla.. "
Então, se não vou usar, para quê colocar ?

Lembre-se que herança nem sempre serve para modelar, às vezes serve so para reaproveitar codigo.
Como java isa HM simples, modelar implica em reaproveitar codigo e vice-versa. Já com HM nem sempre um implica o outro e ai que são criados os problemas.

Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
peczenyj
Moderador
[Avatar]

Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline

Alguem acredita realmente que o fato do java não suportar herança multipla tem haver com tornar os programas mais seguros?

Me parece ser uma questão de design.

Agora se uma classe pode extender uma outra classe e implementar diversas interfaces, não vejo motivo para não poder extender muitas classes (Só não consigo entender como o super() iria funcionar nesse caso, a menos que haja apenas uma classe "principal", enfim...).

http://pacman.blog.br

'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.'
[WWW]
AndrewAguiar
JavaChild

Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline

sergiotaborda wrote:
AndrewAguiar wrote:Mais no caso da herança multipla não tem como cometer erros.. ou o cara modela com HM ou não. Penso q isso de "evitar que o programador se confunda", apenas tira flexibilidade.

como vc mesmo disse " Afinal em nenhuma hipotese seria util modelar algo com herança multipla.. "


Escrevi errado:
AndrewAguiar wrote:" Afinal em nenhuma hipotese seria util modelar algo com herança multipla.. "


Isso eh uma pergunta.. esqueci o "?"

Como java isa HM simples, modelar implica em reaproveitar codigo e vice-versa. Já com HM nem sempre um implica o outro e ai que são criados os problemas.

Não entendi ? A HM tem a função de reaproveitar codigo também pelo que eu saiba.

This message was edited 1 time. Last update was at 05/09/2007 16:49:25

AndrewAguiar
JavaChild

Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline

peczenyj wrote:(Só não consigo entender como o super() iria funcionar nesse caso, a menos que haja apenas uma classe "principal", enfim...).


Voce poderia qualificar o super.. que nem em python.



dai tipo para manter a compatibilidade poderia ter a seguinte regra, se não tiver qualificado, então considera da primeira classe após a clausula extends..

This message was edited 1 time. Last update was at 05/09/2007 16:53:39

paulohrl
Virtual Machine Man

Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline

O que vocÊ precisou fazer em Java e não conseguiu por falta de herança múltipla ?
[Email] [MSN]
AndrewAguiar
JavaChild

Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline

paulohrl wrote:O que vocÊ precisou fazer em Java e não conseguiu por falta de herança múltipla ?


Consegui eu consegui com interfaces só acho que em determinados casos seria mais facil fazer com HM.
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

AndrewAguiar wrote:
sergiotaborda wrote: Como java isa HM simples, modelar implica em reaproveitar codigo e vice-versa. Já com HM nem sempre um implica o outro e ai que são criados os problemas.

Não entendi ? A HM tem a função de reaproveitar codigo também pelo que eu saiba.


Sim, mas não ao mesmo tempo a de modelar. A regra "É-UM" pode ser facilmente quebrada
Imagina class A extends B , Helper onde Helper tem um mote de codigo utilitário

A não é um Helper do ponto da modelagem, eu so estendi Helper para aproveitar o codigo.

Em java era comum usar constantes em interfaces e herdar as interfaces para ter acesso às constantes (SwingConstants, por exemplo).Isso é errado pelo mesmo motivo. A interface desempenhava o papel de utilitário de reaproveitamento de codigo sem respeitar a regra "É-UM". Por isso vieram os Enum, e por isso este tipo de coisa é um anti-pattern. Portanto, HM não teria qualquer utilidade prática. Só criaria problemas e paradoxos.

Um das coisas que acho melhores no Java é a sua sintaxe simples e a sua politica de fazer muito com pouco. Herança simples é poderosa o suficiente, não precisa sequer existir um herança multipla. Claro, não precisa existir HM porque termos interfaces, entenda-se.




Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
paulohrl
Virtual Machine Man

Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline

Sim, em alguns casos a HM seria útil, da mesma forma que citaram ai acima, que em alguns casos a HM permitiria que fossem feitas coisas que não deveriam ser feitas.

Eu acho que é questão de se adaptar ao que se tem disponível.
[Email] [MSN]
AndrewAguiar
JavaChild

Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline

paulohrl wrote: Sim, mas não ao mesmo tempo a de modelar. A regra "É-UM" pode ser facilmente quebrada
Imagina class A extends B , Helper onde Helper tem um mote de codigo utilitário

A não é um Helper do ponto da modelagem, eu so estendi Helper para aproveitar o codigo.


Sim neste caso é gambi.. mais na modelagem algumas vezes encontramos classes que tem esta caracteristica:


Assim posso tanto me referir ao Helicoptero como um Transporte e um Ativo claro que isto é perfeitamente possivel com o uso de interface mas imagine que para cada veiculo que eu tivesse eu teria que implementar coisas referentes a interface Ativo



para cada classe tive que criar um metodo getValor() e getTempoDepreciacao(), e criar duas variaveis de instancia.

Já com HM ficaria:



O que é do Ativo fica na classe ativo. bem mais simples e não duplica código.
paulohrl
Virtual Machine Man

Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline

Concordo com você que facilitaria em alguns casos. O que estou dizendo é que é possível fazer qualquer coisa sem utilizar a HM.
[Email] [MSN]
AndrewAguiar
JavaChild

Membro desde: 18/07/2006 10:03:59
Mensagens: 124
Offline

Concordo com você que facilitaria em alguns casos. O que estou dizendo é que é possível fazer qualquer coisa sem utilizar a HM.


Mais só porque é possivel não quer dizer que seja a melhor maneira. da pra fazer qualquer laço de repetição em pascal usando apenas if e goto mais nem por isso retiraram os fors e whiles.

Isso cai no que eu tinha falado, parece que a linguagem presume que o programador é idiota. e que para evitar dele cometer erros tiram recursos que possam ser uteis mas que consideram dificeis.

 
Índice dos Fóruns » Assuntos gerais (Off-topic)
Ir para:   
Powered by JForum 2.1.8 © JForum Team