Buscar

Relações entre Classes e Persistência_Cesar Augusto Tacla

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 37 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em 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 
 
 
Disciplina 
 
 
leciona 
Objetos de uma classe se associam a objetos de outra
Nome da 
associação
4
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?
Pessoa Carro
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.
8
Navegabilidade: unidirecional
 Professor 
 
 
Disciplina 
 
 
leciona 
Não 
navegável
navegável
5
9
Navegabilidade: bidirecional
navegável navegável
 Professor 
 
 
Disciplina 
 
 
leciona 
Direção 
de leitura
10
Navegabilidade: não especificada
 Professor 
 
 
Disciplina 
 
 
leciona 
Não
especificada
Não
especificada
6
11
Papéis
 
Empresa 
 
 
Pessoa 
 
 
Trabalha ou emprega ? 
Qual a interpretação desejada?
pessoa trabalha para Empresa 
ou
empresa trabalha (presta um 
serviço) para Pessoa;
Trabalha Emprega (contrata)
empresa emprega Pessoa ou
pessoa emprega (contrata) Empresa
12
Papéis
Empresa 
 
 
Pessoa 
 
 
empregador empregado 
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
Quem é o pai de Mário?
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?
16
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?
Apostila UML, pg. 63, n. 1
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
20
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
� Passageiros recebem milhas por vôo em função da sua duração
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 
 
 
Livro 
 
Empresta 0..4 0..1 
24
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 Fahrenheitmostrar valor convertido
valor Fahrenheit
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 DisciplinaLeciona 11
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
28
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 Pessoa
+emprega
0..*
+participa
0..*
32
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
+ehPreReqDe
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 associativa
Projeto
Pessoa
Participacao
- cargaHoraria: int
- dataEntrada: Date
- dataSaida: Date
+emprega
0..*
+participa
0..*
 
Equivale à...
Diagrama de classes na atividade de Análise
18
35
Classes Associativas (2)
class classe associativ a (proj )
Projeto PessoaParticipacao
- cargaHoraria: int
- dataEntrada: Date
- dataSaida: Date
1
possui
0..* 1
participa
0..*
Implementação >>>>
Diagrama de classes na atividade de Projeto
36
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. ... 
16.}
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
**
 
40
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 Ponto1 2
42
Agregação por associação
�Relação mais fraca que anterior
�Tempos de vida diferentes
22
43
Agregação: diferença
44
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 
semelhantes
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?
Apostila UML, pg. 64, n. 4
24
47
Agregação por composição
class agregação por composição
HistoricoPagsWeb URLVisitada
- URL: String0..*1
Implementação >>>
48
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
� Idêntica à implementação de associação
26
51
GENERALIZAÇÃO
� Classes 
compartilham 
atributos e 
comportamentos
� É um tipo de
� Herda atributos e 
métodos
Relação de 
generalização
52
GENERALIZAÇÃO
Sobreposição do método calcularIPVA
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
�Dica: respeitar o princípio da substituição
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.
56
Exemplo
Círculo e polígonos podem 
ser tratados como
FormaGeométrica
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
ObjetoVoador
Av ião Helicóptero Pássaro
Animal
30
59
Dependência
�Variável local
�Parâmetro de operação (método)
� Instanciação
�Atributos indicam associação
60
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.}
64
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)
68
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.
70
36
FORMAS E PERSISTÊNCIA
�Banco de dados: relacional ou objetos
�Arquivo: vários formatos (txt); 
�aqui nos interessa a forma serializable
que permitesalvar 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 
mesmo arquivo.
72
37
Exercício cliente email (cont.)
� Tarefa 2
�Implementar e testar o programa
�Persistir a agenda e as mensagens
73

Continue navegando