linguagem ii classes abstratas interfaces. davi pires {dpr@cin.ufpe.br} revisão reuso de código...

Post on 07-Apr-2016

218 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Linguagem IIClasses Abstratas

Interfaces

Davi Pires {dpr@cin.ufpe.br}

Revisão

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

– super• Sobrescrevendo métodos• Casts

– erro: ClassCastException• instanceof

Davi Pires {dpr@cin.ufpe.br}

Um exemplo...

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

Professor ProfessorDaPos

ProfessorDaGraduacao

ProfessorAdjunto

class Professor {

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

Davi Pires {dpr@cin.ufpe.br}

Métodos abstratos

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

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

• Palavra reservada abstract.

Davi Pires {dpr@cin.ufpe.br}

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; }

}

Davi Pires {dpr@cin.ufpe.br}

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!

Davi Pires {dpr@cin.ufpe.br}

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; }

}

Davi Pires {dpr@cin.ufpe.br}

Classes Abstratas

• Exemplo

Professor professor;professor = new Professor( );

professor = new ProfessorAdjunto( );

Davi Pires {dpr@cin.ufpe.br}

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 {

//...

}

Davi Pires {dpr@cin.ufpe.br}

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.

Davi Pires {dpr@cin.ufpe.br}

Considerações

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

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

implementação?

Davi Pires {dpr@cin.ufpe.br}

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

Davi Pires {dpr@cin.ufpe.br}

Interfaces

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

interface Exemplo {

public void a(..);

public void b(..);

}

Davi Pires {dpr@cin.ufpe.br}

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); }}

Davi Pires {dpr@cin.ufpe.br}

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.

Davi Pires {dpr@cin.ufpe.br}

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(..) { //... }}

Davi Pires {dpr@cin.ufpe.br}

Implementando interfaces

• Se

• Então

• ou

class A implements InterfaceB {...}

A implementa todos os métodos de InterfaceB

A é declarada como abstract

Davi Pires {dpr@cin.ufpe.br}

Interfaces

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

Davi Pires {dpr@cin.ufpe.br}

Dúvidas

Davi Pires {dpr@cin.ufpe.br}

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!

Davi Pires {dpr@cin.ufpe.br}

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.

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.

top related