Interfaces
Programação 3: Orientação a Objetos e Java
Auditor de Banco
class AuditorB {
private String nome;
void investiga_banco(Banco b) {
if ((b.saldo_total() / b.num_contas()) > 500)
System.out.print ("Aprovado!");
else System.out.print ("Não aprovado!");
}
}
Auditor de Banco Modular
class AuditorBM {
private String nome;
void investiga_banco(BancoModular b) {
if ((b.saldo_total() / b.num_contas()) > 500)
System.out.print ("Aprovado!");
else System.out.print ("Não aprovado!");
}
}
Problema
Auditor Genérico
class Auditor {
private String nome;
void investiga_banco(QQBanco b) {
if ((b.saldo_total() / b.num_contas()) > 500)
System.out.print ("Aprovado!");
else System.out.print ("Não aprovado!");
}
}
Definindo Interfaces
interface QQBanco {
double saldo_total();
int num_contas();
}
Interfaces
Caso especial de classes abstratas...
Definem tipo de forma abstrata, apenas indicando o nome e o tipo dos métodos suportados pelos objetos do tipo
Os métodos são implementados em subtipos (subclasses)
Não têm construtores: não pode-se criar objetos já que métodos não são definidos
Subtipos sem Herança
class Banco
implements QQBanco {
...
}
class BancoModular
implements QQBanco {
...
}
Implements
classe implements interface1, interface2, ...
subtipo implements supertipo1, supertipo2, ...
Múltiplos supertipos: uma classe pode implementar mais de uma interface (contrastar com classes abstratas...)
Usando Auditores
Banco b = new Banco();
BancoModular bm = new BancoModular() ;
Auditor a = new Auditor();
...
a.investiga_banco(b);
a.investiga_banco(bm);
...
Interfaces e Reusabilidade
Evita duplicação de código através da definição de um tipo genérico, tendo como subtipos várias classes não relacionadas
Definição de Classes: Forma Geral
class C
extends C
implements I1, I2, ..., In {...}
Subtipos com Herança Múltipla
interface I
extends I1, I2, ..., In
{
... assinaturas de novos métodos ...
}
O que usar? Quando?
Classes (abstratas)
|
|
class ConjConta {
void inserir (Conta c) {...}
Conta procura(String num) {...}
}
Que outros mecanismos de Java poderiam ter sido usados para definir a classe DepósitoDeContas? Justifique a sua escolha. (Opicional)
Leitura
Sérgio Soares(scbs@di.ufpe.br) |