Não concordamos com este explicação pelo seguinte.

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]
-------------------------------------------------------------------------





Responder a