Faça uma pergunta »

O que significa Herança ? O que é Polimorfismo ?

Agosto 2015

Suponhamos que queiramos fazer uma coleção de formas geométricas: quadrados, círculos, triângulos, etc...

Quando você tem um objeto à mão, você quer movê-lo sem precisar saber de que tipo de objeto se trata.

Problema! Todos os objetos teem atributos diferentes e não se movem da mesma maneira:

A classe Quadrado com seus atributos e seus métodos


A classe Círculo com seus atributos e seus métodos


Sempre que temos um objeto, é preciso verificar se é um quadrado, um círculo ou um triângulo e chamar o método correto para movê-lo. Não é nada prático!

Em programação a objeto, existe um truque: a herança.

O que os quadrados, círculos e triângulos teem em comum?

Todos são formas, todos eles têm uma cor e podemos movê-los.

Vamos criar uma classe Forma mais geral:

A classe Forma com seus atributos e seus métodos


Isso significa que: qualquer Forma tem uma cor e que, não só, podemos movê-la, como podemos trocar sua cor.

Agora vamos dizer que Quadrado e Circulo herdam (ou "derivam") de Forma (um quadrado é uma forma, um circulo é uma forme, etc.).


Nossas classes se tornam:

A classe Quadrado com seus atributos e seus métodos


La classe Cercle avec ses attributs et ses méthodes


Como você pode ver, não precisamos colocar o atributo Cor em cada classe: um circulo é uma forma, ora, uma forma tem uma cor, logo, um circulo tem uma cor!

Quanto aos métodos, é um pouco diferente:

trocaCor:Mudamos a cor de todas as formas, da mesma maneira. É por isso que é na classe Forma que programamos o método trocaCor.
move:Na classe Forma, só indicamos move(x, y): isto significa que qualquer objeto que herda de Forma deverá poder ser movido (sem dizer como).
Se você criar um novo objeto que herda de Forma, você deverá programar um método move para este novo objeto.


Agora, podemos fazer: X.mover(5,6)

Aqui, você não sabe se X é um quadrado, um círculo ou um triângulo. Mas você pode mover a forma mesmo se você não souber como mover, especificamente, um quadrado, um circulo...

Quando você chama o método "mover", o sistema verifica de que objeto se trata e chama o método "mover" correto: o quadrado se for um quadrado, o círculo se for um círculo...


É isso que é polimorfismo!

É muito prático. Por exemplo, se você quiser criar uma lista de quadrados, círculos, triângulos, etc.

Basta criar uma tabela de Formas:
Forma T[1...100]
(uma tabela T de 100 Formas numeradas 1, 2... a 100).

Você pode preencher esta tabela de quadrados, círculos, triângulos, etc. Depois, para mover (por exemplo) a quinta forma da tabela, faça T[5].mover(5,6).

Você não precisa saber de que forma se trata: basta movê-la.

Tudo o que você acabou de ver é a base da programação objeto (ou OOP - "programação orientada a objeto").

Saiba que ainda existem muitas mecanismos adicionais para fazer mais coisas interessantes.

Existem diferentes linguagens objeto: Effeil, SmallTalk, Delphi, C++, Java...

Eu, particularmente, recomendo o Java: é uma linguagem específica, bem feita, gratuita, que funciona em todas as máquinas e possui muitos recursos interessantes (inclusive em relação à programação objeto).

Alguns exemplos ?
  • Tudo em Java é um objeto: uma imagem, um botão, uma conexão de rede, um text, uma lista...
  • Todos os objetos em Java derivam de um mesmo objeto parente que se chama "Objeto".
  • Os programas Java compilados são, eles mesmos, objetos que podemos manipular...


Java é uma excelente linguagem para aprender a programação objeto.

O compilador Java da Sun (o JDK) é gratuito. Você pode baixá-lo no http://www.java.sun.com (o site é um pouco tipo labirinto, mas o JDK está lá...).
Você também vai encontrar toneladas de exemplos, cursos e documentação sobre o Java para Yahoo: vá no http://www.yahoo.com ou http://www.yahoo.com.br e digite "Java".

Se você tiver problemas, você pode obter ajuda nos grupos de notícias: [comp.lang.java comp.lang.java].

Se ler em ingles não for problema para você, eu recomendo este excelente livro sobre o Java : "Thinking in Java" do Bruce Eckel (mais de 800 páginas): http://www.mindview.net/.

Você pode consultar o livro on-line ou baixá-lo, gratuitamente, no formato PDF para impressão. Você vai descobrir todos os meandros da programação orientada a objeto e os refinamentos que o Java fornece (principalmente em comparação com a C++).

Pense também na linguagem Python, que também permite fazer a programação objeto e se aprende muito rapidamente.

Artigo original publicado por sebsauvage

Tradução feita por Lucia Maurity y Nouira
Para uma leitura offline, é possível baixar gratuitamente este artigo no formato PDF:
O-que-significa-heranca-o-que-e-polimorfismo.pdf

Veja também

Publicado por pintuda.
Este documento, intitulado « O que significa Herança ? O que é Polimorfismo ? »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.