de Objetos - CIC/UnBjhcf/MyBooks/itjava/slides/Conceitos... · 2006-08-24 · Polimorfismo na...

Post on 19-Jul-2020

0 views 0 download

Transcript of de Objetos - CIC/UnBjhcf/MyBooks/itjava/slides/Conceitos... · 2006-08-24 · Polimorfismo na...

Conceitos Básicos do Modelo de Objetos

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Conceitos Básicos do Modelo de Objetos (1/2)

�Objetos�Atributos (Variáveis ou Campos)�Operações (Métodos e Mensagens)�Classes

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

O Que é um Objeto?

� Uma representação de uma coisa do mundo real, como uma conta bancária, uma pessoa, um produto, um veículo, etc, cujo objetivo é suportar a construção de sistemas computacionais

� Uma entidade bem definida, presente em um programa em execução, que apresenta propriedades e a qual podem ser aplicadas operações.

� Objetos ocupam espaço na memória no computador, assim como um processo (programa em execução)

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Objetos em um Sistema Bancário

Banco

Contas

Conta

Débito Crédito Débito

Transações

Conta

Débito Débito

Transações

Conta

Credito Crédito

Transações

Cliente

Cliente

Cliente

Cliente

Clientes

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

debite()

credite()

emiteExtrato()

Saldo=100

Métodos de interagir como objeto

Atributos do objeto

Representação Gráfica de um Objeto

Numero=1

Uma Conta Bancária, cujo número é 1, e com saldo de R$ 100

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Outras Representações para Objetos

debite()credite()

emiteExtrato()

saldonumero

float debite(float)

float credite(float)

void emiteExtrato()

saldotransações

numero

c1: ContaBancaria

saldo = 100

float debite(float)float credite(float)void emiteExtrato()

numero = 1

c2: ContaBancaria

saldo = 100numero = 1

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Atributos de um Objeto

�Os atributos de um objeto são armazenados no interior destes, e nomeados através de VARIÁVEIS ou CAMPOS

�Os campos de um objeto contém�Valores primitivos (int, float, etc.) ou�Referências a outros objetos

�O valor dos campos de um objeto em um determinado momento forma seu ESTADO

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Transacao[]

Objetos, Atributos, Composições e Agregações

float saldo=10.50;

int numero=1;

Transacao[] transacoes;

Cliente cliente;

ContaBancaria

1 2 3 40

Transacao Transacao

Cliente

String nome;

ContaBancaria[] contas;

String“Maria”10

ContaBancaria[]

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Método

�É a interface através do qual se interage com o objeto

�Um método é definido pela sua assinatura (nome, valor de retorno, parametros de chamada) e pelo código que executa quando invocado

// O método debite descreve o que uma// conta bancária deve fazer quando debitandofloat debite(float valor) {saldo = saldo - valor;return saldo;

}

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Métodos da Interface de uma Conta Bancária

c1: ContaBancaria Nome e Tipo do Objeto

saldo = 100.25numero = 1

Atributos do Objeto

float debite(float)float credite(float)void emiteExtrato()

Métodos da Interface do Objeto

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Conta

Mensagem

�Corresponde à invocação de método de um objeto (chamado) por outro objeto (chamador)

Mensagem

Banco

ContaBancaria conta;

float saldo = conta.debite(30.25);

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Qual o Saldo da Conta Após a Invocação do Método Credite?

conta.credite(100)

Mensagem

ContaBancaria

saldo=300

ContaBancaria

saldo=?

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Classes

�São os programas que definem o comportamento dos objetos

�São moldes para criação de objetos�Muitos Objetos, Poucas Classes

�A classe é responsável pela criação dos objetos

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Representação Gráfica de uma Classe e Vários Objetos

Conta #1

debite()credite()

emiteExtrato()

Conta #2

debite()credite()

emiteExtrato()

Conta #3

Conta #4

debite()credite()

emiteExtrato()

debite()credite()

emiteExtrato()

ContaBancária

debite()credite()

emiteExtrato()

saldotransações

numero

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Outra Representações Gráficas para Classe e Objeto

