Skip to content

Commit

Permalink
Mais sobre heranca e encapsulamento
Browse files Browse the repository at this point in the history
  • Loading branch information
vigusmao committed Aug 5, 2021
1 parent 36e614d commit 5ec63fb
Show file tree
Hide file tree
Showing 7 changed files with 202 additions and 31 deletions.
33 changes: 28 additions & 5 deletions Banco/src/Banco.java
@@ -1,16 +1,39 @@
public class Banco {






public static void main(String[] args) {

Correntista correntista = new Correntista();
Correntista cicrano = new Correntista("Cicrano", 231232);

System.out.println(correntista.getNome());
System.out.println(correntista.getLimiteChequeEspecial());
System.out.println(cicrano.getNome());
System.out.println(cicrano.getLimiteChequeEspecial());

PessoaFisica fulano = new PessoaFisica();
PessoaFisica fulano = new PessoaFisica("Beltrana", 432212);

System.out.println(fulano.getNome());
System.out.println(fulano.getLimiteChequeEspecial());


ContaCorrente contaDoCicrano = new ContaCorrente(111, cicrano);


Gerente meuGerente = new Gerente("João", 12345678, 1111);
meuGerente.setEndereco("Novo endereço, numero tal");

System.out.println(meuGerente.getNome());
System.out.println(meuGerente.getDataDeAdmissao());




GerenteGeral gerentona = new GerenteGeral("Mariza Silva", 12333, 1);

// gerentona.gerenciarConta(contaDoCicrano);
gerentona.encerrarConta(contaDoCicrano);


}
}
29 changes: 29 additions & 0 deletions Banco/src/ContaCorrente.java
Expand Up @@ -14,6 +14,8 @@ public class ContaCorrente {

private Gerente gerente;

private boolean ativa;

public static final float SALDO_INICIAL_DA_CONTA = 10; // "constante"

private static int quantidadeDeTransacoesDeTodasAsContas = 0;
Expand All @@ -27,6 +29,7 @@ public ContaCorrente(int numeroDaConta, Correntista correntista) {
this.transacoes = new ArrayList<>();
this.transacoes.add(String.format(
"Conta criada com saldo de R$%.2f", this.saldoEmReais));
this.ativa = true;
}

public float getSaldoEmReais() {
Expand Down Expand Up @@ -60,6 +63,10 @@ public String getExtrato() {
return resultado;
}

public boolean isAtiva() {
return this.ativa;
}

/**
* Retorna a quantidade total de transações do banco, ou seja,
* de todas as contas correntes que já foram criadas.
Expand Down Expand Up @@ -106,4 +113,26 @@ private void registrarTransacao(String registro) {
String obterDataAtualAsString() {
return String.format("%s", new Date());
}

public void encerrar() {
if (this.saldoEmReais < 0) {
// ToDo lançar exceção
// não deixa encerrar conta com saldo negativo
}
this.ativa = false; // desativou a conta

System.out.printf("\nConta %d encerrada", this.numero);
}

public Gerente getGerente() {
return gerente;
}

public void setGerente(Gerente novaGerente) {
if (this.gerente != null) {
// avisa ao gerente antigo que ele não é mais gerente
this.gerente.deixarDeGerenciarConta(this);
}
this.gerente = novaGerente;
}
}
60 changes: 57 additions & 3 deletions Banco/src/ContaCorrenteTest.java
@@ -1,7 +1,9 @@
import org.junit.Before;
import org.junit.Test;

import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;

public class ContaCorrenteTest {

Expand All @@ -13,17 +15,17 @@ public class ContaCorrenteTest {
private ContaCorrente contaDoJoao;

private long cpfDaMaria = 22222;
private Correntista maria = new Correntista(cpfDaMaria, "Maria");
private Correntista maria;
private ContaCorrente contaDaMaria = new ContaCorrente(2, maria);

private float saldoInicial;

@Before
public void setUp() {
joao = new Correntista(cpfDoJoao, "João");
joao = new Correntista("João", cpfDoJoao);
contaDoJoao = new ContaCorrente(1, joao);

maria = new Correntista(cpfDaMaria, "Maria");
maria = new Correntista("Maria", cpfDaMaria);
contaDaMaria = new ContaCorrente(2, maria);

saldoInicial = contaDoJoao.getSaldoEmReais();
Expand Down Expand Up @@ -145,6 +147,58 @@ public void testarGetCpfDoCorrentista() {
cpfDoJoao, contaDoJoao.getCpfDoCorrentista());
}

@Test
public void testarContaEncerradaPeloGerenteDeContaErrado() {
Gerente gerenteDeContaCarlos = new Gerente("Carlos Roberto", 999, 20);

gerenteDeContaCarlos.encerrarConta(contaDoJoao);

assertTrue("Uma conta não pode ser encerrada por gerentes de conta " +
"que não gerenciem aquela conta", contaDoJoao.isAtiva());
}

@Test
public void testarContaEncerradaPeloGerenteDeContaCorreto() {
Gerente gerenteDeContaCarlos = new Gerente("Carlos Roberto", 999, 20);

gerenteDeContaCarlos.gerenciarConta(contaDoJoao);

// sanity check
assertTrue(gerenteDeContaCarlos.ehGerenteDaConta(contaDoJoao));

gerenteDeContaCarlos.encerrarConta(contaDoJoao);

assertFalse("Uma conta deve ficar com status de inativa após ser encerrada " +
"pelo seu gerente", contaDoJoao.isAtiva());

assertFalse("Contas encerradas não devem constar da lista de contas " +
"gerenciadas por gerente algum", gerenteDeContaCarlos.ehGerenteDaConta(contaDoJoao));
}

@Test
public void testarContaEncerradaPorUmGerenteGeral() {
Gerente gerenteDeContaCarlos = new Gerente("Carlos Roberto", 999, 20);

gerenteDeContaCarlos.gerenciarConta(contaDoJoao);

GerenteGeral gerenteGeralMariza = new GerenteGeral("Mariza Silva", 888, 2);

// sanity check
assertTrue(gerenteDeContaCarlos.ehGerenteDaConta(contaDoJoao));

gerenteGeralMariza.encerrarConta(contaDoJoao);

assertFalse("Uma conta deve ficar com status de inativa após ser encerrada " +
"por um gerente geral", contaDoJoao.isAtiva());

assertFalse("Uma conta encerrada não deve constar da lista de contas " +
"gerenciadas pelo gerente geral que a encerrou", gerenteGeralMariza.ehGerenteDaConta(contaDoJoao));

assertFalse("Contas encerradas não devem constar da lista de contas " +
"gerenciadas por gerente algum", gerenteDeContaCarlos.ehGerenteDaConta(contaDoJoao));
}


// @Test
// public void testarExtrato() {
// String extratoEsperado = "Conta criada com saldo de R$10,00\n";
Expand Down
18 changes: 11 additions & 7 deletions Banco/src/Correntista.java
Expand Up @@ -2,19 +2,21 @@

public class Correntista extends PessoaFisica {

private static final int LIMITE_DEFAULT = 100;

private float limiteChequeEspecial;
private ArrayList<ContaCorrente> contas;
private ArrayList<AplicacaoFinanceira> investimentos;

public float getLimiteChequeEspecial() {
if (this.dataNascimento != null) {

}
public Correntista(String nome, long cpf) {
super(nome, cpf);
this.contas = new ArrayList<>();
this.investimentos = new ArrayList<>();
this.limiteChequeEspecial = LIMITE_DEFAULT;
}

public float getLimiteChequeEspecial() {
return limiteChequeEspecial;



}

public void setLimiteChequeEspecial(float limiteChequeEspecial) {
Expand All @@ -24,4 +26,6 @@ public void setLimiteChequeEspecial(float limiteChequeEspecial) {
public float getTotalInvestido() {
return 0; // ToDo IMPLEMENT ME!!
}


}
47 changes: 33 additions & 14 deletions Banco/src/Gerente.java
Expand Up @@ -3,37 +3,56 @@

public class Gerente extends PessoaFisica {

private final long numeroMatricula;
private long numeroMatricula;

private Date dataDeAdmissao;

private ArrayList<ContaCorrente> contasGerenciadas;

public Gerente(String nome, long cpf, long numeroMatricula) {
this.nome = nome;
this.cpf = cpf;
super(nome, cpf);

this.numeroMatricula = numeroMatricula;
this.contasGerenciadas = new ArrayList<>();
this.dataDeAdmissao = new Date(); // data corrente
this.contasGerenciadas = new ArrayList<>();
}

public long getNumeroMatricula() {
return numeroMatricula;
}

public Date getDataDeNascimento() {
return dataDeNascimento;
public Date getDataDeAdmissao() {
return dataDeAdmissao;
}

public void setDataDeNascimento(Date dataDeNascimento) {
this.dataDeNascimento = dataDeNascimento;
public void gerenciarConta(ContaCorrente conta) {
this.contasGerenciadas.add(conta);
conta.setGerente(this);
}

public long getCpf() {
return cpf;
public void deixarDeGerenciarConta(ContaCorrente conta) {
this.contasGerenciadas.remove(conta);
}

public String getNome() {
return nome;
public boolean ehGerenteDaConta(ContaCorrente conta) {
return this.contasGerenciadas.contains(conta);
}

public void encerrarConta(ContaCorrente conta) {
if (!this.contasGerenciadas.contains(conta)) {
return; // ToDo lançar exceção
// não vai encerrar se não é conta gerenciada por ele
}

conta.sacar(conta.getSaldoEmReais()); // sacar valor restante na conta
conta.encerrar();

deixarDeGerenciarConta(conta);
}

public void setNome(String nome) {
this.nome = nome;
@Override
public String toString() {
return String.format("Gerente %s (matrícula %d)",
getNome(), this.numeroMatricula);
}
}
22 changes: 22 additions & 0 deletions Banco/src/GerenteGeral.java
@@ -0,0 +1,22 @@
public class GerenteGeral extends Gerente {

public GerenteGeral(String nome, long cpf, int matricula) {
super(nome, cpf, matricula);
}

/**
* Encaminha email ao correntista informado,
* oferecendo empréstimo no valor igual a 10x o limite do cheque especial.
*
* @param correntista O correntista alvo
*/
public void oferecerEmprestimo(Correntista correntista) {

}

@Override
public void encerrarConta(ContaCorrente conta) {
gerenciarConta(conta);
super.encerrarConta(conta);
}
}
24 changes: 22 additions & 2 deletions Banco/src/PessoaFisica.java
Expand Up @@ -2,10 +2,27 @@

public class PessoaFisica {

private long cpf;
// private: acessível apenas de dentro da própria classe
// sem modificador de acesso (default): disponível de dentro domesmo package
// protected: disponível de dentro do mesmo package, e de dentro de qualquer subclasse
// public: acessível de qualquer lugar do seu código

private final long cpf;
private String nome;
private Date dataNascimento;
private String endereco;
protected Date dataNascimento;

// // construtor DEFAULT: se não o escrevermos, será injetado automaticamente
// public PessoaFisica() {
// super();
// }

public PessoaFisica(String nome, long cpf) {
this.nome = nome;
this.cpf = cpf;
this.endereco = "Nao informado";
// etc.
}

public Date getDataNascimento() {
return dataNascimento;
Expand All @@ -24,6 +41,9 @@ public String getNome() {
}

public void setNome(String nome) {
if (nome.length() > 30) {
return; // ToDo lançaria uma exceção
}
this.nome = nome;
}

Expand Down

0 comments on commit 5ec63fb

Please sign in to comment.