• Nenhum resultado encontrado

Aula Relacao Objetos

N/A
N/A
Protected

Academic year: 2021

Share "Aula Relacao Objetos"

Copied!
27
0
0

Texto

(1)

Relações entre

objetos

Agregação, Composição e 

Associação

(2)

Relações

Objetos não existem isolados

São

formados

por outros objetos

Objetos

usam

outros objetos

Um programa OO possui vários

objetos que

interagem

entre si

Modelagem define quais objetos

(3)

3

Relações entre objetos

Objetos possuem relacionamentos

Composição

Um objeto pode

ser formado

por outros

objetos

Casa, livro, jardim, agenda de contatos, etc

Agregação

Um objeto pode

conter

outros objetos

Carro (motor, pneu, porta)

Associação

Objetos podem

usar

outros objetos

(4)

Composição

Um livro é composto de capítulos

Capítulo é parte essencial de livro

Se não existir capítulo, não existe livro

Capítulo não existe fora de livro

Linha com losângulo preenchido na classe

“dominante”

Livro é composto de 1 ou mais capítulos

Losângulo pode 

ser suprimido

(5)

5

Composição

public

class

Livro {

private

Capitulo[]

capitulos

;

public

Livro(

int

qtdCapitulo){

capitulos

=

new

Capitulo[qtdCapitulo];

}

}

public

class

Capitulo {

private

Livro

livro

;

/* Definição da classe Capítulo */

}

Referência pode ou não

ser bidirecional.  Capitulo 

não precisa ter o atributo

livro

Os atributos são derivados dos

relacionamentos. Não existem

no diagrama

(6)

Agregação

Carro possui Pneu, Motor e Porta

Não são partes essenciais do carro

Retirando as portas um carro continua sendo um

carro

Pneus/portas existem como objetos independentes

Linha com losângulo vazio na classe

“dominante”

Losângulo também 

pode ser suprimido

(7)

7

Agregação

public

class

Carro {

private

Motor

motor

;

private

Porta

portas

[];

private

Pneu

pneus

[];

/* ... */

}

public

class

Motor {

/* ... */

}

public

class

Porta {

/* ... */

}

public

class

Pneu {

/* ... */

}

public

class

Carro {

private

Motor

motor

;

private

Porta

portas

[];

private

Pneu

p1, p2, p3, p4

;

/* ... */

}

Pode ser implementado

de mais de uma forma

(8)

Associação

Objetos que usam outros objetos

Podem ser implementados como

aributos

public

class

