• Nenhum resultado encontrado

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

N/A
N/A
Protected

Academic year: 2021

Share "Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição"

Copied!
9
0
0

Texto

(1)

Lista de Contas

null

Lista de Contas: Assinatura

 Quais são os métodos necessários? class ListaDeContas {

void inserir (Conta c) {}

void retirar (Conta c) {}

Conta procurar (String num) {} }

Listas de Contas: Descrição

class ListaDeContas {

private Conta conta;

private ListaDeContas prox;

void inserir (Conta c) {

if (this.conta == null) {

this.conta = c;

prox = new ListaDeContas();

} else prox.inserir(c);

}

Listas de Contas: Descrição

void retirar (Conta c) {

if (conta != null) {

if (conta == c) {

this.conta = prox.conta;

this.prox = prox.prox;

} else prox.retirar(c);

} }

Listas de Contas: Descrição

Conta procurar (String num) {

if (conta == null) return null;

else {

if (conta.numero() == num)

return conta;

elsereturn prox.procurar(num)

} }

Banco: Descrição Modular

class BancoModular {

private ListaDeContas;

void cadastro(Conta c) {contas.inserir(c);}

void debito(String num, double val) {

Conta c; c = contas.procurar(num); if (c != null) c.debito(val); else System.out.println("Conta inexistente!"); }

(2)

Exercício em Sala

 Completar a implementação da classe

BancoModular com os métodos transfere e saldo.

 Compare as duas implementações de

bancos: Banco e BancoModular. Quais

as vantagens e desvantagens de cada abordagem?

Dever de Casa

Dever de Casa

1

 Desenvolva um sistema simples para

controle de estoque, contendo pelo

menos as classes Produto e Estoque, e

as seguintes operações: alterar as propriedades dos produtos (nome, preço, quantidade em estoque), retirar um produto do estoque, e verificar que produtos precisam ser repostos.

Dever de Casa

2

 Defina em Java uma classe Pilha, de

pilhas de inteiros, tendo métodos para realizar as seguintes operações:

» push, insere um dado elemento no topo da pilha;

» top, dá como resultado o elemento que está no topo da pilha;

» pop, retira o elemento que está no topo da pilha..

Tipos de Módulos em Java

 Classes

» agrupam definições de métodos, atributos, inicializadores, etc.

» definem tipos

 Pacotes

» agrupam definições de classes

relacionadas

» estruturam sistemas de grande porte, facilitando a localização das classes » oferece um maior nível de abstração: há

mais classes do que pacotes

Pacotes e Diretórios

 Cada pacote é associado a um diretório do

sistema operacional

 Os arquivos neste diretório têm o mesmo

cabeçalho:

package nome_do_pacote;

 Cada arquivo define uma ou mais classes

que fazem parte do pacote

 Subdiretórios não correspondem a

(3)

Nomeando Pacotes

 O nome de um pacote deve ser parte

do nome do seu diretório associado:

»  o pacote exemplos.banco, deve estar no diretório /home/pasn/java/exemplos/banco, assumindo que o compilador Java foi informado para procurar pacotes em / home/pasn/java

Modificadores de Acesso

 public

» atributos, métodos, inicializadores e classes

» declaração pode ser utilizada (é visível) em qualquer lugar

 private

» atributos, métodos e inicializadores » declaração só pode ser utilizada na classe

onde ela é introduzida

Modificadores de Acesso

 Protected

» atributos, métodos e inicializadores » declaração só pode ser utilizada no pacote

onde ela é introduzida, ou nas subclasses da classe onde ela é introduzida

 default

» atributos, métodos, inicializadores e classes

» declaração só pode ser utilizada no pacote onde ela é introduzida

Importação de Pacotes

 Importando definição de tipo específica:

» package segundo.pacote;

» import primeiro.pacote.NomeDoTipo;

 Importando todas definições públicas:

» package segundo.pacote;

» import primeiro.pacote.*;

Importação de Pacotes: Detalhes

 Tanto “NomeDoTipo” quanto

“primeiro.pacote.NomeDoTipo” podem

ser usados no corpo de “segundo.pacote”

 “segundo.pacote” não pode definir um

tipo com nome “NomeDoTipo”

 Importação de pacotes não é transitiva

nem distribui sobre os arquivos de um pacote

Pacotes da Biblioteca Java

 Acesso a Internet e WWW (java.net)

 Applets (java.applet)

 Definição de interfaces gráficas

(java.awt)

 Suporte a objetos distribuídos (java.rmi)

