Existe polimorfismo sem herança

Bom,

Enviei um email para um professor da UFES que trabalha e pesquisa na área de OO.

Veja o email.

Pergunta

[quote]Prezado Professor Ricardo Falbo,
Bom dia!

Envio-lhe este email para tirar uma dúvida sobre Orientação a Objeto que surgiu em alguns fórum de programação JAVA na internet.

As dúvidas que persistem são as seguintes:

  • O que é Polimorfismo?
  • Existe Polimorfismo sem herança?
  • Sobrecarga é Polimorfismo?[/quote]

Resposta

[quote]
Oi André,

Realmente há muitos livros com concepções, a meu ver, equivocadas. Veja abaixo o que considero correto acerca de suas dúvidas.

- O que é Polimorfismo?

É a habilidade de um objeto assumir diferentes formas ao longo de sua vida, mudando de classe, dentro de uma hierarquia de classes.

- Existe Polimorfismo sem herança?

Não. Um objeto só pode mudar de classe dentro de uma hierarquia de classes. Ou seja, é necessário haver uma superclasse comum entre as classes. Observe, contudo, que em termos de linguagens de programação, quase sempre há uma superclasse comum a todos os objetos (tal como uma classe Object), o que permite um uso inadequado de polimorfismo.

- Sobrecarga é Polimorfismo?

Não. Sobrecarga é o fato de operações distintas terem o mesmo nome.

As respostas de cada pessoa, professor e até literaturas divergem nessas questão.

Para maiores informações, veja o capítulo 4 de minha apostila de Análise de Sistemas, disponível em http://www.inf.ufes.br/~falbo/disciplinas/analise.html[/quote]

Bom segundo vocês ele está errado, pois vou da mesma concepção que ele, portanto também estou errado.

Procure pelo Ricardo Falbo e poderam conhecer um poco mais sobre ele.

Grato.

[quote=king_of_gods]Bom,

Enviei um email para um professor da UFES que trabalha e pesquisa na área de OO.

Veja o email.

Pergunta

[quote]Prezado Professor Ricardo Falbo,
Bom dia!

Envio-lhe este email para tirar uma dúvida sobre Orientação a Objeto que surgiu em alguns fórum de programação JAVA na internet.

As dúvidas que persistem são as seguintes:

  • O que é Polimorfismo?
  • Existe Polimorfismo sem herança?
  • Sobrecarga é Polimorfismo?[/quote]

Resposta

[quote]
Oi André,

Realmente há muitos livros com concepções, a meu ver, equivocadas. Veja abaixo o que considero correto acerca de suas dúvidas.

- O que é Polimorfismo?

É a habilidade de um objeto assumir diferentes formas ao longo de sua vida, mudando de classe, dentro de uma hierarquia de classes.

- Existe Polimorfismo sem herança?

Não. Um objeto só pode mudar de classe dentro de uma hierarquia de classes. Ou seja, é necessário haver uma superclasse comum entre as classes. Observe, contudo, que em termos de linguagens de programação, quase sempre há uma superclasse comum a todos os objetos (tal como uma classe Object), o que permite um uso inadequado de polimorfismo.

- Sobrecarga é Polimorfismo?

Não. Sobrecarga é o fato de operações distintas terem o mesmo nome.

As respostas de cada pessoa, professor e até literaturas divergem nessas questão.

Para maiores informações, veja o capítulo 4 de minha apostila de Análise de Sistemas, disponível em http://www.inf.ufes.br/~falbo/disciplinas/analise.html[/quote]

Bom segundo vocês ele está errado, pois vou da mesma concepção que ele, portanto também estou errado.

Procure pelo Ricardo Falbo e poderam conhecer um poco mais sobre ele.

Grato.[/quote]

Professores e autores de livros também erram, também ficam desatualizados, e também caem em pegadinhas. Inclusive há alguns meses atrás eu paguei um grande mico em sala de aula na frente dos meus alunos por causa de um erro que cometi, foi uma questão deste tipo, onde você percebe que o conceito que você pensava que sabia estava errado. Vivendo e aprendendo.

Livros populares que trazem conceitos errados são os maiores vilões nestes casos e existem aos montes. Esses são grandes disseminadores de desinformação e essa atinge os professores que são leitores deles assim como muitos outros. O negócio é ter uma mente aberta e sempre questionar o saber por mais inquestionável que este possa parecer.

Convide este professor para participar aqui do GUJ e ingressar nesta discussão. Em especial mostre o exemplo que coloquei no fim da página 3 deste tópico. Acredito que terá muito a contribuir para todos nós.

Na resposta do seu professor vejo que ele diz “é necessário haver uma superclasse comum entre as classes.”, tenha quase certeza que foi simplesmente porque ele se esqueceu das interfaces, algo que é comum ser esquecido e que serve como um supertipo em comum. Se você perguntar-lhe “e se eu usar interfaces ao invés de superclasses, é possível ter polimorfismo?”. Acredito que a resposta será “sim”.

Repare como esta resposta é completamente incoerente e falsa.
Um objeto não muda de classe. Isso é simplesmente absurdo.
Quem assume diferentes formas é a variável.

Vc tem duas opções:

  1. Engole o que os professores lhe ensinarem e pronto e se ferre no mundo real.
  2. Tem menos confiança no que eles lhe dizem e procura fontes alternativas e os coloca contra a parede.

[quote=sergiotaborda][quote=king_of_gods]
Resposta

[/quote]

Repare como esta resposta é completamente incoerente e falsa.
Um objeto não muda de classe. Isso é simplesmente absurdo.
Quem assume diferentes formas é a variável.

Vc tem duas opções:

  1. Engole o que os professores lhe ensinarem e pronto e se ferre no mundo real.
  2. Tem menos confiança no que eles lhe dizem e procura fontes alternativas e os coloca contra a parede.
    [/quote]

Na verdade se você usar sun.misc.Unsafe (ou JNI + ponteiros em C) você consegue fazer com que um objeto mude de classe. Mas os efeitos colaterais disso…

Onde está o trabalho ou publicação utilizada como referência? Onde está a contestação de Cardelli? Desculpe mas você apenas se repetiu.

De qualquer forma, a resposta não procede. Além da já citada “mudança de classes”, que não é parte do polimorfismo em Java, JavaScript e IO têm polimorfismo e não tem classes, e aí?