HERANÇA MULTIPLA vs JAVA

Pessoal… Seria legal se a gente discutisse sobre a falta da Herança Múltipla no Java hein…

o que acham?

Quem é contra a Herança Multipla e Quem é a Favor???
Como se virar sem ela no java??? O uso das Interfaces são suficientes???

Vamos aquecer nossos conceitos de Orientação a Objetos…

Está lançado o desafio.

Oi

Felipe, impossível esquecer conceitos de OO nesta hora… Mas vamos lá

Eu acho que esta foi uma caracterisca que o Java não implementou e que é ótima… O Uso de interfaces é lindo :slight_smile:

T+

Na minha opinião o uso de interfaces cobre a falta da herança múltipla.
Acredito que a implementação de herança múltipla poderia trazer mais caos do que benefícios. Acredito que foi uma idéia muito inteligente dos criadores da linguagem na não implentação deste item da orientação a objetos.

Portanto, sou a favor da não implementação da herança múltipla em Java.

:grin:

eu diria q as interfaces foram a maneira mais inteligente de sanar essa nojera… ehaeheaheah, po cara, na boa… interfaces são tudo. :grin:

Realmente com interfaces vc naum sente a necessidade de usar herança múltipla.

Abraços

Imaginem a seguinte situação (clássica) .

Possuo uma classe Carro que tem os metodos e atributos necessarios para funcionamento, como comportamentos {andar, parar, acelerar … } e atributos {rodas, motor, bancos … }, e possuo uma classe Barco que também tem comportamentos {navegar,acelerar,ancorar} e atributos {motor, hélice(s) … }.

No momento em que eu quiser criar um carro-anfíbio, segundo os conceitos de OO, poderei fazer como que ele, simplesmente, herde de Carro e Barco. Mas se eu for fazer em Java terei que implementar as Interfaces que definem os comportamentos de Carro e Barco, assim não reaproveito nenhum comportamento pois terei que implementar tudo.

Alguns podem dizer que podemos apenas declarar os métodos e colocarmos em nossa classe um Carro e um Barco para realizar os comportamentos desejados … mas nem sempre o resultado sai como queremos, e também pode ser muito trabalhoso pois imaginem uma classe como Component que possui 185 métodos declarados.

Eu precisei fazer isso recentemente, não eram 185 métodos mas ainda é deselegante.

até hoje as interfaces resolveram os meus problemas de herança multipla, mas no caso de muitos metodos, como foi citado, realmente fica complicado.

Herança multipla acaba que você vai ter várias classes numa hierarquia sem fim!
Prefiro o uso de interface, mesmo que tenha vários metodos depois, há alguns patterns que ajudam a estabelecer um melhor paradigma de programação nessa situação. Interface também não é para se usar sempre, tem que se pensar no POO, se sua classe poder vir a ser herdada por mais alguém posteriormente, ai sim, interface nela e a implemente depois!
Se ela for definitiva não há porque usar interface, então herde dela.

Interface resolve muitos problemas. Mas muitas vezes eh interessante reutilizar algumas implementacoes. Isso da pra fazer com uma combinacao de inteface + composicao. Ou entao, usar os conceitos da AOP…

:wink:

[quote=“jeveaux”]Oi

Felipe, impossível esquecer conceitos de OO nesta hora… Mas vamos lá

Eu acho que esta foi uma caracterisca que o Java não implementou e que é ótima… O Uso de interfaces é lindo :slight_smile:

T+[/quote]

Condordo que não podemos esquecer, por isso foi que eu disse aquecer

Agora, pode me citar um exemplo onde o uso de Herança Multipla seja realmente necessário.

O problema é não ter a opção de usar herança múltipla. Se eu quisesse usar, não teria como.

Herança múltipla pode gerar designs toscos sim, mas isso é problema de quem desenvolve. Mau desenvolvedor consegue fazer tosquice com qq coisa.

Minha opinião é que a linguagem deveria dar a opção, implementa e usa quem quiser… (e souber!!!)

