Olá a todos,
Estou começando no mundo java através dos cursos da Caelum, onde terminei a duas semanas atrás o curso FJ11. Estou estudando a apostila e resolvi através dos videos da Alura modificar um pouco os exercícios, onde me deparei com a seguinte dúvida:
1-) Criei as classes:
1.1-) Clientes com dois atributos (nome, cpf) com Getters e Setters.
1.2-) Conta (com baixo acoplamento, sendo mais genérica possível)
package br.com.caelum.contas.modelo;
public class Conta {
private Cliente titular = new Cliente();
private int numero;
private int agencia;
private double saldo;
public int getNumero() {
return this.numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public int getAgencia() {
return this.agencia;
}
public void setAgencia(int agencia) {
this.agencia = agencia;
}
public double getSaldo() {
return this.saldo;
}
public String getTitular() {
return this.titular.getNome();
}
public void setTitular(String nome) {
this.titular.setNome(nome);
}
public void saca(double valor) {
this.saldo -= valor;
}
public void deposita(double valor) {
this.saldo += valor;
}
public void transfere(double valor, Conta destino) {
this.saca(valor);
destino.deposita(valor);
}
}
1.3-) ContaCorrente (Esta classe implementa a chamada dos métodos da mãe)
package br.com.caelum.contas.modelo;
import br.com.caelum.contas.modelo.OperacoesContaCorrente;
public class ContaCorrente extends Conta {
private boolean concluido;
private OperacoesContaCorrente occ = new OperacoesContaCorrente();
public boolean concluido() {
return this.concluido;
}
@Override
public void saca(double valor) {
if(occ.analisaSaldoParaSaque(valor, contacorrente)) {
super.saca(valor);
System.out.println(occ.getMensagem());
} else {
System.out.println(occ.getMensagem());
}
}
@Override
public void deposita(double valor) {
if(occ.analisaValorDaOperacao(valor)) {
super.deposita(valor);
System.out.println(occ.getMensagem());
} else {
System.out.println(occ.getMensagem());
}
}
}
O método deposita() está funcionando. O meu problema está no método saca(), pois como ele está fazendo polimorfismo e tem apenas um parâmetro (double valor) igual a da classe “Conta” eu quis fazer um teste criando uma classe para analisar as operações da conta corrente, chamada de “OperacoesContaCorrente” que irá verificar se há saldo para fazermos a operação de sacar da conta corrente. Não sei se estou pensando da maneira correta, pois não consigo através da classe “ContaCorrente” passar a referencia correta que eu criei na classe que tem o void main.
1.4-) OperacoesContaCorrente
package br.com.caelum.contas.modelo;
public class OperacoesContaCorrente {
private boolean concluido;
private String mensagem;
public String getMensagem() {
return this.mensagem;
}
public boolean analisaSaldoParaSaque(double valor, Conta conta) {
this.concluido = false;
if(conta.getSaldo() > valor && analisaValorDaOperacao(valor)) {
this.concluido = true;
this.mensagem = "Operação efetuada com sucesso...";
} else {
this.mensagem = "Sua operação não pode ser efetivada. Favor verificar o seu saldo ou o valor digitado...";
}
return concluido;
}
public boolean analisaValorDaOperacao(double valor) {
this.concluido = false;
if(valor > 0) {
this.concluido = true;
this.mensagem = "Operação efetuada com sucesso...";
} else {
this.mensagem = "Sua operação não pode ser efetivada. Favor verificar o valor digitado...";
}
return concluido;
}
}
O método que estou com problema aqui é o analisaSaldoParaSaque(double valor, Conta conta)
Alguém pode me ajudar
Segue abaixo a classe do void main
1.5-) TestaConta
package br.com.caelum.contas.main;
import br.com.caelum.contas.modelo.Conta;
import br.com.caelum.contas.modelo.ContaCorrente;
public class TestaConta {
public static void main(String[] args) {
Conta contacorrente = new ContaCorrente() ;
contacorrente.setTitular("Marcelo");
contacorrente.setAgencia(140);
contacorrente.setNumero(123456);
contacorrente.deposita(100);
System.out.println("Cliente.........: " + contacorrente.getTitular());
System.out.println("Agencia.........: " + contacorrente.getAgencia());
System.out.println("Conta Corrente..: " + contacorrente.getNumero());
System.out.println("Saldo...........: " + contacorrente.getSaldo());
System.out.println();
System.out.println();
contacorrente.saca(20);
System.out.println("Saldo...........: " + contacorrente.getSaldo());
}
}
Meu teste não tem a finalidade de dizer o que é certo ou errado, apenas entender através de erros e acertos onde poderei chegar.
Obrigado pela ajuda