insert_drive_fileClasse abstrata, interfaces e polimorfismo

Propaganda
POO29004 – Programação Orientada a Objetos
Classe abstrata, interfaces e polimorfismo
Prof. Emerson Ribeiro de Mello
Instituto Federal de Santa Catarina – IFSC
campus São José
[email protected]
http://docente.ifsc.edu.br/mello/poo
23 de março de 2017
1/16
Classe abstrata
Principal uso
Servir de base para concepção de subclasses
Contém um ou mais métodos abstratos
Métodos que não possuem implementação
Tem por objetivo indicar que devem ser obrigatoriamente sobrescritos nas
subclasses.
Também pode conter métodos concretos
Métodos que possuem implementação
Não necessitam ser sobrescritos nas subclasses
Não é possı́vel instanciar objetos de uma classe abstrata
Uma subclasse que não prover implementações para os métodos abstratos
herdados, deve obrigatoriamente ser abstrata
2/16
Exemplo: Classe abstrata Personagem
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public abstract class Personagem{
private int id;
private String nome;
public Personagem(int i, String n){
this.id = i;
this.nome = n;
}
public String obterNome(){
return this.nome;
}
public void imprimirDados(){
System.out.println("Id:" + this.id + ", Nome: " + this.nome);
}
// metodo abstrato que deve ser implementado na subclasse
public abstract void atacar(float intensidade);
}
3/16
Exemplo: Classe concreta Arqueiro
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Arqueiro extends Personagem{
private int habilidade;
public Arqueiro(int i, String n, int h){
super(i,n);
this.habilidade = h;
}
public void imprimirDados(){
super.imprimirDados();
System.out.println("Habilidade: " + this.habilidade);
}
// implementacao do metodo abstrato herdado
public void atacar(float intensidade){
System.out.println("Disparando flechas com a intensidade: " +
intensidade);
}
}
4/16
Prática
1
Crie uma classe abstrata Pessoa e duas classes concretas, Aluno e
Professor, que herdam da classe Pessoa
Cada classe deve ter no mı́nimo 2 atributos especı́ficos e um método
construtor que inicia todos atributos
Classe Pessoa deverá possuir 1 método concreto e 1 método abstrato
2
Crie uma classe Principal e nesta crie uma instância para cada classe
e invoque alguns de seus métodos
5/16
Interface
Nota:
Java 8 permite que interfaces tenham métodos concretos
Semelhante a uma classe abstrata, pois não se pode instanciar objetos
de uma interface
Porém, todos atributos são por padrão, public, static e final
Interface só pode ser implementada por Classes e só pode ser
estendida por outras Interfaces
6/16
Interface
Nota:
Java 8 permite que interfaces tenham métodos concretos
Semelhante a uma classe abstrata, pois não se pode instanciar objetos
de uma interface
Porém, todos atributos são por padrão, public, static e final
Interface só pode ser implementada por Classes e só pode ser
estendida por outras Interfaces
Uso classe abstrata ou interface?
Se vários objetos são de um mesmo tipo e compartilham um estado e
um comportamento comum, então estes objetos tendem a ser
derivados de uma mesma classe
Se este objetos só compartilham um conjunto de assinaturas de
métodos, então tendem a implementar uma interface
6/16
Exemplo: Interface Carro
34
35
36
37
38
39
public interface Carro{
// ilustrando o uso de constantes em uma interface.
public static final String nome = "Carro";
// todo metodo e' abstrato por padrao
public void frear(int intensidade);
}
7/16
Exemplo: Interface Carro
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public interface Carro{
// ilustrando o uso de constantes em uma interface.
public static final String nome = "Carro";
// todo metodo e' abstrato por padrao
public void frear(int intensidade);
}
public class Fusca implements Carro{
private String modelo;
public Fusca(String m){
this.modelo = m;
}
public void frear(int intensidade){
System.out.println("Encostando a lona no tambor de freio");
}
}
7/16
Herança múltipla em Java
Em Java não é possı́vel que uma classe herde de duas ou mais classes
Em Java uma classe pode implementar uma ou mais interfaces
Resumo
Uma classe pode herdar de uma única classe e ainda assim implementar uma
ou mais interfaces
8/16
Exemplo: Herança múltipla para obtermos um Triatleta
Corredor pode correr
Ciclista pode pedalar
Nadador pode nadar
9/16
Exemplo: Herança múltipla para obtermos um Triatleta
Corredor pode correr
Ciclista pode pedalar
Nadador pode nadar
Desenhe um diagrama de classes UML
1
Uma classe para representar cada atleta, sabendo que todos devem
possuir um nome e um CPF
Robson Caetano, Miguel Indurain e Cesar Cielo
2
Uma classe para representar um Triatleta, que pode correr, pedalar e
nadar. Este também possui um nome e CPF
9/16
Exemplo: Herança múltipla para obtermos um Triatleta
10/16
Polimorfismo
A palavra polimorfismo significa “muitas formas”
Na POO o polimorfismo nos permite desenvolver e implementar sistemas
que sejam facilmente extensı́veis
Novas classes podem ser adicionadas ao sistema com pouca ou nenhuma
modificação nas partes gerais do sistema
Novas classes devem obrigatoriamente fazer parte de uma hierarquia de
classes já existente no sistema
Como usufruir do Polimorfismo
Programe pensando somente nas classes mais genéricas, não se preocupando
com as classes mais especı́ficas, haja visto que os métodos existentes na
superclasse também estarão presentes nas subclasses
11/16
Exemplo: Jogo Java of Empires
Existem três personagens: Aldeão, Arqueiro e Cavaleiro
Todos compartilham algum tipo de informação e comportamento, logo,
todos herdam da classe Personagem
Todo personagem possui um iD único no jogo e todo personagem
poderá se mover pelo cenário
Aldeão se move por 1 unidade, Arqueiro por 2 unidades e o Cavaleiro por
10 unidades
49
50
51
Aldeao a = new Aldeao();
Arqueiro aq = new Arqueiro();
Cavaleiro c = new Cavaleiro();
52
53
54
// invocando o metodo mover de cada objeto
a.mover(); aq.mover(); c.mover();
12/16
Exemplo: Jogo Java of Empires
Em um jogo que permite até 300 personagens, o ideal seria fazer uso de
vetores
55
56
57
Aldeao vetA[] = new Aldeao[100];
Arqueiro vetAQ[] = new Arqueiro[100];
Cavaleiro vetC[] = new Cavaleiro[100];
58
59
//omitindo a criacao dos objetos
60
61
62
63
64
// invocando o metodo mover de cada objeto
for(int i = 0; i < 100; i++){
vetA[i].mover(); vetAQ[i].mover(); vetC[i].mover();
}
13/16
Exemplo: Jogo Java of Empires
Em um jogo que permite até 300 personagens, o ideal seria fazer uso de
vetores
55
56
57
Aldeao vetA[] = new Aldeao[100];
Arqueiro vetAQ[] = new Arqueiro[100];
Cavaleiro vetC[] = new Cavaleiro[100];
58
59
//omitindo a criacao dos objetos
60
61
62
63
64
// invocando o metodo mover de cada objeto
for(int i = 0; i < 100; i++){
vetA[i].mover(); vetAQ[i].mover(); vetC[i].mover();
}
E se criarmos um novo personagem Navio?
Será necessário modificar o código dentro do laço de repetição
13/16
Exemplo: Jogo Java of Empires
Com o polimorfismo é possı́vel incluir novos personagens no jogo sem
que seja preciso modificar boa parte do código
Sempre programar para o “geral” e nunca para o especı́fico.
65
66
67
68
69
70
71
72
// pensando no mais generico. Reservando um vetor da superclasse
Personagem vetP[] = new Personagem[4];
// O vetor da superclasse pode armazenar objetos das suas subclasses
// o inverso nao e' verdade!
vetP[0] = new Aldeao();
vetP[1] = new Arqueiro();
vetP[2] = new Cavaleiro();
vetP[3] = new Navio();
73
74
75
76
77
78
// o metodo mover existe na superclasse. No tempo de execucao sao
invocados
// os metodos de cada subclasse
for(int i=0; i < 4; i++){
vetP[i].mover();
}
14/16
Prática
No exercı́cio anterior foram criadas as classes Pessoa, Aluno e
Professor
Faça uso do conceito de Polimorfismo e:
Crie um vetor de Pessoas de tamanho 10 e dentro desse vetor crie 5
instâncias da classe Aluno e 5 instâncias da classe Professor
Imprima os dados de todos Alunos e Professores
15/16
Lista 02 – Trabalho individual – Entrega 30/03/17
1
Faça assinatura do projeto no Github Classroom
2
Implementar classes para representar Arqueiro e Cavaleiro
Estudar o código e propor uma solução que faça uso dos conceitos de
Herança e Polimorfismo
https://goo.gl/Gy4TW9
3
16/16
Download