IF62C - Fundamentos de Programação

Propaganda
UTFPR – Campus Curitiba - DAELN
Cursos de Eng. Eletrônica/Eng. da Computação
IF62C - Fundamentos de Programação
Semana 10 – parte III: Polimorfismo
Prof.a Tânia Preto / Prof. Robinson Vida
Polimorfismo – Características (i/ii)
 Polimorfismo é um termo proveniente do grego e
significa "muitas formas“;
 O polimorfismo não é um pensamento novo para o ser
humano pois está contido no dia a dia, principalmente
na linguagem. Exemplos:
 Seja o termo “abrir” e as seguintes situações:




Abrir uma porta;
Abrir uma caixa;
Abrir uma janela;
Abrir uma conta bancária.
Obs.: A ação de abrir vai ser executada de diferentes
formas de acordo com a situação.
 O termo abrir é polimórfico, ou seja, possui várias formas
ou “facetas”, cada uma executada de uma maneira.
Polimorfismo – Características (ii/ii)
 No contexto da programação, o polimorfismo permite a
existência de métodos de mesmo nome contendo
códigos diferente selecionado por algum mecanismo
automático;
 Ideia básica:“Um nome e vários comportamentos”;
 Vantagens:
 É possível controlar todas as formas de uma maneira mais
simples e geral, sem ter que se preocupar com cada objeto
especificamente;
 Independência da implementação, enxerga-se apenas uma o nome
do método;
 O polimorfismo permite a adaptação e compreensão de
um sistema sem existir a necessidade de alterar
substancialmente o que já existe.

Polimorfismo – Tipos (i/ix)
Vários tipos (taxonomias) para polimorfismo:
Polimorfismo – Tipos (ii/ix)
O polimorfismo pode ocorrer das seguintes formas:
 Polimorfismo ad-hoc - sobrecarga:
 Métodos com mesmo nome, funcionalidades similares
na mesma classe;
 Para sobrecarregar um método é necessário criar
diferentes definições de métodos na sua classe, todos
com o mesmo nome, mas com diferentes parâmetros
(número de argumentos ou tipos);
 A utilização será de acordo com o tipo dos
parâmetros que lhes são passados;
 Ex.: diferentes métodos adição() :
int addition (int, int): soma de inteiros
float addition (float, float): soma de reais
char addition (char, char): concatenação
Polimorfismo – Tipos (iii/ix)
Polimorfismo ad-hoc – sobrecarga – Ex.:
O método atualizarDivida pode ter várias formas, de
acordo com o parâmetro utilizado, um determinado
método é executado.
 Métodos de mesmo nome estão dentro da mesma

Polimorfismo – Tipos (iv/ix)
O polimorfismo pode ocorrer das seguintes formas:
 Polimorfismo ad-hoc – sobrecarga – Ex.:
Tipos de parâmetros diferentes
Polimorfismo – Tipos (v/ix)
O polimorfismo pode ocorrer das seguintes formas:
 Polimorfismo ad-hoc – sobrecarga – Ex.:
Tipos e números de parâmetros diferentes
Polimorfismo – Tipos (vi/ix)
 Polimorfismo ad-hoc - coerção:
 Meio para contornar a rigidez dos tipos
monomórficos;
 Existe um mapeamento interno entre tipos;
 Exemplo: Se o operador soma é definido como
tendo 2 parâmetros reais e ocorre a passagem
de um inteiro e um real são como parâmetros,
o inteiro é “coargido” ou “convertido” para um
real;
 Java permite a coerção.

Polimorfismo – Tipos (vii/ix)
 Polimorfismo Universal - herança ( ou inclusão):
 Redefinição de métodos uma subclasse filha;
 A redefinição de
um método em subclasses
herdeiras
de
uma
classe
base
chama-se
especialização;
 Permite ocultar detalhes das classes especializadas de
uma família de um objeto, através de interface comum
(classe básica);
 Ex.: Jogo de xadrez com subclasses rei, rainha, louco,
cavaleiro,
torre
e
peão,
filhas da classe peça;
 É possível ter vários métodos movimento (), um em
cada classe, realizando o movimento de acordo com
a classe do objeto
invocado no momento da
chamada.
Polimorfismo – Tipos (viii/ix)
 Polimorfismo Universal - herança ( ou inclusão) –
Exemplo:

Polimorfismo – Tipos (ix/ix)
 Polimorfismo Universal - paramétrico:
 Uma única função pode ser aplicada a um conjunto de
tipos (sem qualquer relação entre si);
 Métodos paramétricos também são chamadas de métodos
genéricos;
 Exemplo: Tamanho de um objeto, sendo este objeto de
qualquer tipo;
 Algumas linguagens, como C++, permitem definir templates de
funções, usando tipos de dados como parâmetros, como no
exemplo seguinte:
template <class T>
void troca(T& a,T& b) {
T temp = a;
a = b;
b = temp;
}
 T é um tipo genérico, permitindo várias formas de objetos.
Polimorfismo – Mais exemplos - 1



O método área pode ser redefinido em cada subclasse;
Dependendo de qual classe invoca o método área, será
calculado a área do objeto correto;
Métodos de mesmo nome podem estar em classes diferentes;
Polimorfismo – Mais exemplos - 2



O método área pode ser redefinido em cada subclasse;
Dependendo de quem invoca o método área, será calculado a
área do objeto correto;
Métodos de mesmo nome podem estar em classes diferentes;
Polimorfismo – Mais exemplos - 3
Exemplo de sobrecarga do método construaRetang em Java com
duas diferentes implementações.
Polimorfismo – Mais exemplos - 4
Exemplo de sobrecarga do método construaRetang em Java com
mais uma implementação e formas de uso.
Polimorfismo – Mais exemplos - 5
Exemplo de sobrecarga do método construaRetang em Java e
diferentes formas de uso.
Polimorfismo – Mais exemplos - 6
class MinhaClasse {
void metodo (short i, short j) {
System.out.println("metodo1 - i="+i+" j="+j);
}
void metodo (int i, int j) {
System.out.println("metodo2 - i="+i+" j="+j);
}
void metodo (long i, long j) {
System.out.println("metodo3 - i="+i+" j="+j);
}
}
Exemplo de coerção em Java – métodos com tipos diferentes
Polimorfismo – Mais exemplos - 7
Class testaCoercao {
static public void main (String Arg[ ]) {
MinhaClasse o=new MinhaClasse( );
short s1=1, s2=2; int i1=3, i2=4;
long l1=5, l2=6;
o.metodo(s1,s2); // não há conversão -> 1o. método
o.metodo(s1,i2); // s1 para int -> 2o. método
o.metodo(s1,l2); // s1 para long -> 3o. método
o.metodo(i1,i2); // não há conversão -> 2o. método
o.metodo(i1,l2); // i1 para long -> 3o. método
o.metodo(l1,s2); // s2 para long -> 3o. método
o.metodo(l1,l2); // não há conversão -> 3o. método
}
} Exemplo de coerção – conversão de tipos
Download