concordo com rmuliana.
uma coisa q nao curto muito em java é q aparentemente, os desenvolvedores da linguagem presumiram que quem fosse programar nela seriam criancinhas de 5 anos q precisam que o compilador segure na sua mão e vá te conduzindo durante todo o trajeto da codificação do seu programa.
é igual à possibilidade de escolher, por exemplo, passar um tipo primitivo por referencia(sem usar a gambiarra de array)… pode gerar problemas? sim, mas o programador que se vire com isso, ou então a obrigatoriedade de vc tratar certas exceções… eu ficaria feliz se desse um simples warning indicando q eu poderia tratar uma exceção, mas não, o safado nem compilar compila…

voltando ao assunto… eu discordo totalmente da ideia de interfaces substituir herança múltipla… pode até ser q quebre um galho, mas por exemplo, no caso do veículo anfíbio citado por alguém ae, seria mto mais pratico declarar public class VeiculoAnfibio extends Carro, Barco {…} doq usar interfaces

"…eu ficaria feliz se desse um simples warning indicando q eu poderia tratar uma exceção, mas não, o safado nem compilar compila… "

Tudo bem!

Mas se java não lhe travasse para não fazer tosquisses!!

Imagina com herança multipla, e esse caso ae q vc citou!!

Imagina vc ter q alterar esse código q outra pessoa fez!!! cruzes!!!

Acho que vc teria q aprender seria “linguagens” diferentes Java Tosco e Java “Travado”?!?!?!

Trabalho com .NET e J2ME, caros ler códigos em .NET q outras pessoas fizeram é um horror ele não te “trava” em alguns casos :grin: !!!

Vale lembrar que o java, apesar de ser “criado para criancinhas de 5 anos”, é uma das mais poderosas linguagens da atualidade.

A Herança Multipla foi deixada de lado tb pq a principal idéia era desenvolver softwares para Eletrodomésticos. Sendo assim seria muito poder de fogo para coisas mais simples. Lembrando que ná época ninguém esperava que o Java fosse ter tal repercussão no mercado, a ponto de chegar onde chegou.

hahahaa… é isso aí!!
o Java é tão esquema q educa o programador a parar de fazer tosquisses!

bom, então agora que viram que java é muito mais que programação para eletrodomesticos, e se esse foi mesmo o motivo para deixarem de lado a herança múltipla, entao poderiam adicionar agora

Isso seria muito bom, se eles adicionassem a Herança Multipla no Java.
Mas e quanto ao J2ME???

Mesmo que não seja apenas para eletrodomesticos, ainda é muito forte a utilização do Java em microembutidos como Palm, PDA’s, Celulares etc…

O que os programadores Java acham dessa idéia, de adicionar Herança Múltipla no Java?

Interessante essa discussão, olha o que achei na net :lol: :

Herança múltipla no Jurassic Park

Dinossauro é um Animal.
Sapo é um Animal.
Sapossauro é Animal, Dinossauro e Sapo ao mesmo tempo.

[quote]abstract class Animal {
abstract void talk();
}

class Frog extends Animal {
void talk() {
System.out.println(“Ribit, ribit.”);
}
}

class Dinosaur extends Animal {
void talk() {
System.out.println(“Oh I’m a dinosaur and I’m OK…”);
}
}

// Isso não compila em Java, claro, pois não suporta multipla herança
class Frogosaur extends Frog, Dinosaur {
}
[/quote]

Agora, o problema:

[quote]Animal animal = new Frogosaur();
animal.talk();[/quote]

O que diria nosso amigo Sapossauro? “Ribit, Ribit.” ou “Oh I’m a dinosaur and I’m OK…” ?

Parece que esse problema é conhecido como “Problema do diamante”, eu não conhecia. A causa do problema foi herança múltipla de implementação, mas Java oferece herança múltipla de interface, o que resolve o problema do diamante, e incrementa o polimorfismo do comportamento dos objetos.

O artigo referido tem muito mais coisa, vale a pena gastar o inglês:

hilmilho
no caso de métodos conflitantes, poderia ser usada a assinatura dos métodos para fazer a diferenciação(como quando vc define métodos com o mesmo nome e assinaturas diferentes em uma mesma classe, por exemplo)… se mesmo assim continuar em conflito(como no seu exemplo), o programa poderia nao compilar, ou entao poderia existir o recurso de fazer uma especie de casting especial para forçar a usar o método de uma determinada classe

feliperod
até agora não entendi qual o problema em se usar herança múltipla no j2me