Vamos agora abordar um dos mecanismos mais importantes do paradigma orientado a objetos.
Se criarmos vários jogos diferentes, não só por terem jogadores e jogadas diversas, mas também por serem de tipos diferentes – uns com pontuação objetivo, outros com número exato de jogadas a fazer, por exemplo – percebemos que há certas ações que podemos fazer com todos eles, independentemente das suas diferenças. Podemos adicionar jogadores, registar jogadas, saber a melhor pontuação até agora, obter a representação textual, conhecer os nomes dos vencedores, etc. Ou seja, podemos fazer com todos eles exatamente aquilo que a classe Jogo
fornece.
Um exemplo:
xpublic class ExemploPolimorfismoParametros {
public static void main(String[] args) {
JogoComObjetivo jogo1 = new JogoComObjetivo("Argon", 25);
JogoNumeroExatoJogadas jogo2 = new JogoNumeroExatoJogadas("Harvest Kingdom",2);
jogo1.juntarJogador("Maria");
jogo1.juntarJogador("Pedro");
jogo1.registarPontosJogada("Maria", 11);
jogo1.registarPontosJogada("Pedro", 26);
jogo2.juntarJogador("John Snow");
jogo2.juntarJogador("Daenerys Targaryen");
jogo2.registarPontosJogada("John Snow", 10);
jogo2.registarPontosJogada("Daenerys Targaryen", 10);
System.out.println("========================================");
System.out.println("Detalhes do jogo:");
System.out.println(jogo1.toString());
System.out.println("Melhor pontuacao ateh agora: " +
jogo1.maiorPontuacao());
System.out.println("========================================");
System.out.println("Detalhes do jogo:");
System.out.println(jogo2.toString());
System.out.println("Melhor pontuacao ateh agora: " +
jogo2.maiorPontuacao());
System.out.println("========================================");
System.out.println("Vencedor(es) do jogo de tipo JogoComObjetivo:");
List<String> venceram = jogo1.vencedores();
for (String jog : venceram) {
System.out.println(jog + " com " + jogo1.pontuacao(jog));
}
System.out.println("Parabens!");
System.out.println("========================================");
System.out.println("Vencedor(es) do jogo de tipo
JogoNumeroExatoJogadas:");
venceram = jogo2.vencedores();
for (String jog : venceram) {
System.out.println(jog + " com " + jogo2.pontuacao(jog));
}
System.out.println("Parabens!");
}
}
Cujo output é:
xxxxxxxxxx
========================================
Detalhes do jogo:
Designacao: Spiral
Numero de jogadores: 2
Nome: Maria Pontuacao: 11 Maximo numa jogada: 11
Nome: Pedro Pontuacao: 26 Maximo numa jogada: 26
Pontuacao objetivo: 25
Melhor pontuacao ateh agora: 26
========================================
Detalhes do jogo:
Designacao: Harvest Kingdom
Numero de jogadores: 2
Nome: John Snow Pontuacao: 10 Maximo numa jogada: 10
Nome: Daenerys Targaryen Pontuacao: 10 Maximo numa jogada: 10
Numero de jogadas a fazer: 2
Numero de jogadas jah feitas: 2
Melhor pontuacao ateh agora: 10
========================================
Vencedor(es) do jogo de tipo JogoComObjetivo:
Pedro com 26
Parabens!
========================================
Vencedor(es) do jogo de tipo JogoNumeroExatoJogadas:
John Snow com 10
Daenerys Targaryen com 10
Parabens!
Seria bom poder generalizar alguns conjuntos de instruções do main
acima, pois a única diferença que têm é o objeto sobre o qual incidem. Na próxima secção vamos ver como fazer isso.
Anterior: 14.9. Redefinição versus atributos
Seguinte: 15.1. Polimorfismo