• Nenhum resultado encontrado

Relações entre Classes e Persistência

N/A
N/A
Protected

Academic year: 2021

Share "Relações entre Classes e Persistência"

Copied!
37
0
0

Texto

(1)

1

Relações entre Classes

e Persistência

Prof. Cesar Augusto Tacla

2

Diagrama de classes



Estrutura do sistema (classes)



Representação estática da colaboração

(relações)



Relações



associação (mais comum)



agregação (um tipo de associação),



generalização/especialização



dependência

(2)

3

Associação

Professor leciona Disciplina

Objetos de uma classe se associam a objetos de outra Nome da

associação

Multiplicidade das relações

Repr Significado

1

Exatamente uma

0.. *

*

Zero ou mais

1.. *

Uma ou mais

0..1

Zero ou uma

5..8

Faixa específica (5, 6, 7, or 8)

4..7,9 Combinação (4, 5, 6, 7, or 9)

(3)

5

Multiplicidade: exemplo

Professor Disciplina leciona 1..* 1 João José Maria Matemática Física quim História 6

Multiplicidade: exercício

João José Maria FIAT AXY8704 FUSCA BHY9910 CORCEL ATT1020

Qual a representação em UML para o caso seguinte?

(4)

7

Multiplicidade: exemplo

Qual a representação em UML para o caso seguinte?

Faça um exemplo com instâncias que ilustre a representação.

Uma pessoa participa de no máximo 3

projetos, mas pode ser que não participe

de nenhum.

Um projeto pode ter vários participantes

e somente começa a existir quando o

primeiro participante é designado.

Navegabilidade: unidirecional

Professor

leciona

Disciplina

Não navegável

(5)

9

Navegabilidade: bidirecional

navegável navegável

Professor

leciona

Disciplina

Direção de leitura

10

Navegabilidade: não especificada

Professor

leciona

Disciplina

Não especificada

Não especificada

(6)

11

Papéis

Empresa Trabalha ou emprega ? Pessoa

Qual a interpretação desejada?

pessoa trabalhapara Empresa ou

empresa trabalha(presta um serviço) para Pessoa;

Trabalha Emprega (contrata)

empresa empregaPessoa ou

pessoa emprega(contrata) Empresa

Papéis

Empresa empregador empregado Pessoa

Papel de

empresa Papel de

pessoa Uso de papéis pode suprimir ambigüidades

(7)

13

Associações reflexiva

Objetos de uma classe se relacionam com

objetos da mesma classe

14

Associação reflexiva: exemplo 1

Pessoas

Pessoa

0..*

filho

pai 0..1

Mário José Maria Carlos Filho(a) pai

Mário é pai de Maria

(8)

15

Associação reflexiva: exemplo 2

João Maria

José Mário

Gerente

subordinado João é gerente de Maria e José

Empregado

0..* gerente

subordinado

1

José é gerente de Mário

Quem é gerente de João?

Classes Associativas

Aluno -nome: String -matricula: int Disciplina -nome: String -código: String -cargaHoraria: int Inscrição -semestre: int -ano:int -nota:float 1..* 1..*

Quando uma relação associativa possui atributos próprios pode ser transformada em classe.

(9)

17

Classes associativas: características



Normalmente

em relações de

multiplicidade *:*



Não é nomeada

: somente a classe

associativa



Classes associativas podem estar

relacionadas

a outras classes.

18

Exercício 1

class Casa Casa Pessoa Casa Pessoa 0..* é propriedade 1 +propriedade 1..* +proprietário 0..* Em relação aos relacionamentos abaixo responda:

1. Qual a representação mais correta – a primeira ou a segunda relação? Por quê?

2. O que é preciso mudar na segunda relação para representar que uma casa possui diversos proprietários ao longo do tempo?

(10)

19

Exercício 2

Qual a diferença de interpretação entre as duas representações? Qual seria mais indicada para um tribunal regional eleitoral (identidade do eleitor não deve ser conhecida)? Apostila UML, pg. 63, n. 2 class eleições Pessoa Pessoa eleitor 0..* vota > candidatoPresidente 0..1 eleitor 0..* vota > candidatoPresidente 0..1

Exercício 4: classes associativas



Modele num diagrama de classes:



Uma companhia aérea oferece vôos



Número do vôo



Data e horário de partida



Duração



Passageiros tem programa de fidelidade



Número do cartão de fidelidade



Nome



Sobrenome

(11)

21

Solução exercício

Vôo -num: int -data: Date -duração: int Passageiro -nome: String -sobrenome: String -numCartao: int CréditoMilha quantidade: int 0..* 0..* 22

Levantamento das associações



Examinar



Regras do negócio,



Modelo do domínio



Requisitos funcionais



