Orientação a Objeto - Usando Objetos

Objetivos da seção

Introdução à Orientação a Objeto (OO)

wpe2C.jpg (14381 bytes)

O Primeiro Programa OO: Instanciação e Uso de Objetos

/*
 * Movimentação simples de uma conta bancária
 */

// Precisaremos usar classes já prontas no programa
// Aqui, estamos trazendo essas classes para "dentro" do nosso programa
import p1.aplic.banco.*; // para poder manusear contas bancárias

// Programa Banco1
public class Banco1 {
	// O programa sempre tem um "método" main que é onde começa a execução
	public static void main(String args[]) {
		// Abra uma conta de número 1 para João com CPF 309140605-06
		// A conta será "referenciada" com a variável umaConta
		ContaSimples umaConta = new ContaSimples("Joao", "30914060506", 1);
		// Nesta conta, deposite R$1000,00
		umaConta.depositar(1000.0);

		// Imprima o saldo da conta de João
		double saldo = umaConta.getSaldo();
		System.out.print("Saldo da conta de Joao antes do saque: ");
		System.out.println(saldo);

		// Saque R$300,00 desta conta
		umaConta.sacar(300.0);
		// Imprima o objeto umaConta
		System.out.println(umaConta);
		// Imprima o saldo da conta de João
		System.out.println("Saldo da conta de Joao depois do saque: "
				+ umaConta.getSaldo());
	} // fim do método main
} // fim da classe Banco1
Saldo da conta de Joao antes do saque: 1000.0
ContaSimples numero 1, titular Joao, data 01/06/2001, saldo R$700,00
Saldo da conta de Joao depois do saque: 700.0

wpe2E.jpg (10577 bytes)

wpe5C.jpg (6429 bytes)

System.out.println(umaConta);
System.out.println(umaConta.toString());

Encapsulamento

objeto.gif (4646 bytes)

objetoconta.gif (5193 bytes)

Próximo Programa: Identidade de Objetos

Programa Banco2
	Abra uma conta de número 1 para João com CPF 309140605-06
	Nesta conta, deposite R$1000,00
	Abra uma conta de número 2 para Ana com CPF 123456789-01
	Transfira R$400,00 da conta de João para a conta de Ana
	Imprima o saldo da conta de João
	Imprima o saldo da conta de Ana
/*
 * Movimentação simples de duas contas bancárias
 */

import p1.aplic.banco.*; // para poder manusear contas bancárias

public class Banco2 {
	public static void main(String args[]) {
		// Abra uma conta de número 1 para João com CPF 309140605-06
		// A conta será "referenciada" com a variável umaConta
		ContaSimples umaConta = new ContaSimples("Joao", "30914060506", 1);
		// Nesta conta, deposite R$1000,00
		umaConta.depositar(1000.0);

		// Abra uma conta de número 2 para Ana com CPF 123456789-01
		// A conta será "referenciada" com a variável outraConta
		ContaSimples outraConta = new ContaSimples("Ana", "12345678901", 2);
		// Transfira R$400,00 da conta de João para a conta de Ana
		umaConta.transferir(outraConta, 400.0);

		// Imprima o saldo da conta de João
		double saldo = umaConta.getSaldo();
		System.out.print("Saldo da conta de Joao: ");
		System.out.println(saldo);

		// Imprima o saldo da conta de Ana
		System.out.println("Saldo da conta de Ana: " + outraConta.getSaldo());
		// Imprima o saldo da conta de Ana, novamente, com outro método
		System.out.println("Saldo da conta de Ana: "
				+ outraConta.getSaldoMonetário());

		// Impressao dos objetos
		System.out.println("Situacao da primeira conta: ");
		System.out.println(umaConta);
		System.out.println("Situacao da segunda conta: ");
		System.out.println(outraConta);
	} // fim do método main
} // fim da classe Banco2
Saldo da conta de Joao: 600.0
Saldo da conta de Ana: 400.0
Saldo da conta de Ana: R$400,00
Situacao da primeira conta:
ContaSimples numero 1, titular Joao, data 01/06/2001, saldo R$600,00
Situacao da segunda conta:
ContaSimples numero 2, titular Ana, data 01/06/2001, saldo R$400,00

