Caro Michael e Sven,

Eu entendo que para vocês polimorfismo é característica de um classe
poder agir como outra seja por subclasseamento ou por implementação (de
interfaces). 

Porém, se usarmos o purismo de orientação a objetos o polimorfismo é a
característica de um objeto de responder a uma mesma mensagem de acordo
com um contexto. Espero que vocês concordem com esta definição
ultra-purista.

O que estamos brigando uns com os outros é a respeito do que é este
contexto. Na minha opinião, os parâmetros utilizados na mensagem fazem
parte do contexto, enquanto na opinião de vocês, não faz. Na opinião de
vocês apenas a classe do "container" (não sei a expressão em português)
faz parte do contexto. Estou correto?

Mister M wrote:
> 
> Ola Christian Rauh,
> 
> NENHUMA LINGUAGEM precisa suportar overloading para ser 
> orientada a objetos.

Pode ser, mas será então que ela precisa suportar polimorfismo também?
(Não sei se esta era a discussão original).

> C suporta overloading e NAO EH ORIENTADA
> A OBJETOS. 

Isto não quer dizer nada porque se a -> b não quer dizer b -> a.

> Nao ha exemplos aih, mas vc poder dizer:
> 
> public void fazX(int a);
> public void fazX(inta, int b);
> 
> nao tem nada a ver com orientacao a objetos. Qdo vc se refere a
> polimorfismo com respeito a OOP, ESSA EH A UNICA FORMA ACEITAVEL,
> EMBORA COSTUMASSE SE USAR ESTA DENOMINACAO NA EPOCA DAS LINGUAGENS
> PROCEDURAIS E ALGUNS AUTORES NAO TENHAM SE RENOVADO.

Não entendi o que você quer dizer.

> Polimorfismo
> eh definido pela grande maioria das corporacoes (INCLUINDO A SUN
> NO JAVA TUTORIAL) como overriding. Vc pode achar 1000 referencias
> que digam polimorfismo == overloading, mas depois da
> chegada da OOP mudou-se para polimorfismo == overriding.

Eu não estou defendendo que polimorfismo == overloading mas sim que
polimorfismo == {overriding, overloading}

Ou seja, segundo a visão de contexto eu estou contando classe e
argumentos como contexto e você está apenas considerando classe.
 
> Note que Budd diz:
> 
> The most common form of polymorphism in CONVENTIAL PROGRAMMING
> LANGUAGES is overloading
> 
> e nao em LINGUAGENS ORIENTADAS A OBJETO. E tb:

Sim. Quando coloquei esta citação eu estava interessado em:
"form of polymorphism [...] is overloading". Ou seja, o autor diz que
overloading é polimorfismo.

> 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
> 
> suponho q vc tenha acrescentado a parte em uppercase (pq
> gramaticamente em ingles o certo seria OVERLOADED)

Sim fui eu que adicionei o "overloading" para inserir o contexto da
frase e não ter que escrever o parágrafo inteiro. E a expressão correta
é "overloading" porque se refere a um das diferentes funções que faz o
overloading da mesma função "overloaded". Ou seja, em:

  funcao(int a);
  funcao(int a, int b);

Temos que "funcao(int a)" e "funcao(int a, int b)" são "overloading
functions" enquanto "funcao" é uma "overloaded function". 

> e ISSO NAO IMPLICA EM ELE DIZER QUE OVERLOADING EM LINGUAGENS
> ORIENTADAS A OBJETO EH POLIMORFISMO, sao apenas "otimizacoes";
> esta premissa (overloading == polimorfismo) soh se aplica na
> "velha ordem procedural".

Não realmente, apesar de que isto é claro nos primeiros parágrados da
Seção intitulada "Overloading". O que isto quer dizer é que o fato de o
compilador poder fazer linkagem estática dos métodos com overloaded em
linguagens fortemente tipadas é simplesmente uma otimização. É uma opção
de implementação do compilador para tornar o código final melhor, não é
necessário e nem implica que isto não é polimorfismo.

> Eh uma questao muito particular, entretanto, mas todos os livros
> modernos parecem apoiar a minha afirmacao (e a do Bruce Eckel, em
> quem eu confio... costumo trocar uns e-mails com o cara, eh um 
> patrimonio da humanidade... :-))

Quais livros modernos? Eu citei o Budd porque, até onde eu saiba, o
texto dele ainda é uma das referências número 0 em orientação a objetos.

> Soh pra tirar a duvida, procure a ultima edicao do livro do Budd.

Infelizmente eu não a tenho. Mas se você tiver aí, pode citar as
afirmações contrárias a minha opinião. Ainda assim é bem provável que eu
começe a discordar do Budd.

> A lista toda (eu acho) agradece pelo seu interesse por essa
> "discussao filosofica". OOP continua sendo um misterio para
> muitos por causa destas divergencias entre as pessoas
> conceituadas.

Concordo totalmente e é raro poder ter tais discussões em uma lista
pública. Agradeço a disposição e quero ver o seu reply. Gostaria que
você desse uma atenção especial a questão de mensagens pois já que vamos
tratar de OO vamos para as origens!

Christian Rauh

> []'s
> Michael Nascimento Santos
> Analista/Consultor
> CPM Sistemas - www.cpm.com.br
> 
> >From: Christian Rauh <[EMAIL PROTECTED]>
> >Reply-To: [EMAIL PROTECTED]
> >To: [EMAIL PROTECTED]
> >Subject: Re: [java-list] Polimorfismo
> >Date: Tue, 20 Mar 2001 11:05:39 -0300
> >
> >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