 Interface com Banco de Dados

(java.sql)

 Básicos: threads e manipulação de

strings (java.lang), arquivos (java.io),

(4)

Outros Modificadores de Acesso

 Final

» Classes, Métodos e Variáveis » Construções Finais não podem ser

mudadas

• Variáveis: Constantes

• Classes: Não podem ser estendidas • Métodos: Não podem ser redefinidos

Outros Modificadores de Acesso

 Static

» Métodos e Variáveis

» Construções Estáticas são associadas a uma classe e não a instâncias da classe

class Estatica } static int x=0;

Estatica() { x++;} }

Outros Modificadores de Acesso

 Static

» Variáveis estáticas podem ser referenciadas através de qualquer instância da classe ou através do nome da classe. Ex:

1. Estatica e1 = new Estatica(); 2. Estatica e2 = new Estatica(); 3. e1.x = 100;

4. e2.x = 200;

5. Int OutroX = Estatica.x;

Outros Modificadores de Acesso

 Static

» Toda aplicação deve conter um método estático.

• Métodos estáticos só podem acessar variáveis estáticas e outros métodos estáticos.

• Para acessar variáveis não estáticas ou métodos não estáticos deve-se instanciar uma classe.

Exercício em Sala

 Estruture o exemplo de contas e

bancos utilizando pacotes

(5)

Dever de Casa

3

 Estruture o sistema de controle de

estoque usando pacotes

 Implemente a classe Banco usando a

classe Vector ou a classe Hashtable

(ambas do pacote “java.util”).

» OBS: Verifique no help quais são os construtores da classe e os métodos a serem utilizados !

Objeto Poupança

Número Saldo 21.342-7 875,32 Crédito Débito Número Saldo 21.342-7 875,32 Crédito Débito R. Juros

Estados do Objeto Poupança

Número Saldo 21.342-7 875,32 Crédito Débito Número Saldo 21.342-7 875,32 Crédito Débito

R. Juros Saldo Número 21.342-7 875,32 Crédito Débito Número Saldo 21.342-7 895,32 Crédito Débito R. Juros Crédito(20)

Estados do Objeto Poupança

Número Saldo 21.342-7 875,32 Crédito Débito Número Saldo 21.342-7 875,32 Crédito Débito

R. Juros Saldo Número 21.342-7 875,32 Crédito Débito Número Saldo 21.342-7 884,07 Crédito Débito R. Juros R.Juros(0.01)

Classe de Poupanças: Descrição

class PoupancaD {

private String numero;

private double saldo;

void credito (double valor) {saldo = saldo + valor;}

String numero() {return numero;} ...

void rende_juros (double t)

{this.credito(saldo * t);} }

Classe de Bancos: Assinatura

class BancoD {

void cadastro_conta(Conta c) {}

void cadastro_poupanca(PoupancaD p) {} void credito_conta(String num, double val) {} void credito_poupanca(String num, double

val) {} ...

BancoD () {} }

(6)

Classe de Bancos: Descrição

class BancoD {

private Conta[] contas;

private PoupancaD[] poupancas; private int indicep, indicec = 0;

Classe de Bancos: Descrição

void cadastro_conta(Conta c) { contas[indicec] = c; indicec = indicec + 1; } void cadastro_poupanca(PoupancaD p) { poupancas[indicep] = p; indicep = indicep + 1; }

Classe de Bancos: Descrição

privateConta procura_conta(String n) {

int i = 0;

boolean achou = false;

while ((! achou) && (i < indicec)) {

if (contas[i].numero() == n) achou = true; else i = i + 1;

}

if (achou == true) returncontas[i]; else return null;

} ...

Problemas

 Duplicação desnecessária de código:

» A definição de PoupançaD é uma simples extensão da definição de Conta

» Clientes de Conta que precisam trabalhar também com PoupançaD terão que ter código especial para manipular poupanças

 Falta refletir relação entre tipos do

“mundo real”

Subtipos e Subclasses

Conta Poupança

Subclasses

 Comportamento

» Objetos da subclasse comportam-se como os objetos da superclasse

 Substituição

» objetos da subclasse podem ser usados no lugar de objetos da superclasse

(7)

Herança

 Reuso de Código

» A descrição da superclasse pode ser usada para definir a subclasse