Próximo Programa: Várias Classes

/*
 * Uso de objetos de várias classes, entrada de dados
 */

import p1.aplic.banco.*;
import p1.aplic.geral.*; // para mexer com a classe Pessoa
import p1.io.*; // para fazer entrada de dados

public class Banco4 {
	public static void main(String args[]) {
		// declaração de variáveis de 2 classes (tipos) diferentes
		// no fim, teremos 4 objetos de 2 classes
		Pessoa oTitular1, oTitular2;
		ContaSimples umaConta, outraConta;

		// tempo de vida: os objetos ainda nao existem
		// a seguinte linha daria erro:
		// umaConta.depositar(1000.0);

		// cria dois objetos Pessoa com nome e CPF
		oTitular1 = new Pessoa("Joao", "30914060506");
		oTitular2 = new Pessoa("Ana", "12345678901");

		// cria as duas contas
		// Observe que ContaSimples pode ser criada com um titular
		// do tipo Pessoa em vez de dar nome e CPF separadamente
		umaConta = new ContaSimples(oTitular1, 1);
		outraConta = new ContaSimples(oTitular2, 2);

		// Vamos ver quanto vamos depositar
		double valorADepositar = Entrada.in
				.lerdouble("Entre com o valor a depositar: ");
		System.out.println("Vou depositar " + valorADepositar);
		umaConta.depositar(valorADepositar);

		// Vamos ver quanto vamos transferir
		double valorATransferir = Entrada.in
				.lerdouble("Entre com o valor a transferir: ");
		System.out.println("Vou transferir " + valorATransferir);
		umaConta.transferir(outraConta, valorATransferir);

		// Fecha a agencia e guarda toda a informação em arquivo
		Agencia.fecharCaixa();
		System.out.println("OK. Caixa fechado.");
	} // main
} // Banco4
Entre com o valor a depositar: 1000
Vou depositar 1000.0
Entre com o valor a transferir: 34
Vou transferir 34.0
OK. Caixa fechado.
    Agencia.fecharCaixa();

Próximo Programa: Acesso a Dados Persistentes

/*
 * Persistência
 */

import p1.aplic.banco.*;
import p1.aplic.geral.*; // para mexer com a classe Data
import p1.io.*;

public class Banco5 {
	public static void main(String args[]) {
		// declaração de variáveis de 3 classes (tipos) diferentes
		// no fim, teremos 4 objetos de 3 classes
		ContaSimples umaConta;
		Extrato umExtrato;
		Data hoje, ontem;

		// localiza a conta de número 1
		// (ela já foi criada e armazenada anteriormente)
		// O "cast" (ContaSimples) será explicado em outro momento
		// O motivo é que localizarConta retorna um objeto do tipo Conta
		// que representa uma conta bancária genérica e não apenas uma
		// ContaSimples
		umaConta = (ContaSimples) Agencia.localizarConta(1);

		// Vamos fazer um saque
		System.out.println("Voce tem " + umaConta.getSaldoMonetário()
				+ " na conta");
		double valor = Entrada.in.lerdouble("Quanto voce quer sacar? ");
		umaConta.sacar(valor);

		// Vamos tirar um extrato de conta entre ontem e hoje
		hoje = new Data(); // hoje representa a data de hoje
		ontem = new Data(); // ontem ainda representa hoje
		ontem.somarDia(-1); // agora, temos a data de ontem
		umExtrato = umaConta.criarExtrato(ontem, hoje);
		// Imprime o extrato
		System.out.println(umExtrato.formatar());
		System.out.println("Saldo: " + umaConta.getSaldoMonetário());

		// Vamos atualizar as informações persistentes
		Agencia.fecharCaixa();
	} // main
} // Banco5
Voce tem R$966,00 na conta
Quanto voce quer sacar? 53
Extrato de conta entre 31/05/2001 16:35 e 01/06/2001 16:35
Data                  Debito Credito           Valor Descricao
01/06/2001 16:18     0000000 0000001       R$1000,00 deposito
01/06/2001 16:18     0000001 0000002         R$34,00 transferencia para conta 2
01/06/2001 16:35     0000001 0000000         R$53,00 saque