Trem {

private

EstradaDeFerro

estradaDeFerro

;

/* ... */

public

void

definirEstrada(EstradaDeFerro estradaDeFerro){

this

.

estradaDeFerro

= estradaDeFerro;

}

(9)

9

Observações

Composição, Agregação e Associação

Mesma forma de implementar

Muda apenas o

conceito

Comportamento diferente

Muito comum usar apenas notação da

associação

Sem o losângulo

Composições e Agregações são “tipos” de

associações

Representam relacionamento

“tem um”

Carro “tem uma” roda

Livro “tem um” capitulo

(10)

Multiplicidade

Indica quantidade de objetos

referenciados

Principais:

A

possui

exatamente

1

B

A

possui

vários

B

A

possui

1 ou mais

B

A

possui

0 ou 1

B

(11)

11

Nomes

Pode-se especificar o nome do

atributo

Obrigar existência do atributo

Carro tem um atributo privado

motor

do tipo

Motor

public

class

Carro {

private

Motor

motor

;

/* ... */

}

(12)

Nomes

Coleções

Atributos com multiplicidade

*

podem ser

implementados de mais de uma forma

Array é uma delas

public

class

Livro {

private

Capitulo

cap

[];

}

Livros tem vários capítulos.

(13)

13

Exemplo

Modelo de objetos de uma agenda

(14)

Observações

Responsabilidades

Classes de domínio

não

devem

interagir com o usuário

System.out.println

,

Scanner

, etc

Elas podem ser usadas em várias

interfaces com usuário diferentes

Texto, WEB, GUI, Hand-held, Celurares, etc

Defina uma classe que represente a

interface com usuário (UI – User

(15)

15

Contato

package

br.cefetrn.tads.poo;

public

class

Contato {

private

String

nome

;

private

String

telefone

;

public

String getNome() {

return

nome

;

}

public

void

setNome(String nome) {

this

.

nome

= nome;

}

public

String getTelefone() {

return

telefone

;

}

public

void

setTelefone(String telefone) {

this

.

telefone

= telefone;

}

}

Pacote

Atributos

(16)

Agenda (1)

package

br.cefetrn.tads.poo;

public

class

Agenda {

// Array para armazenar os contatos

private

Contato

contatos

[];

// Atributo usado para armazenar a

// quantidade de contatos na agenda

private

int

quantidade

;

public

Agenda(){

// Agenda tem capacidade para 10 contatos

contatos

=

new

Contato[10];

//Criada sem contato algum

quantidade

= 0;

}

public

void

inserir(Contato contato){

contatos

[

quantidade

++] = contato;

}

(17)

17

Agenda (2)

public

Contato buscar(String nome){

for

(

int

i = 0 ; i <

quantidade

; i++)

if

(

contatos

[i].getNome().equals(nome))

return

contatos

[i];

// Se sair do laço é porque não encontrou

// nenhum contato com o nome passado

return

null

;

}

public

void

remover(String nome){

//Exercício

}

public

int

quantidade(){

return

quantidade

;

}

(18)

UI (1)

package br.cefetrn.tads.poo;

import java.util.Scanner;

public class AgendaUI {

private Agenda agenda;

private Scanner sc;

public UI() {

agenda = new Agenda(); }

public void run() {

sc = new Scanner(System.in);

int opcao = 0;

do {

printMenu();

opcao = Integer.parseInt(sc.nextLine());

switch (opcao) { case 1: inserirContato(); break; case 2: buscarContato(); break; case 3: removerContato(); break; } } while (opcao != 0); }

(19)

19

UI (2)

private void inserirContato() {

System.out.print("Digite o nome: "); String nome = sc.nextLine();

System.out.println("Digite o telefone"); String telefone = sc.nextLine();

Contato novo = new Contato(); novo.setNome(nome);

novo.setTelefone(telefone);

agenda.inserir(novo); }

private void buscarContato() {

System.out.print("Digite o nome: "); String nome = sc.nextLine();

Contato contato = agenda.buscar(nome);

if (contato != null)

System.out.println(contato);

else

System.out.println("Contato não encontrado!!!!"); }

private void removerContato() {

System.out.println("A ser implementado"); }

(20)

UI (3)

private void printMenu() {

System.out.println("\n\n ---- Menu Agenda de contatos V 1.0 ----");

System.out.println("\n Memória: " + agenda.quantidade() + " contatos"); System.out.println(" 0 - Sair");

System.out.println(" 1 - Inserir Contato"); System.out.println(" 2 - Buscar Contato"); System.out.println(" 3 - Remover Contato"); System.out.print("\n Digite uma opçãoo: "); }

}

package

br.cefetrn.tads.poo;

public

class

Main {

public

static

void

main(String[] args) {

AgendaUI tela =

new

AgendaUI();

tela.run();

}

}

(21)

21

Como fazer(1)

Crie uma pasta para seu projeto

Por exemplo:

c:\programas\agenda\

(Windows)

/home/aluno/programas/agenda/

(unix)

OBS: Usaremos <Agenda> para indicar

este diretório

Crie dois diretorios: um para os fontes (.java)

e outros para os executaveis(.class)

<Agenda>bin para os executaveis

<Agenda>src para os fontes

Em

src

crie diretórios correspondentes aos

pacotes (organização)

Se a classe está no pacote br.cefetrn.tads.poo:

Coloque o fonte em: <Agenda>/src/br/cefetrn/tads/poo/

Coloque o

bin

no CLASSPATH (opicional)

set CLASSPATH=%CLASSPATH%;c:\programas\agenda\bin (Win)

export CLASSPATH=$CLASSPATH:/home/aluno/agenda/bin (unix)

Para compilar uma classe:

Mude para o diretorio onde está a classe

Compile informa onde o .class deverá ser colocado

javac -d c:<Agenda>\bin Arquivo.java

(22)

??

?

?

??

?

?

? ?

?

? ?

?

?

?

?

? ?

?

?

?

?

?

?

?

? ?

?

?

?

?

?

?

? ?

?

?

?

?

?

?

? ?

?

? ?

?

?

?

?

? ?

?

? ?

?

?

?

?

? ?

?

? ?

?

?

?

?

? ?

?

? ?

?

?

?

?

?

?

? ??

?

?

? ??

Dúvidas

?

?

?

?

?

?

?

?

(23)

23

Exercícios

1

Implemente e execute a Agenda de contatos e teste

2

Implemente o método remover

Basta fazer referência a nulo e decrementar quantidade

Cuidado para não deixar espaços em branco, pois

afeta o funcionamento do inserir

3

Reimplemente o método inserir para permitir que o a agenda

tenha tamanho “infinito”

Crie um novo array maior e copie as referências para o

novo array, fazendo o novo array o array da agenda

4

Implemente o método toString na Agenda

Retorna uma String contendo todos os contatos, um em

cada linha, com nome e telefone

(24)

Exercicio

Fazer um programa para controlar 

as contas corrente em um banco

(25)

25

Controle Bancário

O que o programa deve fazer

Cadastrar Agência

Cadastrar Cliente

Criar Conta

Realizar Deposito

Realizar Saque

Não realiza se não

houver saldo

valor de saque

deve ser menor

que saldo + limite

Ver Saldo

Deve mostrar os dados

da conta

Mudar limite de Conta

Cancelar Conta

Diagrama no proximo slide

Escreva uma classe que sirva

de Interface com Usuario

Classe BancoUI

Implemente como public

apenas os métodos definidos

no diagrama

Métodos privados podem ser

definidos para auxiliar o

funcionamento correto da

classe

(26)
(27)

27

Orientações

Organize seu projeto

Crie um diretório para o projeto

Dentro desse diretorio crie dois diretórios

src

– Para colocar os fontes

bin

– Para colocar as classe geradas

Em

src

crie diretórios correspondentes aos

pacotes

Adicione o bin no CLASSPATH

set CLASSPATH=%CLASSPATH%;<bin>

export CLASSPATH=$CLASSPATH:<bin>

sempre que compilar coloque a opção

-d

javac -d <bin> arq.java

Exemplo:

Criando o projeto em

/home/jorgiano/banco os

diretorios serão:

cd /home/jorgiano/banco/src/poo/banco

export CLASSPATH=$CLASSPATH:/home/jorgiano/banco/bin

javac-d /home/jorgiano/banco/bin Banco.java

cd c:\home\jorgiano\banco\src\poo\banco

set CLASSPATH=%CLASSPATH%;c:\home\jorgiano\banco\bin

javac-d c:\home\jorgiano\banco\bin Banco.java

Unix

Referências

Documentos relacionados

Pelos resultados do teste de Tukey (P&lt;0,05), apresentados na Tabela 1, observa-se que a testemunha e as linhagens SV07-060 e SV07-032 apresentaram os maiores

Os estudos iniciais em escala de bancada foram realizados com um minério de ferro de baixo teor e mostraram que é possível obter um concentrado com 66% Fe e uma

A Comissão Interamericana de Direitos Humanos (CIDH) apresentou à Corte Interamericana de Direitos Humanos (Corte IDH) o caso 12.728, Povo Indígena Xucuru e seus membros

A gramínea Brachiaria decumbens Stapf tem sido largamente plantada no território nacional por causa da sua excelente adaptação aos solos de baixa fertilidade, sendo,

Examinamos as demonstrações financeiras individuais da Klabin S/A (“Companhia”), que compreendem o balanço patrimonial em 31 de dezembro de 2016 e as respectivas demonstrações

A apixaba- na reduziu o risco de AVE e embolismo sistêmico em mais de 50%: houve 51 eventos entre os pacientes do grupo apixabana versus 113 no grupo do AAS

Nosso estudo visa à descrição de uma série de 194 pacientes com fraturas faciais, avaliando a epidemiologia dos pacientes acometidos por essas fraturas, as

Tendo em vista todo contexto positivo que as aulas práticas laboratoriais causam no processo de aprendizagem e das muitas dificuldades encontradas para suas