linguagem ii classes abstratas interfaces. davi pires {[email protected]} revisão reuso de código...

22
Linguagem II Classes Abstratas Interfaces

Upload: guilherme-de-andrade

Post on 07-Apr-2016

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Linguagem IIClasses Abstratas

Interfaces

Page 2: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Revisão

• Reuso de código• Superclasses e subclasses• Composição vs. Herança• Construtores

– super• Sobrescrevendo métodos• Casts

– erro: ClassCastException• instanceof

Page 3: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Um exemplo...

• Herança e polimorfismo– Caso extremo: classes inúteis!

Professor ProfessorDaPos

ProfessorDaGraduacao

ProfessorAdjunto

class Professor {

double getSalario( ) { //... }}

Page 4: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Métodos abstratos

• Podemos especificar quais métodos não sabemos implementar na classe.

• Assim, obrigamos as subclasses a implementá-los.

• Palavra reservada abstract.

Page 5: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Métodos abstratos

class Professor {

abstract double getSalario( );

}

class ProfessorDaPos extends Professor {

public double getSalario( ) { return 2500.00; }

}

class ProfessorAdjunto extends Professor {

public double getSalario( ) { return 1500.00; }

}

Page 6: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Classes abstratas

• Contêm métodos abstratos.• Nunca serão instanciadas.• São declaradas usando a palavra

reservada abstract.

Se uma classe tem pelo menos um método abstrato, ela deve ser declarada abstract,

ou teremos um erro de compilação!

Page 7: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Classes Abstratas

abstract class Professor {

abstract double getSalario( );

}

class ProfessorDaPos extends Professor {

public double getSalario( ) { return 2500.00; }

}

class ProfessorAdjunto extends Professor {

public double getSalario( ) { return 1500.00; }

}

Page 8: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Classes Abstratas

• Exemplo

Professor professor;professor = new Professor( );

professor = new ProfessorAdjunto( );

Page 9: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Classes Abstratas

• Subclasses que não implementam o método abstrato também são abstract.

abstract class Professor {

abstract double getSalario( );

}

abstract class ProfessorGraduacao extends Professor {

//...

}

Page 10: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Classes Abstratas

• Exemplo:– Professor*.java

• Exercício– Faça um método main e teste.– Faça com que todo Professor tenha um

atributo nome que deve ser passado no construtor.

– Crie um novo tipo de ProfessorGraduacao e insira-o no projeto.

Page 11: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Considerações

• Extensibilidade.• Flexibilidade.• Classes abstratas permitem-nos abstrair

partes da implementação.• E se quiséssemos abstrair toda a

implementação?

Page 12: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Considerações

• Uma classe abstrata define uma interface a ser necessariamente implementada por suas subclasses.

• E se nos interessasse definir apenas o que deve ser implementado?– definir apenas a interface!

• Exemplo:– Repositórios– Servidores

Page 13: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Interfaces

• Em Java, podemos definir interfaces.• São um novo tipo.

interface Exemplo {

public void a(..);

public void b(..);

}

Page 14: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Interfaces

• Por serem tipos, podem ser usados como tipos de variáveis, atributos ou retorno de métodos.

interface RepositorioX {

public void inserir(X novoX); public void remover(..);

}

class CadastroX {

RepositorioX repositorio;

void inserirX(X novoX) { repositorio.inserir(x); }}

Page 15: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Interfaces

• Interfaces não fazem nada.– além de definir o que deve ser feito.– “Contratos”.

• Classes devem implementar os métodos ali definidos.

• Palavra reservada implements• Uma classe pode implementar diversas

interfaces.– Embora só estenda uma classe.

Page 16: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Implementando interfaces

interface RepositorioX {

public void inserir(X novoX); public void remover(..);

}

class RepositorioX implements Repositorio X{

public void inserir(X novoX) { //... } public void remover(..) { //... }}

Page 17: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Implementando interfaces

• Se

• Então

• ou

class A implements InterfaceB {...}

A implementa todos os métodos de InterfaceB

A é declarada como abstract

Page 18: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Interfaces

• Exemplo:– Estruturação em camadas.– *Conta.java

Page 19: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Dúvidas

Page 20: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Exercícios

• Em CadastroContas, crie um método que cheque se uma conta deve ser inserida.– Inclua a chamada no método inserir(..).

• Em seguida, abstraia a maneira como essa checagem é implementada nessa classe.– abstract!

Page 21: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Davi Pires {[email protected]}

Exercícios

• Tente implementar a estrutura hierárquica feita em Professores* com interfaces, ao invés de classes abstratas.

• Compare as vantagens e desvantagens de cada técnica.

Page 22: Linguagem II Classes Abstratas Interfaces. Davi Pires {dpr@cin.ufpe.br} Revisão Reuso de código Superclasses e subclasses Composição vs. Herança Construtores

Este trabalho está licenciado sob uma Licença Creative Commons Atribuição-Uso Não-Comercial-Compatilhamento pela mesma licença. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nc-sa/2.0/br/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.