wpjr2’s Weblog

Artigos e tutoriais úteis

Posts Tagged ‘Polimorfismo’

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 »

Sobrecarga vs. Sobrescrita

Posted by wpjr2 em abril 20, 2008

O objetivo deste artigo é apresentar as características da cobrecarga e sobrescrita na orientação por objetos em Java. Pelo fatos destes serem alguns dos tipos de polimorfismo existentes na linguagem, eles podem ser falcilmente confundidos e até trocados entre si.

Sobrecarga: criação de várias funções ou métodos com o mesmo nome, porém com parâmetros e tipos de retorno diferentes. A escolha de quais métodos serão usados pela aplicação é definido em tempo de compilação (dynamic/late binding), através dos parâmetros passados e do tipo de retorno esperado pela
classe cliente.

Ex:System.out.println()

Sobrescrita: recurso da linguagem onde uma impleemntação específica é provida pela subclasse de algum método já provido pela superclasse. A implementação da subclasse substitui a implementação da classe pai.
Métodos sobrescritos DEVEM possuir a mesma assinatura (tipo de retorno, nome do método, tipos e quantidade de parâmetros).

Ex:Métodos equals() e toString() que são sobrescritos nas classes filhas.

A covariância, um recurso acrescentado na linguagem a partir da versão 1.5, permite flexibilizar o tipo de retorno do método, retornando por exemplo uma subclasse do tipo de retorno definido na superclasse. Por
exemplo, em um método espera-se retornar um objeto Cão, mas na sobrescrita (subclasse) é possível retornar um objeto do tipo Dálmata.

Todos os métodos de classes em Java são automaticamente virtuais, significando que estes podem ser sobrescritos pelas subclasses desta classe. Para que um método não possa ser sobrescrito, o modificador
“final” deve ser usado no método.

Resumo:
– Sobrecarga: métodos com o mesmo nome, diferentes parãmetros e tipos
de retorno, provendo a mesma operação de formas diferentes
– Sobrescrita: métodos com o mesmo nome, parãmetros e tipos de
retorno, alterando o comportamento do método da classe pai.

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