
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
A ver igualmente
Comunidade de assistência e de conselho.