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

 

Subtipos sem Herança

class Banco

implements QQBanco {

...

}

 

class BancoModular

implements QQBanco {

...

}

 

Implements

 

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

 

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)

  • Agrupa objetos com implementações compartilhadas

  • Define novas classes através de herança (simples) de código

  • Só uma pode ser supertipo de outra classe

Interfaces

  • Agrupa objetos com implementações diferentes

  • Define novas interfaces através de herança (múltipla) de assinaturas

  • Várias podem ser supertipo do mesmo tipo


class ConjConta {

void inserir (Conta c) {...}

Conta procura(String num) {...}

}

 

Leitura

Sérgio Soares(scbs@di.ufpe.br)