ContaBancaria

saldo: float

float debite(float)float credite(float)void emiteExtrato()

numero: int

c2: ContaBancaria

saldo = -9.78numero = 2

c1: ContaBancaria

saldo = 100numero = 1

CLASSE OBJETOS

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Definindo a Classe ContaBancária em Java

public class ContaBancaria {private int numero;private int saldo;private Transacao[] transacoes;

public ContaBancaria(int numero) {...}

public float debite(float valor, String data) {saldo = saldo - valor;return saldo;

}public float credite(float valor, String data) { ... }public void emiteExtrato() { ... }

}

Atributos

Construtor(es)

MétodosInstância

public class ContaBancaria {

}

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Formato Simplificado de uma Declaração de Classe em Java

class <NomeDaClasse> {// declaração de atributos

<Tipo> <nomeDoAtributo-1>; ... ; <Tipo> <nomeDoAtributo-n>;

// método construtor

<NomeDaClasse>(<Tipo> <nomeDoParam-1>, ...) {<corpoDoMetodoConstrutor>}

// métodos de instância

<Tipo> <nomeDoMetodo-1>(<Tipo> <nomeDoParam-1>, ...) {<corpoDoMetodoDeInstancia-1>}

<Tipo> <nomeDoMetodo-2>(<Tipo> <nomeDoParam-1>, ...) {<corpoDoMetodoDeInstancia-2>}

}

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Criando Contas Bancáriasclass ContaBancaria

ContaBancaria(int)

ContaBancaria(int) Método construtor

numero

numero Atributo (variável de instância)

debite(float, String)

debite(float, String) Método (de instância)

Banco

new ContaBancaria(1);#1

new ContaBancaria(2);

#2

new ContaBancaria(33); #33

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Criando Contas Bancárias

�Três contas bancárias criadas dentro de um banco.

class Banco {public static void main(String[] args) {ContaBancaria conta1, conta2, conta3;conta1 = new ContaBancaria(1);conta2 = new ContaBancaria(2);conta3 = new ContaBancaria(33);

}...

}

Exercício: Encontrando Classes e Objetos

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Onde Estão as Classes, Objetos, Métodos e Atributos?

�De um sistema de �Gestão de pessoal?�Tributação?�Controle de tráfego aéreo?�Hospitalar?�Automação fabril?�etc

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Exercício

�Crie as classes ContaBancária e Banco, conforme o exemplo mostrado

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Conceitos Básicos do Modelo de Objetos (2/2)

�Herança�Polimorfismo

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Herança

�Permite definir uma nova classe como especialização de outra já existente

�Superclasse �classe básica pré-existente�generalização de um conceito

�Subclasse�especialização da superclasse�refinamento de um conceito

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

ContaBancária

debite()credite()

emiteExtrato()

saldotransações

numero

ContaEspecial

calculaJuros()

limiteHerda (é uma)

ContaCorrente

emiteTalonario()

talonario Herda (é uma)

ContaPoupança

debite()credite()

aniversarioMes()

corrMonetariajuros

Herda (é uma)

Herança entre Classes de uma Aplicação Bancária

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Classe e Objeto ContaCorrente

class ContaCorrente extends ContaBancaria {

int talonarios;

public void emiteTalonarios() {...}

}

ContaCorrente

debite()

credite() emiteExtrato()

saldotransações

numero

emiteTalonario()

talonario

new ContaCorrente(1)

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Classe ContaEspecial

class ContaEspecial extends ContaCorrente {

float limite;

float calculaJuros() {...}

}

ContaEspecial debite()

credite() emiteExtrato()

saldotransações

numero

calculaJuros()

limite

new ContaEspecial(1)

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Benefícos da Herança

�Fatoração e redução do tamanho do código

�Estruturação do código�Aumenta a reutilização de código�Redução do esforço de evolução da

aplicação�Melhoria geral da qualidade do código

Exercício: Classes e Relacionamentos de Herança

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Onde aplicar Herança às Classes?

�De um sistema de �Gestão de pessoal?�Tributação?�Controle de tráfego aéreo?�Hospitalar?�Automação fabril?�etc