Saldo: R$913,00

Próximo Programa: um Exemplo Usando while e switch

/*
 * Laço: leitura/processamento (até um marcador final)
 */

import p1.aplic.banco.ContaSimples;
import p1.io.Entrada;

public class Banco8 {
	public static void main(String args[]) {
		final int DEPOSITAR = 1;
		final int SACAR = 2;
		final int SALDO = 3;
		final int SAIR = 4;
		// o caractere de fim de linha pode ser diferente de um sistema para
		// outro
		// exemplo: "\r\n" no MSDOS/Windows, "\n" no UNIX, "\r" no MacIntosh.
		// etc.
		final String fimDeLinha = System.getProperty("line.separator");
		final String prompt = "Digite a opcao desejada:" + fimDeLinha
				+ DEPOSITAR + ". Depositar" + fimDeLinha + SACAR + ". Sacar"
				+ fimDeLinha + SALDO + ". Saldo" + fimDeLinha + SAIR + ". Sair"
				+ fimDeLinha + "Opcao: ";
		if (args.length != 3) {
			System.err
					.println("Sintaxe: java Banco8 titular cpf numeroDaConta");
			System.exit(1);
		}
		ContaSimples aConta = new ContaSimples(args[0], args[1], Integer
				.parseInt(args[2]));

		int opção = Entrada.in.lerInt(prompt);
		while (opção != SAIR) {
			switch (opção) {
			case DEPOSITAR:
				double valorADepositar = Entrada.in
						.lerdouble("Entre com o valor a depositar: ");
				aConta.depositar(valorADepositar);
				break;
			case SACAR:
				double valorASacar = Entrada.in
						.lerdouble("Entre com o valor a sacar: ");
				aConta.sacar(valorASacar);
				break;
			case SALDO:
				System.out.println("Saldo: " + aConta.getSaldoMonetário());
				break;
			default:
				System.err.println("Opcao " + opção + " desconhecida");
				break;
			}
			// leia novamente para voltar ao início do laço
			opção = Entrada.in.lerInt(prompt);
		}
		System.out.println("Saldo final: " + aConta.getSaldoMonetário());
	} // main
} // Banco8
C:\...\p2\html\src>java -classpath .;packagep1\p1.jar Banco8 joao 12345678901 4
Digite a opcao desejada:
1. Depositar
2. Sacar
3. Saldo
4. Sair
Opcao: 1
Entre com o valor a depositar: 34
Digite a opcao desejada:
1. Depositar
2. Sacar
3. Saldo
4. Sair
Opcao: 2
Entre com o valor a sacar: 567
Digite a opcao desejada:
1. Depositar
2. Sacar
3. Saldo
4. Sair
Opcao: 3
Saldo: R$34,00
Digite a opcao desejada:
1. Depositar
2. Sacar
3. Saldo
4. Sair
Opcao: 2
Entre com o valor a sacar: 30
Digite a opcao desejada:
1. Depositar
2. Sacar
3. Saldo
4. Sair
Opcao: 3
Saldo: R$4,00
Digite a opcao desejada:
1. Depositar
2. Sacar
3. Saldo
4. Sair
Opcao: 4
Saldo final: R$4,00

O Mundo de Software Simulando o Mundo Real

Programas Adicionais para o Aluno Estudar:

Documentação para Melhor Entender o Package p1

oo-1 programa próxima