Casos de uso



Diagramas de interação

(12)

23

Levantamento de associações



Exemplo:



regras do negócio de uma biblioteca



“um aluno pode emprestar no máximo quatro

obras”

Aluno Empresta 0..4 Livro

0..1

Levantamento das associações

sd análise casos de uso

:meteorologista

:IUConv ersao :CtrlConv ersao :Historico :Conv ersaoCF

solicitar valor Celsius valor Celsius? c c converter valor c guardar conversao valor Fahrenheit mostrar valor convertido

(13)

25

Implementação de associações

unidirecional 1:1

class

Professor

{

private Disciplina disc = new Disciplina(“FP2”);

// disciplina pode ser instanciado em outro local

// outros atributos

// métodos

}

E se fosse bidirecional?

Professor 1 Leciona 1 Disciplina

26

Implementação bidirecional 1:1

1. class Professor{

2. private Disciplina disc;

3. public associar (Disciplina disc) { 4. this.disc = disc;

5. } 6. // métodos 7. }

8. class Disciplina{

9. private Professor prof;

10. public associar (Professor prof) { 11. this.prof = prof;

12. } 13. // métodos 14.}

(14)

27

Unidirecional 0..1 : 0..5

class Professor Professor Disciplina 0..1 leciona 0..5

Unidirecional 0..1 : 0..5

Implementação 1

1.class Professor {

2. private Disciplina[] disciplinas = {

3. new Disciplina(), 4. new Disciplina(), 5. new Disciplina(), 6. new Disciplina(), 7. New Disciplina(), 8. }; 9.} A instanciação pode ocorrer em outros pontos da classe class Professor Professor Disciplina 0..1 leciona 0..5

(15)

29

Unidirecional 0..1 : 0..5

Implementação 2

1.class Professor{

2. private Disciplina[] disciplinas; 3.

4. public void associar(Disciplina[] disc) {

5. 6. if (disc.length > 5) 7. return; 8. disciplinas = disc; 9. } 10.} class Professor Professor Disciplina 0..1 leciona 0..5 30

Multiplicidade 1:*

1.class Professor{

2. private Vector<Disciplina>disciplinas =

3. new Vector<Disciplina>(5, 3);

4. public void adicionarDisciplinas(Disciplina[] disc){

5. for (int i=0; i < disc.length; i++)

6. disciplinas.add(disc[i]); 7. ... 8. } 9.} class classes Professor Disciplina 1 * http://java.sun.com/docs/books/tutorial/java/generics/erasure.html

(16)

31

Bidirecional multiplicidade *:*

1.public class Projeto {

2. public Vector<Pessoa> emprega; 3. ...

4.}

5.public class Pessoa {

6. public Vector<Projeto> participa; 7. ...

8.}

class muitos para muitos

Projeto +emprega Pessoa

0..*

+participa 0..*

Associações reflexivas

class associação reflexiv a

Professor Disciplina 1 * +preRequisito 0..* +temPrerequisito 0..*

1.public class Disciplina {

2. public Vector<Disciplina> temComoPreReq; 3. public Vector<Disciplina> ehPreReqDe; 4. ...

5.}

+temComoPreReq

(17)

33

Exercício



Implementar as relações da transparência

anterior de acordo com a grade do curso

Disciplina FP2 APOO ED FÍSICA Tem pré-requisitos FP1 é pré-requisito de APOO ED Professor TACLA Solução JAssociaoReflexPrePosRequisitos 34

Classes Associativas

class classe associativ a

Proj eto Pessoa

Participacao - cargaHoraria: int - dataEntrada: Date - dataSaida: Date +emprega 0..* +participa 0..* Equivale à...

(18)

35

Classes Associativas (2)

class classe associativ a (proj)

Projeto Participacao Pessoa

- cargaHoraria: int - dataEntrada: Date - dataSaida: Date 1 possui 0..* 1 participa 0..* Implementação >>>>

Diagrama de classes na atividade de Projeto

Classes Associativas (3)

1.public class Projeto {

2.public Vector<Participacao> m_Participacao;

3. ...

4. }

5.public class Pessoa {

6. public Vector<Participacao> m_Participacao;

7. ...

8.}

9.public class Participacao {

10.private int cargaHoraria;

11.private Date dataEntrada;

12.private Date dataSaida;

13. public Projeto projeto;// se relação for bidirecional

14. Public Pessoa pessoa; // se relação for bidirecional

15. ...

(19)

37

AGREGAÇÃO



Composição/pertinência



associação



Parte



Todo



Propagação

class Classe Janela

Botão ComboBox ScrollBar

3 1 1 1 0..1 1 Exercício: desenhe uma instância possível da classe janela 38

Agregação: adornos

class Classe Time Jogador * * Qual a interpretação?

(20)

39

Tipos de agregação



Composição



Associação

class Classe Janela

Botão ComboBox ScrollBar 3 1 1 1 0..1 1 class Classe Time Jogador * *

Agregação por composição



Relação forte



Destruição do todo se propaga para as partes



Tempo de vida do todo = das partes

(21)

41

Exemplo: agregação por composição

class Linha {

public String id;

private

Ponto pt1 = new Ponto(10, 20);

private

Ponto pt2 = new Ponto(15, 30);

class Ponto {

}

}

Linha 1 2 Ponto 42

Agregação por associação



Relação mais fraca que anterior



Tempos de vida diferentes

(22)

43

Agregação: diferença

Levantamento de agregações



Decomposição



dividir classe complexa



Composição



Coleção de objetos reunidos



barra de rolagem + menu + text area = janela



Partes comuns



classes com subconjunto de atributos

(23)

45

Exercício 1

Qual a diferença de interpretação entre os relacionamentos livro-sobrecapa e livro-páginas?

Apostila UML, pg. 64, n. 4

46

Exercício 2

Todo aluno matriculado em trabalho de diplomação será orientado por um professor. Alguns professores orientam vários alunos e outros, nenhum.

Qual dos diagramas melhor representa esta relação?

(24)

47

Agregação por composição

class agregação por composição

HistoricoPagsWeb URLVisitada

- URL: String

0..* 1

Implementação >>>

Agregação por composição (2)

1.class URLVisitada {

2. private String url; 3.

4. URLVisitada (String url) { 5. this.url = url;

6. } 7.}

8.class Historico {

9. // cria três objetos da classe URLVisitada

10. private URLVisitada[] historico = { // ou coleção 11. new URLVisitada("http://www.uol.com.br"), 12. new URLVisitada("http://www.terra.com.br"), 13. new URLVisitada("http://www.lemonde.fr"), 14. }; 15.… 16.} Implementação >>>

(25)

49

Agregação por composição (3)

1.class Historico {

2. private class URLVisitada { 3. private String url; 4. private Date data; 5. private int freq;

6. URLVisitada (String umaURL) { 7. url = umaURL;

8. }

9. ... 10. }

11. private Vector<URLVisitada> historico =

12. new Vector<URLVisitada>(4, 2);

13. ... 14. 15.}

como private, a URLVisitada só pode ser instanciada dentro do escopo do todo

Classe aninhada

50

Agregação por associação

(26)

51

GENERALIZAÇÃO



Classes

compartilham

atributos e

comportamentos



É um tipo de



Herda atributos e

métodos

Relação de generalização

GENERALIZAÇÃO

(27)

53

Taxonomia: hierarquia de classes

Atributos e operações comuns

Atributos e operações específicas

54

Qualidade de uma hierarquia



Estável

: critérios de classificação não

mudam ao longo do tempo.



Extensível

: é fácil incluir novas classes

derivadas na hierarquia

(28)

55

Princípio da substituição

Qualquer instância de uma classe derivada

pode ser tratada como se fosse uma instância

de uma classe base

sem alterar a semântica

de um programa escrito para a classe base.

Exemplo

Círculo e polígonos podem ser tratados como

(29)

57

Exemplo: taxonomia mal feita

Livro

LivroEmprestado LivroDisponível

Não construir hierarquias em função de estados das classes

58

Herança múltipla

Obj etoVoador

Av ião Helicóptero Pássaro

(30)

59

Dependência



Variável local



Parâmetro de operação (método)



Instanciação



Atributos indicam associação

Dependência: exemplos

class Dependência ClasseA + operacao(ClasseC) : void ClasseB ClasseC ClasseD «local» «parameter» «instantiate»

(31)

61

Exercício



Desenhe o diagrama de classes para as

relações das classes marcadas em

vermelho

public class Aluno { public Curso curso; public int CEP;

public void setCEP(Endereco end) {

CEP = end.CEP; }

public int calcularIdade() { // retorna idade em meses

Date d = getCurrentDate(); ... } } 62

Exercício (solução)

Aluno Date Endereço Curso 1 matriculado <<parâmetro>> <<local>>

Multiplicidade no lado aluno não foi colocada pois não temos informação – indefinida

(32)

-63

Realização

«entity» Historico + adicionar(ConversaoCF) : void - writeObject() : void «interface» Serializable «instantiate» 1 «entity» Historico + adicionar(ConversaoCF) : void - writeObject() : void «interface» Serializable «instantiate» 1

1.public interface Serializable {

2. ...

3.}

4.public class Histórico implements Serializable {

5. ...

6.}

Exercício (enunciado)

Programa cliente para envio de emails O programa deve permitir ao usuário:

1. enviar emails a um ou mais destinatários selecionados de uma agenda composta por contatos no formato (nome, endereço email). A agenda pode ser definida no próprio código, mas deve ser mostrada para que o usuário possa selecionar os destinatários.

2. consultar todos os emails enviados a um determinado destinatário. Ao clicar em uma entrada da agenda, o programa deve mostrar todos os emails enviados ao destinatário selecionado sem ter que percorrer toda a lista de emails enviados. Detalhes

Um email é composto pelos três campos a seguir: remetente, destinatários, assunto e corpo.

(33)

65

Exercício (cont.)



Para enviar emails



Utilizar a API JavaMail (há várias implementações desta API)



Uma delas (e suas diferentes versões) são encontradas em

http://java.sun.com/products/javamail/downloads/index.html

Baixar o .zip Extrair o mail.jar

Colocar na pasta de projeto No NetBeans, importar biblioteca



alternativa ao JavaMail

http://commons.apache.org/email/

JAVARepositorio\JMailClient: solução que envia email. Tem um frame , mas ainda não funciona.

66

Exercício (tarefas)



Tarefa 1



No enunciado dado, marque todos os substantivos

candidatos a classes (entregar o texto marcado)



Refletir sobre quais classes são necessárias e

como elas conversam para que o programa realize

sua função.



Construir um diagrama de classes em um editor

qualquer de UML. Não esquecer dos

relacionamentos, multiplicidade e nome nas

associações

(34)

67

Exercício (instruções)



Instruções gerais:



Pode ser feito em <x>



Valor <v>



Data de entrega/apresentação: <dd/mm>



Apresentar



Enunciado com os substantivos candidatos a classes

marcados (impresso)



diagrama de classes preliminar (impresso)



diagrama de classes final (impresso)



código fonte e funcionamento (em sala)

Exercício (exemplo de envio)

Agenda

João jl@uol.com.br Maria ma@utfpr.edu.br José jjj@bol.com.br

Destinatários:

Assunto: nonono nono nono on João e José,

Favor comparecer com urgência na sala B109. []s

Tereza

Ao enviar email, o usuário seleciona os destinatários da agenda De:

(35)

69

Exercício (exemplo de consulta)

Agenda

João jl@uol.com.br Maria ma@utfpr.edu.br José jjj@bol.com.br

Emails enviados ao João

Destinatários data assunto

João, José 14/4/2007 nono non onon ono João, Maria 14/4/2007 bla blalba

Supor que o João foi selecionado na agenda. O programa mostra todos os emails que lhe foram enviados (pode haver outros destinatários).

PERSISTÊNCIA



Consiste em salvar os objetos de uma

sessão para tê-los disponíveis nas

sessões seguintes de uso do programa.

(36)

FORMAS E PERSISTÊNCIA



Banco de dados: relacional ou objetos



Arquivo: vários formatos (txt);



aqui nos interessa a forma

serializable

que permite salvar um objeto tal qual ele

está na memória.

71

SERIALIZABLE



Exemplo em



JAVARepositorio\SerializableExemplo



Observar



Que os métodos writeObject e readObject são

opcionais. É interessante utilizá-los quando

quer-se modificar algo no objeto no momento

da escrita ou da leitura (fugir dos defaults)



Que é possível salvar mais de um objeto no

(37)

Exercício cliente email (cont.)



Tarefa 2



Implementar e testar o programa



Persistir a agenda e as mensagens

Referências

Documentos relacionados

1 (II) JOSÉ GARCIA LEAL (Filho), nascido por volta de 1790 e falecido em São João da Boa Vista, em 5 de setembro de 1850, casado com MARIA INÁCIA DE ABREU LIMA (ou Pires

Nos termos previstos no Decreto-Lei n.º 182/95, de 27 de Julho, os princípios do Sistema Eléctrico Nacional foram desenvolvidos através de regulamentos emitidos pela ERSE e pela

[r]

Neste trabalho, através de um estudo de caso - um projeto de expansão de uma indústria metalúrgica -, focalizaremos a análise económico-financeira como um

Aquela frase de Voltaire, tão citada: “Não creio numa só palavra do que dizes, mas defenderei até à morte o teu direito de dizer”, é uma das coisas mais demagógicas que

Jesus dirige-se para Jerusalém CAPÍTULO VII Última semana de Ministério e

Usar repelente nas áreas expostas do corpo. A quimioprofilaxia pode ser uma medida adicional de prevenção de malária e não deve ser usada como medida isolada. Deve ser indicada

Prof.ª Doutora Maria José Vaz Pinto Universidade Nova de Lisboa Dr.ª Maria João Couto Universidade do Porto. Prof.ª Doutora Maria José Cantista Universidade