Polimorfismo na Construção de Software: um Estudo de Caso usando Contas Bancárias

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

newnewnew

newnew

new new

new

Criação de Algumas Contas e Transações

Conta

Transacao

Crédito Débito

debitecredite

debite

creditedebite

[]

[]

[]

Exercício Simulado: Criação do Sistema de Controle Bancário

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Controle de Conta Bancária

�Definir classes �ContaBancária, Transação, TransaçãoDébito e

TransaçãoCredito

�Elaborar um esquema polimórfico de emissão de extrato bancário que utilize as classes acima

�Elaborar código que cria uma ContaBancária, realiza algumas transações de crédito e débito e emitir um extrato

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Transação: Projeto

�Estado formado pelo valor e data�Métodos:

�Construtor (valor e data)�Emite linha de extrato (abstrato)�Recupera valor da transação�Recupera data da transação�Indica qual a variação que a transação

realiza sobre o saldo da conta (abstrato)

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Transação:Implementação

�Valor da transação armazenado como inteiro (int)

�Data da transação armazenada como string (String)

�Emissão de linha de extrato efetuada através da saída padrão (System.out)

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Transação:Esqueleto de Código

abstract class Transacao {

int valor;

String data;

Transacao(int valor, String data) {..}

int getValor(){..}

String getData() {..}

abstract int getVariação();

abstract void emiteLinhaExtrato();

}

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

TransaçãoCrédito:Projeto e Implementação

�Herda de transação�Implementa métodos abstratos de

transação�Emite linha de extrato�Indica a variação POSITIVA que a

transação realiza sobre o saldo da conta

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

TransaçãoCrédito:Esqueleto de Código

class TransacaoCredito extends Transacao {

TransacaoCredito(int valor, String data) {..}

int getVariação() {..}

void emiteLinhaExtrato() {..}

}

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

TransaçãoDébito:Projeto e Implementação

�Herda de transação�Implementa métodos abstratos de

transação�Emite linha de extrato�Indica a variação NEGATIVA que a

transação realiza sobre o saldo da conta

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

TransaçãoDébito:Esqueleto de Código

class TransacaoDebito extends Transacao {

TransacaoDebito(int valor, String data) {..}

int getVariação() {..}

void emiteLinhaExtrato() {..}

}

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

ContaBancária: Projeto

�Estado formado pelo número da conta, saldo anterior e transações efetuadas

�Métodos:�Construtor (número da conta)�Recupera número da conta�Recupera saldo atual da conta�Lança débito (valor e data)�Lança crédito (valor e data)�Emite extrato

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

ContaBancária: Implementação

�O saldo inicial da conta é sempre 0�Saldo armazenado como inteiro (int),

representa o saldo antes de efetivar as transações (saldo anterior)

�Transações são armazenadas em um array de tamanho fixo

�Emissão de extrato efetuada através da saída padrão (System.out.println())

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

ContaBancária: Esqueleto de Código

class ContaBancaria {

int numero;

int saldoAnterior;

Transacao[] transacoes;

ContaBancaria(int numero) {..}

int getNumero(){..}

int getSaldoAtual() {..}

void debite(int valor, String data) {..}

void credite(int valor, String data) {..}

void emiteExtrato() {..}

}

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Criação de Contas e Transaçõesclass ContaBancaria {..public static void main(String[] args) {ContaBancaria conta =new ContaBancaria(...);

..conta.debite(20, “23/04/1999”);conta.credite(40, “26/04/1999”);..conta.emiteExtrato();..

}}

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Exercício Simulado:Usando o JBuilder

�Familiarizando-se com a interface�Criação de projetos e classes�Criação do HelloWorld

�Criação do Sistema de Controle de Conta Bancária definido anteriormente

Java Básico. Copyright © 1999 Jorge H. C. Fernandes (jorge@dimap.ufrn.br). Todos os Direitos Reservados.

Classes e Objetos do Modelo da Applicação ContaBancaria

Transacao

Crédito Debito

Conta

Débito Crédito Débito