Programação Orientada a Objetos - Classe e Objetos em Java
Published:
Neste laboratório, você desenvolverá um programa simples para representar duas contas bancárias.
Serão criados dois objetos da classe ContaBancaria:
bobContaadaConta
Cada conta deverá possuir seu próprio número e saldo e deverá permitir operações de crédito e débito.
Ao longo das tarefas, o programa será evoluído para permitir a escolha da conta e da operação por meio de argumentos de linha de comando.
Tarefa 1: Criando e instanciando contas
Implemente a classe ContaBancaria contendo:
Atributos:
numero: número da conta;saldo: saldo atual.
Métodos:
creditar(float valor);debitar(float valor);getNumero();getSaldo().
Crie um construtor que receba o número da conta e inicialize seu saldo com 0.0f.
Na classe Principal, instancie:
ContaBancaria bobConta = new ContaBancaria("001");
ContaBancaria adaConta = new ContaBancaria("002");
Exiba os dados das duas contas.
Em seguida, compare as referências:
System.out.println(bobConta == adaConta);
Responda:
- Qual foi o resultado da comparação?
bobContaeadaContapertencem à mesma classe?- Se pertencem à mesma classe, por que
bobConta == adaContaresulta emfalse? - O operador
==está comparando o conteúdo das contas ou suas referências?
Importante: duas variáveis podem referenciar objetos da mesma classe e, ainda assim, representar objetos completamente independentes.
Tarefa 2: Operações usando argumentos de linha de comando
Modifique a classe Principal para permitir que o usuário escolha:
- a conta;
- a operação;
- o valor.
A execução deverá seguir este formato:
java Principal bob creditar 500
ou:
java Principal ada debitar 100
Os argumentos estarão disponíveis em:
args[0] // conta
args[1] // operação
args[2] // valor
Converta o terceiro argumento para float:
float valor = Float.parseFloat(args[2]);
Utilize switch/case para selecionar primeiro a conta e depois a operação.
Exemplo de estrutura:
Conta escolhida
│
├── bob
│ ├── creditar
│ └── debitar
│
└── ada
├── creditar
└── debitar
Depois de executar a operação, exiba:
- número da conta;
- operação realizada;
- valor da operação;
- saldo atualizado.
Teste pelo menos quatro comandos diferentes:
java Principal bob creditar 500
java Principal bob debitar 100
java Principal ada creditar 1000
java Principal ada debitar 250
Tarefa 3: Modificando o estado inicial
Até este momento, o construtor define:
saldo = 0.0f;
Modifique o construtor para que o saldo inicial também seja informado durante a criação do objeto:
ContaBancaria(String numero, float saldo)
Depois, instancie as contas com valores iniciais diferentes:
ContaBancaria bobConta = new ContaBancaria("001", 100.0f);
ContaBancaria adaConta = new ContaBancaria("002", 500.0f);
Responda:
- Qual é o saldo de cada objeto imediatamente após sua criação?
- O que mudou em relação à versão anterior?
- Qual é o papel do construtor na definição do estado inicial do objeto?
- Alterar
bobContamodifica o saldo deadaConta? Explique.
Tarefa 4: Transferência entre contas
Agora implemente uma operação mais completa: transferência entre as duas contas.
O programa deverá aceitar:
java Principal transferir bob ada 200
Nesse exemplo:
bobé a conta de origem;adaé a conta de destino;200é o valor transferido.
Para realizar a transferência:
- verifique se o valor é positivo;
- verifique se a conta de origem possui saldo suficiente;
- debite o valor da conta de origem;
- credite o mesmo valor na conta de destino;
- exiba o saldo das duas contas após a transferência.
Exemplo esperado:
Transferência realizada!
Conta Bob
Saldo: 300.0
Conta Ada
Saldo: 700.0
Caso o saldo seja insuficiente:
Transferência não realizada: saldo insuficiente.
Ao finalizar, responda:
Durante a transferência, quantos objetos
ContaBancariaparticiparam da operação? Como o estado de cada objeto foi alterado?
Diagrama UML
+--------------------------------+
| ContaBancaria |
+--------------------------------+
| - numero : String |
| - saldo : float |
+--------------------------------+
| + ContaBancaria(numero) |
| + creditar(valor) : void |
| + debitar(valor) : void |
| + getNumero() : String |
| + getSaldo() : float |
+--------------------------------+
utilizada por
+--------------------------------+
| Principal |
+--------------------------------+
| + main(args : String[]) : void |
+--------------------------------+
Requisitos Técnicos
- Crie os arquivos
ContaBancaria.javaePrincipal.java. - Os atributos
numeroesaldodevem serprivate. - Utilize um construtor para inicializar os objetos.
- Utilize
thisquando parâmetro e atributo tiverem o mesmo nome. - Implemente
creditar()edebitar(). - Não permita crédito ou débito de valores negativos.
- Não permita que o saldo fique negativo.
- Instancie obrigatoriamente
bobContaeadaConta. - Compare
bobConta == adaConta. - Utilize argumentos de linha de comando na Tarefa 2.
- Utilize
switch/casepara selecionar contas e operações. - Na Tarefa 3, modifique o construtor para receber o saldo inicial.
- Na Tarefa 4, implemente a transferência entre as duas contas.
- Exiba mensagens claras para cada operação realizada.
Código Inicial (esqueleto)
/**
* Representa uma conta bancária.
*/
public class ContaBancaria {
private String numero;
private float saldo;
/**
* Cria uma conta com saldo inicial igual a zero.
*
* @param numero número da conta
*/
public ContaBancaria(String numero) {
// TODO: inicializar numero
// TODO: inicializar saldo
}
/**
* Adiciona um valor ao saldo.
*
* @param valor valor a ser creditado
*/
public void creditar(float valor) {
// TODO: validar e creditar
}
/**
* Retira um valor do saldo.
*
* @param valor valor a ser debitado
*/
public void debitar(float valor) {
// TODO: validar e debitar
}
/**
* Retorna o número da conta.
*
* @return número da conta
*/
public String getNumero() {
return numero;
}
/**
* Retorna o saldo atual.
*
* @return saldo da conta
*/
public float getSaldo() {
return saldo;
}
}
/**
* Programa para manipular duas contas bancárias.
*/
public class Principal {
/**
* Executa o programa.
*
* @param args argumentos de linha de comando
*/
public static void main(String[] args) {
ContaBancaria bobConta =
new ContaBancaria("001");
ContaBancaria adaConta =
new ContaBancaria("002");
System.out.println(
"Mesma referência? " + (bobConta == adaConta)
);
// TODO: verificar os argumentos recebidos
// TODO: identificar a conta com switch/case
// TODO: identificar a operação com switch/case
// TODO: realizar crédito ou débito
// TODO: exibir o saldo atualizado
}
}
