UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C -...

19
UTFPR – Campus Curitiba - DAELN UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Cursos de Eng. Eletrônica/Eng. da Computação Computação IF62C - Fundamentos de Programação IF62C - Fundamentos de Programação Semana 10 – parte III: Polimorfismo Prof.a Tânia Preto / Prof. Robinson Vida

Transcript of UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C -...

Page 1: 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.

UTFPR – Campus Curitiba - DAELNUTFPR – Campus Curitiba - DAELNCursos de Eng. Eletrônica/Eng. da ComputaçãoCursos de Eng. Eletrônica/Eng. da Computação

IF62C - Fundamentos de ProgramaçãoIF62C - Fundamentos de Programação

Semana 10 – parte III: Polimorfismo

Prof.a Tânia Preto / Prof. Robinson Vida

Page 2: 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.

Polimorfismo – Características (i/ii)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.

Page 3: 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.

Polimorfismo – Características (ii/ii)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.

Page 4: 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.

Polimorfismo – Tipos (i/ix)Polimorfismo – Tipos (i/ix)

Vários tipos (taxonomias) para polimorfismo:

Page 5: 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.

Polimorfismo – Tipos (ii/ix)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

Page 6: 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.

Polimorfismo – Tipos (iii/ix)Polimorfismo – Tipos (iii/ix)

Page 7: 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.

Polimorfismo – Tipos (iv/ix)Polimorfismo – Tipos (iv/ix)

O polimorfismo pode ocorrer das seguintes formas:Polimorfismo ad-hoc – sobrecarga – Ex.:

Tipos de parâmetros diferentes

Page 8: 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.

Polimorfismo – Tipos (v/ix)Polimorfismo – Tipos (v/ix)

O polimorfismo pode ocorrer das seguintes formas:Polimorfismo ad-hoc – sobrecarga – Ex.:

Tipos e números de parâmetros diferentes

Page 9: 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.

Polimorfismo – Tipos (vi/ix)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.

Page 10: 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.

Polimorfismo – Tipos (vii/ix)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.

 

Page 11: 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.

Polimorfismo – Tipos (viii/ix)Polimorfismo – Tipos (viii/ix) Polimorfismo Universal - herança ( ou

inclusão) – Exemplo:

 

Page 12: 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.

Polimorfismo – Tipos (ix/ix)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.

Page 13: 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.

Polimorfismo – Mais exemplos - 1Polimorfismo – 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;

Page 14: 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.

Polimorfismo – Mais exemplos - 2Polimorfismo – 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;

Page 15: 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.

Polimorfismo – Mais exemplos - 3Polimorfismo – Mais exemplos - 3

Exemplo de sobrecarga do método construaRetang em Java com duas diferentes implementações.

Page 16: 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.

Polimorfismo – Mais exemplos - 4Polimorfismo – Mais exemplos - 4

Exemplo de sobrecarga do método construaRetang em Java com mais uma implementação e formas de uso.

Page 17: 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.

Polimorfismo – Mais exemplos - 5Polimorfismo – Mais exemplos - 5

Exemplo de sobrecarga do método construaRetang em Java e diferentes formas de uso.

Page 18: 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.

Polimorfismo – Mais exemplos - 6Polimorfismo – 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

Page 19: 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.

Polimorfismo – Mais exemplos - 7Polimorfismo – 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étodoo.metodo(s1,i2); // s1 para int -> 2o. métodoo.metodo(s1,l2); // s1 para long -> 3o. métodoo.metodo(i1,i2); // não há conversão -> 2o. métodoo.metodo(i1,l2); // i1 para long -> 3o. métodoo.metodo(l1,s2); // s2 para long -> 3o. métodoo.metodo(l1,l2); // não há conversão -> 3o. método

}

} Exemplo de coerção – conversão de tipos