wpjr2’s Weblog

Artigos e tutoriais úteis

Posts Tagged ‘Herança’

Polimorfismo na música

Posted by wpjr2 em abril 20, 2008

Na programação orientada a objetos, o polimorfismo permite que referências de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam. Assim, um mesmo método pode apresentar várias formas, de acordo com seu contexto. O polimorfismo é importante pois permite que a semântica de uma interface seja efetivamente separada da implementação que a representa. O termo polimorfismo é originário do grego e significa “muitas formas” (poli = muitas, morphos = formas).

No exemplo abaixo, operações foram definidas para as classes que extendem a classe Músico. De todas as operações, algumas poderão ser chamadas a partir de todas as classes, mas algumas destas não poderão ser chamadas.

class Musico{
public void afinarInstrumento(){
System.out.println(“Músico”);
}
}

class Tecladista extends Musico{
public void afinarInstrumento(){
System.out.println(“Tecladista”);
}
public void pressionarTecla(){
System.out.println(“Tecla pressionada”);
}
}

class Pianista extends Tecladista{
public void afinarInstrumento(){
System.out.println(“Pianista”);
}
public void fecharPiano(){
System.out.println(“Piano fechado”);
}
}

public class Ensaio{
public static void main(
String [] args){

Pianista p = new Pianista();
Teladista t = p;
Musico m = p;
p.afinarInstrumento(); // o pianista pode afinar o instrumento, OK
t.afinarInstrumento(); // o tecladista pode afinar o instrumento, OK
m.afinarInstrumento(); // o musico pode afinar o instrumento, OK
p.pressionarTecla(); // o pianista pode pressionar a tecla, OK
t.pressionarTecla(); // o tecladista pode pressionar a tecla, OK
m.pressionarTecla(); // o músico NÃO pode pressionar a tecla, ERRO
p.fecharPiano(); // o pianista pode fechar o piano, OK
t.fecharPiano(); // o tecladista NÃO pode fechar o piano, ERRO
m.fecharPiano(); // o músico NÃO pode fechar o piano, ERRO
}
}

Anúncios

Posted in Curso de Programação Java | Etiquetado: , | Leave a Comment »

Herança Múltipla: Anfíbios, animais terrestres e marinhos

Posted by wpjr2 em abril 20, 2008

A herança mútlipla de classes Java não é permitida pela linguagem. A alternativa para contornar esta limitação inclui a utilização de interfaces para representar cada tipo a ser representado pela classe. No exemplo abaixo, a classe Anfibio deve possuir características de animal terrestre e de animal marinho. Porém em cada uma dos ambientes definidos pela interface (terra e mar), o anfíbio se comportará somente com as características definidas para este ambiente.

As Interfaces AnimalMarinho e AnimalTerrestre

// define as operações de um animal marinho

interface AnimalMarinho{
void nadar();
}

// define as operações de um animal terrestre

interface AnimalTerrestre{
void andar();
}

A Classe Anfíbio
class Amfibio implements AnimalMarinho, AnimalTerrestre{
void andar(){…}
void nadar(){…}
}

Criando um Anfíbio

Anfibio a = new Anfibio();
a.nadar(); // o anfíbio sabe nadar
a.andar(); // o anfíbio sabe andar

Convertendo um anfíbio em um animal marinho

AnimalMarinho am = a;
am.andar(); // o animal marinho nâo sabe andar, ERRO
am.nadar(); // o animal mainho sabe nadar, OK

De acordo com a definição da interface AnimalMarinho, é somente possível nadar, não podendo por exemplo andar sobre a água. Desta forma, o animal marinho não possui a operação andar.

Convertendo um anfíbio em animal terrestre

AnimalTerrestre at = a;
at.andar(); // o animal terrestre sabe andar, OK
at.nadar(); // o animal terrestre não sabe nadar, ERRO

De acordo com a definição da interface AnimalTerrestre, é somente possível nadar, não podendo por exemplo andar sobre a água. Desta forma, o animal marinho não possui a operação andar.

Posted in Curso de Programação Java | Etiquetado: , , | Leave a Comment »