Polimorfismo é um dos conceitos mais importante de OOP. O que é Polimorfismo, é a capacidade de uma referencia de um superclasse (ou interface) conter a referência de uma subclasse que inclui o conceito de ´Dynamic Binding´ ou a possibilidade de escolher o methodo certo para invocar at runtime.
Com overloading o progammador escolha qual versão do methodo dentro da mesma classe tem que ser executado num certo momento durante a executação do programma. Isso NÂO È polimorfismo.
veja:
interface a{
foo();
}
interface b extends a{
bar();
}
class c implements b{
foo(){}
}
class d extends c{
bar(){}
}
class e extends d{
foo(){}
bar(){}
}
class q{
a e = new e();
e.foo(); // foo chamada da classe e
e = new c();
e.foo(); //foo chamada da classe c
// esses são do seu exemplo.. O compilador sabe o que receberá
doFoo(a x){
a.foo() // nesse methodo, somente sabemos que a classe que foi recebido é uma implementação da interface a O foo() será escolhido at runtime, não é possivel de fazer optimação
}
}
apesar que a classe
Christian Rauh wrote:
[EMAIL PROTECTED]">Caro Michael,
Estou entrando tarde nesta discussão. Não sei qual é o ponto
exato que você e o Sven estão defendendo mas a sua citação é
errada. No livro "An Introduction to Object-Oriented Progamming"
de Timothy Budd [Budd], temos:
"The most common form of polymorphism in conventional programming
languages is overloading". pg. 185
Como a referencia [Budd] é mais importante do que [Eckel], temos
que: overloading é polimorfismo. O que me parece que é o
contrário do que você pretende provar.
Em particular, analisemos o trecho citado por você de [Eckel]:
Mister M wrote:People are often confused by other,
non-object-oriented features of C++, like overloading and default
arguments, which are sometimes presented as object-oriented.
Don’t be fooled; if it isn’t late binding, it isn’t polymorphism.
Aqui ele implica que "se não é linkagem dinâmica" então "não é
polimorfismo". Revertendo:
polimorfismo -> linkagem dinâmica
Porém, [Budd] diz logo a frente na seção 13.2 sobre overloading
que:
"The facts that the compiler can often determine the correct
[overloading] function at compile time (in a strongly typed
language), and can generate only a single code sequence, are
simply optimizations"
Ou seja, o fato de que o compilador pode descobrir a função
correta em linguagem fortemente tipadas (como C++) e fazer
linkagem estática é simplesmente um otimização. Assim, o C++ está
simplesmente otimizando uma característica orientada a objeto.
Obrigado,
Christian Rauh
NewTrade
Referências:
[Budd] Budd, Timothy. "An Introduction to Object-Oriented
Progamming", Addison-Wesley, 1991.
[Eckel] Eckel, Bruce. "Thinking C++".
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------