Colocando lenha na fogueira da velha disucssão C++ ou Java (não versus - ou mesmo) achei esse comentário do Charles Armstrong muito muito pertinente …
Pra galera refletir:
[quote]Byte Code Alteration vs Multiple Inheritance
One idea appearing in various places is post-compilation Byte Code Alteration. Two examples are in Aspect Orientated Programming and in Java Data Objects.
The idea is that by applying modifications to your byte code after you have compiled it you can do things to lots of classes without cluttering your code.
It seems to me that you could achieve a similiar effect with multiple inheritance. For example all your classes could extend a Security Policy class as well as their domain based inheritance. Maybe you would need a few of the other features of C++ too (pointers to methods etc.).
What is my point? I guess a slight concern is that in having removed some of the bug inducing features of C++ we have created the need for a new bug inducing approach. Modifying your byte code after you have compiled it by definition bypasses compile time checking. Used with care the benefits will outweigh the risks, but that could be said about all the features of C++ that Java axed.
Isso eu já discuti muito com o cv e os mixins da AOP, por exemplo, lembram herança múltipla, porêm oferencem muito mais recursos
e evitam alguns dos inerentes problemas.
Herança múltipla é uma técnica muito comum do C++ moderno para aplicar uma série de patterns muito úteis, vide o livro do Alexandresku, Modern C++ Design http://www.moderncppdesign.com/.
Lembro de ter lido um blog do Richard ???, cv help, onde ele falava sobre AOP com melhor tipagem, outra leitura excelente sobre esse assunto.
Você tem técnicas diferentes para resolver os mesmos tipos de problemas
devido as linguagêns possuirem muitas diferenças, nenhuma é melhor que a outra, elas são simplesmente diferentes.
Muito que você tem hoje com a AOP no java pode ser feito no C++ com herança múltipla + templates, se você for cara de pau macros também, agora qual solução é melhor? Via de regra, a resposta é a qual você já conhecer.
Eu escrevo mais sobre isso depois, mas deixa eu soh dar minha opiniao rapidinho: em TODAS as linguagens, TODOS os ambientes, em praticamente tudo que foi feito para uso por um ser humano, vai ter alguem que fica brincando de esticar e torcer o braço da pobre tecnologia ate os limites do impossivel ou perigoso demais pra valer a pena. Vide IOCCC, vide F-1, vide um monte de coisa…
bom, beeem resumido, da para colocar da seguinte maneira:
tudo o que tu faz com herança multipla, da para fazer com “Modificação de Bytecode” também,
mas nem tudo o que se faz com “Modificação de Bytecode” da para fazer com Herança Multipla
tudo da para contornar com herança multipla, mas nem tudo da para fazer da mesma maneira.
só que com herança multipla, tu tem um monte de problemas não encontrados na “Modificação de Bytecode”, como por exemplo, conflito de nomes de metodos vindos de classes “Pai” diferentes.
Eu escrevo mais sobre isso depois, mas deixa eu soh dar minha opiniao rapidinho: em TODAS as linguagens, TODOS os ambientes, em praticamente tudo que foi feito para uso por um ser humano, vai ter alguem que fica brincando de esticar e torcer o braço da pobre tecnologia ate os limites do impossivel ou perigoso demais pra valer a pena. Vide IOCCC, vide F-1, vide um monte de coisa…[/quote]
[quote=“urubatan”]
só que com herança multipla, tu tem um monte de problemas não encontrados na “Modificação de Bytecode”, como por exemplo, conflito de nomes de metodos vindos de classes “Pai” diferentes.[/quote]
Besteira, você tem isso também. A diferença é que você tem controle sobre como contornar o desastre.
Com modificação de bytecode fica muito dificil, nunca vi feito, é suportar o conceito de herança virtual do C++.
O problema de herança múltipla é que ela normalmente é o superlativo do anti-pattern de “herança somente para re-uso de código” em relação a herança simples.
Eu escrevo mais sobre isso depois, mas deixa eu soh dar minha opiniao rapidinho: em TODAS as linguagens, TODOS os ambientes, em praticamente tudo que foi feito para uso por um ser humano, vai ter alguem que fica brincando de esticar e torcer o braço da pobre tecnologia ate os limites do impossivel ou perigoso demais pra valer a pena. Vide IOCCC, vide F-1, vide um monte de coisa…[/quote]
que F-1, aquela F-1 :?:[/quote]
bom… deve ser mesmo, é que por aqui tem tantas siglas estranhas que eu me daria por feliz de conhecer ao menos uma…