e Persistência
Prof. Cesar Augusto Tacla
Diagrama de classes
Relações
associação (mais comum)
agregação (um tipo de associação),
generalização/especialização
dependência
1
Associação
Nome da
associação
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)
2
Multiplicidade: exemplo
Professor Disciplina
1 leciona 1..*
Matemática
João
Física
José
quim
Maria História
Multiplicidade: exercício
Pessoa Carro
3
Multiplicidade: exemplo
Navegabilidade: unidirecional
Não navegável
navegável
4
Navegabilidade: bidirecional
navegável navegável
Direção
de leitura
10
5
Papéis
Empresa Pessoa
Trabalha ou emprega ?
11
Papéis
Papel de
empresa Papel de
pessoa
12
6
Associações reflexiva
13
0..*
pai 0..1
Pessoas
Mário
Mário é pai de Maria
Filho(a) José pai
Quem é o pai de Mário?
Maria
Carlos
14
7
Associação reflexiva: exemplo 2
Empregado
subordinado
0..*
gerente 1
Gerente
João
subordinado João é gerente de Maria e José
Maria
José é gerente de Mário
José
15
Classes Associativas
Aluno Disciplina
1..* 1..*
-nome: String -nome: String
-matricula: int -código: String
-cargaHoraria: int
Inscrição
-semestre: int
-ano:int
-nota:float
8
Classes associativas: características
Normalmente em relações de
multiplicidade *:*
17
Exercício 1
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?
class Casa
Casa
é propriedade Pessoa
0..* 1
Casa Pessoa
+propriedade +proprietário
1..* 0..*
9
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)?
class eleições
eleitor
0..* eleitor 0..*
Pessoa
Pessoa
vota > vota >
candidatoPresidente candidatoPresidente
0..1 0..1
20
10
Solução exercício
Vôo Passageiro
0..* 0..*
-num: int -nome: String
-data: Date -sobrenome: String
-duração: int -numCartao: int
CréditoMilha
quantidade: int
21
Examinar
Regras do negócio,
Modelo do domínio
Requisitos funcionais
Casos de uso
Diagramas de interação
22
11
Levantamento de associações
Exemplo:
regras do negócio de uma biblioteca
“um aluno pode emprestar no máximo quatro
obras”
23
:meteorologista
:IUConv ersao :CtrlConv ersao :Historico :Conv ersaoCF
valor Celsius?
converter valor c
guardar conversao
valor Fahrenheit
mostrar valor convertido
valor Fahrenheit
24
12
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?
25
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. }
26
13
Unidirecional 0..1 : 0..5
class Professor
Professor Disciplina
leciona
0..1 0..5
27
1.class Professor {
2. private Disciplina[] disciplinas = {
3. new Disciplina(),
4. new Disciplina(),
5. new Disciplina(),
6. new Disciplina(),
7. New Disciplina(),
8. };
9.}
class Professor
A instanciação pode
ocorrer em outros Disciplina
Professor
pontos da classe leciona
0..1 0..5
28
14
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
leciona
0..1 0..5
29
Multiplicidade 1:*
class classes
Professor Disciplina
1 *
http://java.sun.com/docs/books/tutorial/java/generics/erasure.html
1.class Professor {
2. private Vector<Disciplina> disciplinas =
3. new Vector<Disciplina>(5, 3);
15
Bidirecional multiplicidade *:*
class muitos para muitos
0..* 0..*
31
Associações reflexivas
class associação reflexiv a
+temPrerequisito
+temComoPreReq
+ehPreReqDe
+preRequisito
0..*
0..*
Disciplina
Professor
1 *
16
Exercício
Solução JAssociaoReflexPrePosRequisitos
33
Classes Associativas
Diagrama de classes na atividade de Análise
Pessoa
Proj eto
+emprega +participa
0..* 0..*
Participacao
- cargaHoraria: int
- dataEntrada: Date
- dataSaida: Date
Equivale à...
34
17
Classes Associativas (2)
Implementação >>>>
35
36
18
AGREGAÇÃO
Composição/pertinência
associação
Parte class Classe
Todo Janela
Propagação
1
1
1
3 1 0..1
Exercício: desenhe
uma instância Botão ComboBox ScrollBar
possível da classe
janela
37
Agregação: adornos
class Classe
Time Jogador
* *
Qual a interpretação?
38
19
Tipos de agregação
class Classe
Janela
Composição
1
1
1
3 1 0..1
Time Jogador
* *
39
Relação forte
Destruição do todo se propaga para as partes
Tempo de vida do todo = das partes
40
20
Exemplo: agregação por composição
Linha 2 Ponto
1
class Linha {
public String id;
private Ponto pt1 = new Ponto(10, 20);
private Ponto pt2 = new Ponto(15, 30);
class Ponto {
…
}
} 41
42
21
Agregação: diferença
43
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
44
22
Exercício 1
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?
23
Agregação por composição
HistoricoPagsWeb
URLVisitada
Implementação >>>
47
24
Agregação por composição (3)
1.class Historico {
2. private class URLVisitada {
Classe
3. private String url;
aninhada
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
49
50
25
GENERALIZAÇÃO
Classes
compartilham
atributos e
comportamentos Relação de
generalização
É um tipo de
Herda atributos e
métodos
51
GENERALIZAÇÃO
52
26
Taxonomia: hierarquia de classes
Atributos e operações comuns
53
54
27
Princípio da substituição
55
Exemplo
Círculo e polígonos podem
ser tratados como
FormaGeométrica
56
28
Exemplo: taxonomia mal feita
Livro
LivroEmprestado LivroDisponível
57
Herança múltipla
58
29
Dependência
Variável local
Parâmetro de operação (método)
Instanciação
59
Dependência: exemplos
class Dependência
ClasseA ClasseB
+ operacao(ClasseC) : void
«local»
«parameter»
«instantiate»
ClasseC ClasseD
60
30
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;
Exercício (solução)
1
Aluno Curso
matriculado
<<local>> <<parâmetro>>
Date Endereço
62
31
Realização
«interface»
Serializable
«entity»
Historico
+ adicionar(ConversaoCF) : void
- writeObject() : void
63
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.
64
32
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/
Exercício (tarefas)
Tarefa 1
No enunciado dado, marque todos os substantivos
candidatos a classes (entregar o texto marcado)
66
33
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)
67
Agenda De:
João jl@uol.com.br Destinatários:
Maria ma@utfpr.edu.br
Assunto: nonono nono nono on
José jjj@bol.com.br
João e José,
Favor comparecer com urgência na sala B109.
[]s
Tereza
68
34
Exercício (exemplo de consulta)
Supor que o João foi selecionado na agenda. O programa mostra todos os emails
que lhe foram enviados (pode haver outros destinatários).
69
PERSISTÊNCIA
70
35
FORMAS E PERSISTÊNCIA
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
36
Exercício cliente email (cont.)
Tarefa 2
Implementar e testar o programa
Persistir a agenda e as mensagens
73
37