Classes Abstratas

Programação 3: Orientação a Objetos e Java


Objeto Conta Imposto

 

Estados do Objeto Conta Imposto

 

Estados do Objeto Conta

 

Conta Imposto: Assinatura

class ContaImposto {

void credito (double valor) {}

void debito (double valor) {}

String numero() {}

double saldo() {}

ContaImposto (String n) {}

}

 

Conta Imposto: Assinatura

class ContaImpostoM extends Conta {

ContaImpostoM (String num) {}

}

 

Conta Imposto: Descrição

class ContaImpostoM extends Conta {

void debito(double val) {

super.debito(val + (val * 0.001));

}

ContaImpostoM (String num) {super (num);}

}

}

 

Subtipos e Subclasses

 

Subclasses e Comportamento

 

Revisão/Otimização de Código

...

Conta conta;

...

conta.credito(500.87);

conta.debito(500.87);

return conta.saldo();

...

Conta conta;

...

return conta.saldo();

Modificação é Válida?

 

Subclasses e Evolução de Software

 

Reuso sem Subtipos

 

Reuso preservando Subtipos

 

Definindo Classes Abstratas

abstract class ContaAbstrata {

private String numero;

protected double saldo;

void credito (double valor) {

saldo = saldo + valor;

}

abstract void debito (double valor);

String numero() {return numero;}

double saldo() {return saldo;}

}

 

Classes Abstratas

 

Contas: Nova Descrição

class NovaConta extends ContaAbstrata {

void debito (double valor) {

saldo = saldo - valor;

}

NovaConta (String n) {

numero = n; saldo = 0;

}

}

 

Poupanças: Nova Descrição

class NovaPoupanca extends NovaConta {

void rende_juros(double t) {

this.credito(this.saldo() * t);

}

NovaPoupanca (String num) {

super (num);

}

}

 

Conta Especial: Nova Descrição

class NovaContaEspecial extends NovaConta {

private double bonus;

void credito(double valor) {

bonus = bonus + (valor * 0.01);

super.credito(valor);

}

void rende_bonus() {

super.credito(bonus);

bonus = 0;

}

double bonus() {return bonus;}

NovaContaEspecial (String num) {

super (num);

bonus = 0;

}

}

 

Conta Imposto: Descrição

class ContaImposto extends ContaAbstrata {

void debito(double val) {

saldo = saldo - (val + (val * 0.001));

}

ContaImposto (String num) {

numero = num; saldo = 0;

}

}

 

Substituição e Ligações Dinâmicas

...

ContaAbstrata ca, ca’;

ca = new NovaContaEspecial(¨21.342-7¨);

ca’ = new ContaImposto(¨21.987-8¨);

ca.debito(500);

ca’.debito(500);

System.out.println(ca.saldo());

System.out.println(ca’.saldo());

...

 

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