Exercício Polimorfismo
Exercício Polimorfismo
adapitado de [1]
Criar uma classe abstrata chamada
Operacaocom o atributovalordo tipodoublee um método abstrato chamadooperar()que retornará um valor do tipodouble.Crie uma classe
Debitoe outraCreditoque herda as caraterísticas deOperacao.O construtor deDebitoeCreditodeve receber o valor da operação e atribuir este valor a variável definida emOperacao(superclasse). Estas classes (DebitoeCredito) devem ter um métodooperar()que deve ser programado de acordo com sua finalidade:operar()da classeDebitoretorna o valor negativo pois a operação deve ser um debito enquanto a o métodooperar()deCreditoretorna o valor positivo.Criar a classe
Contacom o atributosaldodo tipodoubleque inicia com 0. Esta classe possui um métodoexecutarOperacao(Operacao opr)que recebe um parâmetro do tipoOperacaoque vai operar o saldo da conta correte (se for debito diminui, se for credito soma). Esta classe também possui o métodogetSaldo()que retorna o saldo do saldo atual.Crie a classe
Correntistacom os seguintes atributos:nome(do tipo String) econta(do tipoConta). O construtor deCorrentistadeve receber seu nome. A classe deve ter 2 métodos:public String getNome()epublic Conta getConta().Estes métodos retornam o nome e a conta respectivamente.Crie a classe
Bancocomo descrito no código abaixo:public class Banco { private List<Correntista> correntistas; public Banco() { this.correntistas = new ArrayList(); } public void addCorrentista(String nome){ //... } public Correntista getCorrentista(String nome) { //... } public void debitar(String nomeCorrentista, double valor) { Debito d = new Debito(valor); getCorrentista(nomeCorrentista).getConta().executarOperacao(d); } public void creditar(String nomeCorrentista, double valor) { Credito c = new Credito(valor); getCorrentista(nomeCorrentista).getConta().executarOperacao(c); } public double getSaldo(String nomeCorrentista) { return getCorrentista(nomeCorrentista).getConta().getSaldo(); } public void transferir(String nomeCorrentistaOrigem, String nomeCorrentistaDestino, double valor) { debitar(nomeCorrentistaOrigem, valor); creditar(nomeCorrentistaDestino, valor); } }Detalhe
public abstract class Operacao { private double valor; public Operacao(double valor) { this.valor = valor; } public abstract double operar(); protected double getValor() { return valor; } }public class Credito extends Operacao { public Credito(double valor) { super(valor); } @Override public double operar() { return getValor(); } }public class Debito extends Operacao { public Debito(double valor) { super(valor); } @Override public double operar() { return getValor()*-1; } }class Conta{ private double saldo; public Conta() { saldo = 0; } public void executarOperacao(Operacao opr){ saldo+=opr.operar(); } public double getSaldo() { return saldo; } }public class Correntista { private String nome; private Conta conta; public Correntista(String nome) { this.nome = nome; this.conta = new Conta(); } public String getNome() { return nome; } public Conta getConta() { return conta; } }import java.util.ArrayList; import java.util.List; public class Banco { private List<Correntista> correntistas; public Banco() { this.correntistas = new ArrayList(); } public void addCorrentista(String nome){ correntistas.add(new Correntista(nome)); } public Correntista getCorrentista(String nome) { for (Correntista correntista : correntistas) { if (correntista.getNome().equals(nome)) { return correntista; } } return null; } public void debitar(String nomeCorrentista, double valor) { Debito d = new Debito(valor); getCorrentista(nomeCorrentista).getConta().executarOperacao(d); } public void creditar(String nomeCorrentista, double valor) { Credito c = new Credito(valor); getCorrentista(nomeCorrentista).getConta().executarOperacao(c); } public double getSaldo(String nomeCorrentista) { return getCorrentista(nomeCorrentista).getConta().getSaldo(); } public void transferir(String nomeCorrentistaOrigem, String nomeCorrentistaDestino, double valor) { debitar(nomeCorrentistaOrigem, valor); creditar(nomeCorrentistaDestino, valor); } }public class TestaConta { public static void main(String[] args) { Banco itau = new Banco(); String nomeCorrentista1 = "Leandro"; itau.addCorrentista(nomeCorrentista1); System.out.println("Saldo da conta de "+nomeCorrentista1+" :"+itau.getSaldo(nomeCorrentista1)); itau.creditar(nomeCorrentista1, 500); System.out.println("Saldo da conta de "+nomeCorrentista1+" :"+itau.getSaldo(nomeCorrentista1)); itau.debitar(nomeCorrentista1, 400); System.out.println("Saldo da conta de "+nomeCorrentista1+" :"+itau.getSaldo(nomeCorrentista1)); String nomeCorrentista2 = "Leo"; itau.addCorrentista(nomeCorrentista2); System.out.println("Saldo da conta de "+nomeCorrentista2+" :"+itau.getSaldo(nomeCorrentista2)); itau.transferir(nomeCorrentista1, nomeCorrentista2, 300); System.out.println("Saldo da conta de "+nomeCorrentista1+" :"+itau.getSaldo(nomeCorrentista1)); System.out.println("Saldo da conta de "+nomeCorrentista2+" :"+itau.getSaldo(nomeCorrentista2)); } }Modifique o método
transferirda classeBancopara utilizar uma classeTransferirque herde deOperacao:
Entrega
Takenami, Igor. Introdução a Programação Orientada a Objetos. Salvador. 2011. (Apostila). ↩︎