 Extensibilidade

» algumas operações da superclasse podem ser redefinidas na subclasse

Classe de Poupanças: Assinatura

class Poupanca

extends Conta {

void rende_juros(double t) {}

Poupanca (String num) {} }

Classe de Poupanças: Descrição

class Poupanca

extends Conta {

void rende_juros(double t) {

this.credito(this.saldo() * t);

}

Poupanca (String num) { super (num);}

}

Extends

 subclasse extends superclasse

 Mecanismo para definição de herança e

subtipos

 Herança simples: só pode-se herdar

uma classe por vez

Extends: Restrições

 Atributos e métodos privados são

herdados, mas não podem ser acessados diretamente

 Qualificador protected: visibilidade

restrita a classe e subclasses

 Construtores não são herdados

 Construtor default só é disponível se

também for disponível na superclasse

Usando Poupanças

...

Poupanca poup;

poup = new Poupanca(¨21.342-7¨);

poup.credito(500.87); poup.debito(45.00);

System.out.println(poup.saldo()); ...

(8)

Subtipos: Substituição

...

Conta conta;

conta = new Poupanca(¨21.342-7¨);

conta.credito(500.87); conta.debito(45.00);

System.out.println(conta.saldo()); ...

Subtipos: Verificação Dinâmica

com Casts

...

Conta conta;

conta = new Poupanca(¨21.342-7¨);

...

((Poupanca) conta).rende_juros(0.01);

conta.imprime_saldo(); ...

Substituição e Casts

 Nos contextos onde contas são usadas

pode-se usar poupanças

 Nos contextos onde poupanças são

usadas pode-se usar contas com o uso

explícito de casts

 Casts correspondem a verificação

dinâmica de tipos e podem gerar

exceções (Cuidado!)

 Casts não fazem conversão de tipos

Classe de Bancos: Assinatura

class Banco {

void cadastro(Conta c) {}

void credito(String num, double val) {}

void debito(String num, double val) {}

double saldo(String num) {}

void transfere(String d, String p, double

v) {} Banco () {} }

Subtipos: Substituição

...

Banco banco = new Banco(); banco.cadastro(new Conta(¨21.345-7¨)); banco.cadastro(new Poupanca (¨1.21.345-9¨)); banco.credito(¨21.345-7¨,129.34); banco.transfere(¨21.345-7¨,¨1.21.345-9¨, 9.34); System.out.print(banco.saldo(¨1.21.345-9¨)); ...

Exercício em Sala

 Modifique a classe Banco para que seja

possível render juros de uma poupança. Isto é, adicione um novo método que rende os juros da poupança cujo número é parâmetro deste método; a taxa de juros corrente deve ser um atributo de Banco.

(9)

Subtipos: Verificação Dinâmica

com instanceof

...

Conta c = this.procura(¨123.45-8¨);

if (c instanceof Poupanca)

((Poupanca) c).rende_juros(0.01);

else System.out.print(¨Poupança

inexistente!¨) ...

Verificação Dinâmica de Tipos

 Casts e instanceof:

» ((Tipo) variável) » variável instanceof Tipo

» O tipo de variável deve ser supertipo de

Tipo

» Casts geram exceções, instanceof retorna

false

» Casts são essenciais para verificação

Referências

Documentos relacionados

Conforme Farias e Weschsler (2014) “Percebe-se, assim, que a diversidade de termos, associada a uma falta de consenso sobre o fenômeno da dotação e do talento,

Para avaliar a alteração na tecnologia de tratamento da estação, que trata água armazenada em açudes com tendência a sofrer processos de eutrofização, foi realizado o

O EBITDA Ajustado não é uma medida de desempenho financeiro segundo as Práticas Contábeis Adotadas no Brasil, tampouco deve ser considerado isoladamente, ou como

O processo eleitoral será organizado por uma Comissão Eleitoral, composta por três membros, sendo dois deles indicados pelo SINTRAM e um indicado pelo DIVIPREV a convite do

Os ´ unicos equipamentos dispon´ıveis s˜ ao um modulador em anel (com uma ponte de diodos), um filtro para faixa centrado na frequˆencia 400 kHz e um gerador de ondas senoidal

2.12.5 A oferta Whatsapp poderá ser encerrada caso seja encerrado o acordo comercial com os detentores dos serviços previstos no presente Regulamento, sem que isso

Por este motivo é importante que uma fábrica produtora de rações possua um controle de qualidade eficiente, onde se possa garantir a qualidade das matérias primas utilizadas nas

Caso algum motociclista que não faça parte do comboio tente forçar sua entrada no grupo, todo o comboio deverá diminuir a velocidade para que todos possam diminuir a distância