Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
2
Tópicos
ENGENHARIA DE SOFTWARE
Diagrama de Classes
Perspetivas dos Diagramas de Classes
Associações
Atributos
PARTE 2
Operações
Visibilidade dos Atributos e Operações
LINGUAGEM DE MODELAÇÃO UML
Generalização
Restrições
Conceitos Avançados
C AP. 6 . 1 – U M L – M O D E L AÇ ÃO D A E S T R U T U R A -
Quando Utilizar os Diagramas de Classes
D I AG R AM A D E C L AS S E S
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
3
Diagrama de Classes
4
Diagrama de Classes
Técnica central em qualquer método orientado para objetos
virtualmente todos os métodos incluem alguma variação desta técnica.
Descrevem
as classes - descrições abstratas e condensadas de um conjunto de objetos
do domínio da aplicação, caracterizadas pelos seus:
O diagrama de classes
É uma descrição formal da estrutura de objetos num sistema.
nome (ou identificador)
deve facilitar a compreensão do que a classe é e não o que faz
Descreve
qualquer classe deve ter um nome (mesmo que genérico e provisório)
os tipos de objetos no sistema, e
os vários tipos de relacionamentos estáticos entre eles.
Expressam, de uma forma geral, a estrutura estática do sistema em termos
das classes e relacionamentos entre essas classes.
•
exemplo: a_ser_definido
atributos
operações
restrições
os relacionamentos estáticos entre as classes
associações (por ex., um cliente pode alugar vários vídeos)
subtipos (por ex., uma enfermeira é um tipo de pessoa)
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
5
Diagrama de Classes
6
Diagrama de Classes
A classe representada no exemplo é:
Os atributos das classes:
Triangulo
identificada pelo nome “Triângulo”
tem como atributos “base” e “altura”
da classe.
base
executa a operação “area()”,
Triangulo
Representam-se por baixo do nome
base: int
Pode apenas ser escrito o nome de um
altura
a partir dos atributos
altura: int
atributo ou pode ser colocada também
area()
está sujeita à restrição
area()
informação relativa ao seu tipo.
“{area <= 300}” que limita a 300
Os nomes dos atributos devem começar
o valor máximo da área a calcular
por minúsculas e quando são compostos
por mais de uma palavra, a primeira
Os nomes das classes
devem começar por maiúsculas e quando
{area <= 300}
letra de cada palavra deve ser maiúscula
{area <= 300}
(excetuando a primeira).
são compostos por mais de uma palavra,
a primeira letra de cada palavra
restrição
restrição
deve ser maiúscula.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
7
Diagrama de Classes
8
Diagrama de Classes
As operações das classes:
A forma usada para representar as classes depende do seu fim:
Representam-se por baixo dos atributos.
Pode apenas ser escrito o nome da
Triangulo
Numa fase de análise, usar uma
operação ou pode ser colocada também
Triangulo
representação simplificada
base: int
altura: int
informação relativa ao tipo de dados que
area(): int
devolve, ou pode ainda ser colocada
informação relativa aos parâmetros
Na fase de desenho devem ser
que recebe e seus tipos.
incluídos mais detalhes
Os nomes das operações seguem as
mesmas regras dos nomes dos atributos.
{area <= 300}
Triangulo
base: int
altura: int
area(): int
restrição
As classes estão relacionadas usando as mesmas relações estudadas
para os casos de uso: inclusão, generalização e associação.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
9
Diagrama de Classes
10
Diagrama de Classes
A relação de inclusão
Exemplo:
indica que uma classe usa a outra;
é normalmente usada quando uma classe é usada como argumento numa
operação de outra classe.
A generalização
É uma relação entre uma classe geral (a superclasse ou pai) e uma ou mais
classes mais específicas (subclasses ou filhos);
As classes filho herdam todos os atributos e operações da classe pai e podem
ter mais atributos e operações que aqueles que herdam.
Se uma operação num filho tem o mesmo nome da do pai está a fazer um
override (obrepôr-se) à do pai.
A associação
É uma relação estrutural entre duas classes.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
11
Perspectivas dos Diagramas de Classes
12
Perspectivas dos Diagramas de Classes
As classes podem ser entendidas sob três perspetivas:
Conceptual
Perspetiva conceptual
desenha-se a classe sem pensar no tipo de implementação que vai ter (i.e., é
a classe exprime um conceito abstrato no domínio de estudo
De especificação
independente da linguagem de programação que vai ser utilizada)
Perspetiva de especificação
a classe é escrita pensando já em termos de software, mas é encarada de um ponto
de vista exterior e não em termos de implementação (i.e., pensa-se nas interfaces,
mas não na sua caracterização interna)
é por vezes usado o conceito de tipo para designar as interfaces, quando
ainda não se pensou na sua forma de implementação, que pode ser variada.
De um modo geral,
De implementação
a classe é descrita pensando já na forma como vai ser implementada
há vantagem em pensar mais na perspetiva de especificação do que na
perspetiva de implementação, embora a segunda seja hoje mais popular.
É fundamental reconhecer sempre em que perspetiva se está a
desenhar ou a ler um diagrama de classes
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
13
Associações
14
Associações
As associações
Exemplo:
Representam relacionamentos entre instâncias de classes.
O papel de uma pessoa é ser o Empregado, enquanto que o papel de uma
São representadas através de uma linha que une as classes associadas.
empresa é ser o Empregador
São caracterizadas por possuir um nome e, quando necessário, incluir o
papel que as classes têm na relação.
Alguns analistas dão nomes a todas as associações. Outros preferem só
atribuir nomes às associações que tenham a ganhar em clareza com a
existência de um nome
O nome das associações é dado, de preferência, utilizando formas verbais
ativas (“trabalha para”) ou
papel
passivas (“é empregado por”),
embora haja quem defende o uso de substantivos em análise OO, uma vez
Pessoa
Empregado
Emprego
Empresa
Empregador
que assim é salientado o carácter estático da associação.
nome
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
15
Associações: Associação Reflexiva
16
Associações: Perspetiva Conceptual - Papéis
Uma classe pode ter associações consigo própria, significando que um
Papéis:
objeto da classe se relaciona com um ou mais objetos da mesma
O papel descreve como uma das classes vê a outra classe na associação.
classe.
Cada associação binária tem dois papeis (“roles”), que correspondem a cada
Este tipo de relação surge, tipicamente, em relações de hierarquia (o
chefe de um conjunto de empregados é também um empregado)
Exemplo: associação na mesma classe
Empregado
Subordinado
um dos dois sentidos do relacionamento
Um papel pode ser caracterizado explicitamente por uma etiqueta que se
coloca, em itálico a meio, entre as duas classes. Se não houver etiquetas, o
papel fica caracterizado pela classe de destino.
Exemplo:
o papel de um professor é Lecionar disciplina,
-Nome
-Morada
enquanto que o papel de uma disciplina é Ser lecionada por professor
Chefiar
Disciplina
Professor
Chefe
Lecionar
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Ser lecionada
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
17
Associações: Perspetiva Conceptual - Multiplicidade
18
Associações: Perspetiva Conceptual - Multiplicidade
Multiplicidade ou Cardinalidade:
Se fosse pretendido indicar ser possível algumas disciplinas não serem
Um papel tem multiplicidade (ou cardinalidade), que indica quantos objetos
lecionadas por algum professor, utilizaríamos “0..1”
de uma dada classe podem estar ligados a um objeto da outra classe.
Professor
No exemplo a seguir o “1 … *” significa
0..1
*
Lecionar
que cada professor pode ensinar várias disciplinas, e
Disciplina
Ser lecionada
que não há nenhuma disciplina que possa ser ensinada por vários professores.
Professor
1
*
Lecionar
Formas mais comuns de multiplicidade:
Disciplina
0..1 - Opcional
Ser lecionada
1..1 ou 1 - Obrigatório existir um objeto
M..N - Um valor do intervalo estabelecido (de M a N); 1..10 - de um a dez
As cardinalidades representam limites superiores
0..* ou * - Zero a qualquer inteiro positivo objetos da classe
“*” significa qualquer coisa entre 0 e vários
1..* - Um a qualquer inteiro positivo objetos da classe
“1” representa o valor um e só um
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
19
Associações: Perspetiva Conceptual - Multiplicidade
Exemplos de multiplicidades mais frequente
20
Associações: Perspetiva Conceptual – Classe-associação
Numa relação de associação entre classes, a associação pode também
ter os seus próprios atributos (e eventualmente operações), devendo
ser, por conseguinte, modelizada também como uma classe. Este tipo
de classes designa-se por classe-associação.
Estas são representadas por uma linha a tracejado a ligá-la à linha da
associação entre as duas classes.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
21
Associações: Perspetiva Conceptual – Classe-associação
22
Associações: Perspetiva Conceptual – Associações N-árias
Exemplo:
A maioria das associações são binárias, pois ligam duas classes.
a associação entre as classes “Pessoa” e
“Empresa” traduz as tarefas que
cada empregado realiza na empresa.
Mas, uma classe pode estar ligada a mais do que uma outra, através
das denominadas associações N-árias.
Para cada tarefa é mantido um conjunto de atributos.
Estas podem ser representadas por um losangulo apontado para as
A classe-associação “Tarefa” é representada visualmente como qualquer
outra classe, mas apresenta uma linha a tracejado a ligá-la à linha da
várias componentes da associação.
Exemplo:
associação.
Sala
a classe “Disciplina” resulta da
associação entre as classes
“Aluno”, “Professor” e “Sala”.
Aluno
Professor
Disciplina
Data_Início
Data_Fim
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
23
Associações: Perspetiva Conceptual - Multiplicidade
24
Associações: Perspetiva Conceptual - Multiplicidade
Exemplo de uma associação ternária e de uma classe-associação:
As associações N-árias podem geralmente ser transformadas em várias
A associação “Disciplina” relaciona as classes “Professor”, “Aluno” e “Sala”.
relações binárias entre a classe-associação e as restantes classes
Caso a associação tenha também atributos e/ou operações próprias, cria-se
participantes.
uma classe-associação, a qual é ligada ao losango por uma linha a tracejado.
No entanto, se for esta a estratégia adotada deve ser assinalado esse
facto (por exemplo, através de um estereótipo ou de uma anotação)
Sala
junto à classe-associação.
Sala
Sala
Aluno
Aluno
Disciplina
Data_Início
Data_Fim
Professor
Professor
Aluno
Disciplina
Professor
Disciplina
Data_Início
Data_Fim
Disciplina
Data_Início
Data_Fim
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
25
Associações: Perspectiva de Especificação
26
Associações: Perspectiva de Implementação
As associações representam responsabilidades:
As associações representam agora a existência de ponteiros nos dois
No diagrama isso significa que há um ou mais métodos associados a
“Cliente” que definem que “Encomenda(s)” é que um cliente fez
sentidos, entre as classes ligadas pela associação
No diagrama isso significa que “Encomenda” tem
Do mesmo modo haverá
um campo que é uma
métodos em “Encomenda”
coleção de ponteiros para
que informam
”Linha(s) de Encomenda”, e
de que “Cliente” fez
um ponteiro que aponta
determinada encomenda, e
para Clientes
de que “Linha(s) de
A este nível não se podem
Encomenda” constituem
tirar, a partir das
uma “Encomenda”
Estas responsabilidades
associações, quaisquer
não implicam, no entanto,
conclusões acerca das
estruturas de dados. O diagrama exprime apenas as interfaces e nada mais.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
interfaces. As operações sobre as classes é que darão essa informação.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
27
Associações: Navegabilidade
28
Associações: Navegabilidade
As associações descrevem a rede de relações estruturais que existem
entre as classes e que dão origem às ligações entre os objetos,
instâncias dessas classes.
os objetos.
Por omissão, as associações são navegáveis nos dois sentidos, embora
em alguns casos, só interesse um dos sentidos da navegabilidade.
Exemplo: as instâncias do objeto A veem as instâncias do objeto B,
mas as instâncias do objeto B, não veem as instâncias do objeto A.
Engenharia de Software - 2011/2012
se uma seta sobre o papel para o qual a navegabilidade é possível
Temos assim responsabilidades assimétricas
Essas ligações podem ser vistas como canais de navegabilidade entre
A
Quando se pretende exprimir a navegabilidade num só sentido, coloca-
B
Carlos Barrico - Departamento Informática da UBI
Exemplo com navegabilidade:
Encomenda Cliente
significa que Encomenda
tem a responsabilidade de
dizer a que Cliente se
destina, mas Cliente não
tem a responsabilidade de
dizer que Encomendas lhe
correspondem.
Podia-se fazer o mesmo
tipo de considerações
acerca da navegabilidade
entre Linha de Encomenda
e Produto
Engenharia de Software - 2011/2012
Encomenda
Cliente
dataRecebida
éPrepaga
número:string
preço:money
1
*
Despacha()
Fecha()
nome
endereço
regimeCrédito(): string
{se Encomenda.cliente.regimeCrédito
é "fraco", então
Encomenda.éPrepaga tem de ser
verdadeiro}
1
*
Linha de Encomenda
quantidade: inteiro
preço: money
estáSatisfeita:Booleano
*
1
Produto
Cliente Institucional
nomeContacto
regimeCrédito
limiteCrédito
Cliente Individual
cartãoCrédito#
avisa()
facturaParaMês(Inteiro)
*
0 .. 1
Empregado
{regimeCrédito == "fraco"}
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
29
Associações: Navegabilidade
A navegabilidade constitui um aspeto importante dos diagramas de
frequente
ver-se
navegabilidade
e
um
que
diagrama
depois
se
conceptual
transforma
que
num
começa
diagrama
Uma associação sem setas é entendida como
bidirecional, ou
implementação e de especificação, mas não a nível conceptual
É
30
Associações: Navegabilidade
sem
de
uma associação cujas navegabilidades não foram ainda definidas:
deve definir-se qual das interpretações se adota;
no caso dos diagramas a nível de especificação e de implementação é mais frequente
especificação ou implementação, pela adição das navegabilidade.
adotar-se a segunda
Tem-se uma associação
Se uma associação for bidirecional, isso significa que os dois papeis são
unidirecional quando só há navegabilidade num sentido;
inversos um do outro.
bidirecional quando as navegabilidades são nos dois sentidos.
Esta
Uma associação que só pode ser navegada num sentido pode ser vista
propriedade
é
válida
para
as
três
perspetivas
(conceptual,
de
especificação e de implementação)
como uma meia associação, mostrando uma assimetria nos requisitos
de comunicação.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
31
Atributos
32
Operações
Os atributos são características das classes
As operações correspondem aos métodos da classe.
No caso mais geral, a notação para um atributo especifica o seu nome,
A sintaxe completa em UML para uma operação é a seguinte:
tipo e valor por omissão (default), bem como a sua visibilidade
visibility name(parameter list): type = return-type-expression {property-string}
onde:
Em UML, teremos:
visibility name: type = defaultValue
visibility (visibilidade) será descrita mais à frente
O conceito de visibilidade (visibility) é descrito mais à frente
name é uma cadeia de caracteres
Os atributos têm um valor único de cada vez
parameter-list contém argumentos (opcionais) cuja sintaxe é a mesma dos
Em geral os diagramas não indicam se um atributo é opcional ou obrigatório
atributos
return-type-expression é uma especificação opcional,
(embora, em rigor, devesse fazê-lo)
property-string indica valores de uma propriedade que se aplica à operação
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
33
Operações
34
Operações
É útil distinguir entre operações que alteram e não alteram o estado de
Outras designações:
métodos de obtenção (getting methods) - devolvem o valor de um campo
uma classe
Uma interrogação (query) é uma operação que obtém o valor de uma
(e não fazem nada mais)
métodos de fixação (setting methods) - que colocam um valor num campo
classe sem alterar o seu estado observável.
As operações que alteram o estado observável são chamadas de
modificadores.
As interrogações podem ser executadas por qualquer ordem, mas os
modificadores exigem cuidados com a sequência de execução. O
melhor é não misturar operações dos dois tipos citados.
(e nada mais fazem)
Também se deve reconhecer a distinção entre operação e método:
Uma operação é algo que se evoca sobre um objecto (a chamada ao
procedimento);
já o método é o corpo do procedimento.
É frequente confundirem-se os dois, mas importa fazer notar que a
operação não é mais do que a invocação do método. Havendo
polimorfismo, operação e método são distintos.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
35
Visibilidade de Atributos e Operações
36
Visibilidade de Atributos e Operações
A UML define três tipos de visibilidade para os atributos e operações:
Exemplo:
pública (simbolizada através do prefixo “+”)
que torna o elemento visível a todos os clientes da classe;
Cliente
protegida (simbolizada través do prefixo “#”)
que torna o elemento visível às subclasses da classe (aos respetivos descendentes);
Privado
-
Público
# Registar( )
+ Alterar Dados( )
+ CalcularIdade( )
privada (simbolizada através prefixo “-”)
que torna o elemento apenas visível à própria classe
BI
Nome
Morada
Telefone
Protegido
Embora a indicação da visibilidade nem sempre figure de forma
explícita nos diagramas de classes, isso não significa que ela não seja
definida no modelo.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
37
Generalização
A Generalização é um caso especial no diagrama de classes
Em UML preferiu-se utilizar o termo generalização em vez do termo
noção de supertipo (superclasse) e subtipo (subclasse) na perspetiva de uma
relação pai-filho
mais específico.
termo
herança, já nosso conhecido.
As classes obtidas por herança são denominadas subtipos (exceto no caso
Especifica o relacionamento entre um elemento geral e um elemento
O
38
Generalização
dos diagramas de implementação, em que são designadas por subclasses)
O elemento mais específico contém informação que lhe é particular,
generalização
especifica
uma
perspetiva
focada
numa
classificação de hierarquia.
desde que continue completamente consistente com a descrição do
elemento mais geral.
Exemplo: um animal é um conceito mais geral do que um gato, um cão ou
um guaxim.
Inversamente, um gato é um conceito mais específico do que um animal.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
39
Generalização
40
Generalização
Um relacionamento de generalização significa um “é um” ou “é um tipo
No diagrama distinguem-se
O relacionamento de generalização é representado através de uma
que, tendo algumas diferenças
especializada para a mais geral.
entre si, têm também algumas
semelhanças.
Essas semelhanças podem ser
Animal
colocadas na classe “cliente”
(o supertipo) ficando as
Cão
Guaxim
Nome
Endereço
os ”clientes individuais”,
seta cuja ponta é um triângulo vazio, que aponta da classe mais
Gato
Cliente
os “clientes institucionais” e
de”. Exemplo: um gato “é um” animal.
regimeCredito(): string
Cliente Institucional
Cliente Individual
nomeContacto
regimeCrédito
limiteCrédito
cartãoCrédito#
avisa()
facturaParaMês(Inteiro)
{regimeCrédito()=="fraco"}
outras classes (os subtipos)
com as características
Subtipos
Supertipo
que são diferentes.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
41
Generalização
As classes podem ter várias superclasses.
Na perspetiva conceptual pode-se dizer que
Quando é esse o caso, a generalização diz-se múltipla e várias setas
“cliente institucional” será um subtipo
Cliente
de “cliente” se todas as instâncias de
são desenhadas da subclasse para as várias superclasses.
Nome
Endereço
“cliente institucional” forem também,
A classe Tapetes voadores tem dois antecessores distintos:
a classe Tapetes, e
42
Generalização: Perspetiva Conceptual e de Especificação
regimeCredito(): string
por definição, instâncias de “cliente”.
Tapetes
Veículos
A ideia chave é que tudo o que se
a classe Veículos.
estabelecer para “cliente” (associações,
atributos, operações) é também
Terrestres
válido para “cliente institucional”.
Aéreos
Cliente Institucional
Cliente Individual
nomeContacto
regimeCrédito
limiteCrédito
cartãoCrédito#
avisa()
facturaParaMês(Inteiro)
{regimeCrédito()=="fraco"}
Na perspetiva de especificação,
a generalização significa que a interface
Subtipo
Supertipo
do subtipo tem que incluir todos os elementos da interface do supertipo. Diz-
Tapetes voadores
se que a interface do subtipo está conforme com a interface do supertipo.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
43
Generalização: Perspetiva de Implementação
44
Generalização: Perspetiva de Implementação
Na perspetiva de implementação,
O conceito de herança está presente, pois que
A generalização está associada ao fenómeno de herança das linguagem de
programação orientadas para objetos.
as subclasses (“filhos”) herdam da superclasse (“pai”) a estrutura em termos
de atributos e operações.
Fala-se aqui de subclasse e não de subtipos e considera-se que a subclasse
herda todos os métodos e campos da superclasse, podendo os métodos da
subclasse sobrepor-se aos métodos herdados.
Cliente
Assim, está implícito que
Nome
Endereço
As subclasses “Cliente Institucional” e
regimeCredito(): string
“Cliente Individual” possuem
um nome, e
um endereço.
Cliente Institucional
Cliente Individual
nomeContacto
regimeCrédito
limiteCrédito
cartãoCrédito#
avisa()
facturaParaMês(Inteiro)
{regimeCrédito()=="fraco"}
Subclasse
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Superclasse
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
45
Restrições
46
Restrições
O próprio facto de se desenhar um diagrama de classes significa que se
estão a respeitar restrições.
A sintaxe UML para exprimir restrições limita-se a indicar que devem
ser colocados entre {}.
Os conceitos de associação, de atributo ou de generalização são, afinal de
contas, formas de especificar restrições.
Cliente
Tudo o resto é livre, podendo
Nome
Endereço
ser expressas em
Apesar disto, os conceitos chave dos diagramas de classe não permitem
exprimir todas as restrições.
regimeCredito(): string
pseudolinguagem, para
enfatizar a legibilidade, ou
Assim, há restrições que têm de ser expressas de forma explícita,
porque não caem em nenhuma das categorias previstas nos diagramas
Cliente Institucional
ser traduzidas por instruções
nomeContacto
regimeCrédito
limiteCrédito
em código de programação.
de classes.
Cliente Individual
cartãoCrédito#
avisa()
facturaParaMês(Inteiro)
{regimeCrédito()=="fraco"}
Restrição: neste caso o regime de crédito só pode ser “fraco”
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
47
Conceitos Avançados
Os conceitos até agora descritos, correspondem às notações chaves
dos diagramas de classes. Correspondem a cerca de 90% do esforço
na criação de diagramas de classes.
Há,
no
entanto,
48
Conceitos Avançados: Classes Associativas
alguns
conceitos
Surge da necessidade de obter mais informação de uma associação,
permitindo adicionar atributos, operações e outros aspectos.
Só existe em resultado da relação entre duas classes; por si só, não
adicionais,
dos
quais
iremos
descrever alguns, os mais relevantes, podendo os restantes ser
consultados na bibliografia indicada no início do capítulo.
terá significado.
Normalmente surgem nas relações de “Muitos para Muitos” e o nome
da classe é dado pelo nome da associação.
Iremos assim descrever:
Classes Associativas
Estereótipos
Interfaces e desenho do sistema
Agregação e Composição
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
49
Conceitos Avançados: Classes Associativas
50
Conceitos Avançados: Estereótipos
Exemplo:
Um estereótipo em UML é parte de um leque de mecanismos de
pretende saber-se quando (período de tempo) em que cada empregado
trabalhou para a empresa
extensibilidade utilizável quando a semântica base do elemento de
modelação se revela insuficiente.
poderíamos adicionar este atributo à classe Pessoa, mas trata-se realmente
de um facto acerca do relacionamento da pessoa com a empresa.
Cada elemento UML pode ter um ou mais estereótipos.
Permite, genericamente,
criar novas classes de elementos de modelação por cima do núcleo de
Emprego
Classe Associativa
elementos pré-definidos pela UML,
Data_Início
Data_Fim
mantendo um controlo sobre as extensões das classes de metamodelos.
É possível criar qualquer tipo de estereótipo, sendo os mais utilizados,
Pessoa
Empregado
para as classes, os de interface e controlo.
Empresa
Empregador
Os estereótipos são normalmente mostrados entre aspas (por ex:,
*
*
Engenharia de Software - 2011/2012
«control»), mas podem também ser representados por um ícone.
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
51
Conceitos Avançados: Estereótipos
O
estereótipo
disponibilizam
de
um
«interface»
conjunto
de
classifica
as
operações
classes
visíveis
que
apenas
externamente
Uma classe com o estereótipo de «control» representa uma classe cujo
Proporciona uma vista total ou parcial do conjunto dos vários serviços
Permite que o impacto das alterações seja limitado, podendo efetuar-se
alterações na classe sem afetar as classes restantes, desde que não se altere
objetivo é conter um conjunto
a interface respetiva.
de regras que controlam
Estereótipo
determinadas operações do
Permite separar o que é fornecido pela abstração da classe da forma como é
produzido.
sistema e que coordenam as
interações com as outras classes.
Interface:
proporcionados por um ou mais elementos.
(públicas).
«control»
Controlo Acesso
+ VerificaAcesso()
Engenharia de Software - 2011/2012
52
Conceitos Avançados: Interfaces e Desenho do Sistema
«interface»
Gestão
É um grupo de operações que são utilizadas para especificar um serviço.
+ Criar()
+ Apagar()
+ Ver()
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
53
Conceitos Avançados: Interfaces e Desenho do Sistema
54
Conceitos Avançados: Interfaces e Desenho do Sistema
A UML representa as interfaces:
Em alternativa a interface pode representar-se por uma classe, com o
Utilizando pequenos círculos ligados por uma linha ao elemento que
estereótipo «interface», mas sem atributos, apenas operações.
proporciona os serviços descritos pela interface.
Encomenda
uma classe
-
«interface»
Gestão
+ Criar()
+ Apagar()
+ Ver()
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
NumeroE: long
Data: date
TipoEncomenda: string
ValorTotal: long
+
+
+
+
+
Engenharia de Software - 2011/2012
Criar()
Apagar()
Ver()
AdicionaProduto()
CalculaValorTotal()
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
55
Conceitos Avançados: Relação de Dependência
Os dependentes da interface podem utilizar todos ou alguns dos
serviços descritos na interface.
O serviço funciona como um contrato entre a
classe e os seus clientes, que, por sua vez,
constroem os seus serviços com base na
interface estabelecida
Engenharia de Software - 2011/2012
A classe Funcionário, através da interface Gestão, pode Criar, Apagar e Ver
encomendas.
serviços disponibilizados
Quando um funcionário efetua uma consulta
a uma encomenda, este terá de aceder aos
serviços disponibilizados pela classe
Encomenda, através da interface Gestão, que
disponibiliza os serviços Criar(), Apagar() e
Ver() da classe Encomenda
A relação de Realização mostra que existe um contrato entre a classe
que utiliza o serviço e outra que garante a sua realização.
Uma relação de dependência surge quando uma classe recorre aos
por outra classe.
56
Conceitos Avançados: Relação de Dependência e Realização
A classe Cliente apenas pode
Funcionário
- BI: string
- Nome: string
- Morada: string
visualizar as encomendas,
Cliente
Funcionário
- BI: string
- Nome: string
- Morada: string
- BI: string
- Nome: string
- Morada: string
+ Pré-Registo()
Dependência
uma vez que a respetiva
interface só disponibiliza a
Encomenda
«interface»
Gestão
+ Criar()
+ Apagar()
+ Ver()
-
NumeroE: long
Data: date
TipoEncomenda: string
ValorTotal: long
+
+
+
+
+
Criar()
Apagar()
Ver()
AdicionaProduto()
CalculaValorTotal()
Carlos Barrico - Departamento Informática da UBI
operação Ver()
A classe Encomenda
disponibiliza duas interfaces:
Gestão e
Encomenda
«interface»
Gestão
+ Criar()
+ Apagar()
+ Ver()
-
NumeroE: long
Data: date
TipoEncomenda: string
ValorTotal: long
+
+
+
+
+
Criar()
Apagar()
Ver()
AdicionaProduto()
CalculaValorTotal()
«interface»
Visualizar
+ Ver()
Realização
Visualizar.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
57
Conceitos Avançados: Interface e Desenho do Sistema
58
Conceitos Avançados: Diagrama de Classe com 3 níveis
Podemos construir um diagrama de classes com 3 níveis, dividido em
Como as regras de negócio tendem a ser alteradas com relativa
três camadas de serviços:
frequência, os serviços de negócio são úteis para encapsular estas
1. Serviços de interface - fornece a interface para os utilizadores para
regras, separando a
apresentação e recolha de dados.
tarefa
a desempenhar da
forma como
é
desempenhada.
2. Serviços de negócio - engloba as classes que possuem as regras
fundamentais de negócio, respondendo aos pedidos da camada 1 ou de
outros serviços da própria camada, através da execução de uma operação
Ao isolar os serviços de negócio dos serviços de interface e dados, este
diagrama permite ir ao encontro do paradigma de desenvolvimento de
aplicações cliente/servidor, promovendo a reutilização, escalabilidade e
específica sobre dados relevantes com base em regras de negócio.
3. Serviços de Dados - permite manter, atualizar e aceder aos dados
manutenção dos componentes.
persistentes.
Nesta arquitetura, quando os dados residem num servidor de base de
dados, os serviços de negócio asseguram o acesso ao serviço de dados,
isolando o seu acesso.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
59
Conceitos Avançados: Diagrama de Classe com 3 níveis
A classe de interface “Ecrã PréRegisto” necessita da classe clientes,
nos serviços de negócio, para
efetuar o registo, invocando para tal
a operação pré-registo.
Por sua vez, a classe cliente
necessita de guardar num suporte
físico os dados do cliente que está a
efetuar o pré-registo, utilizando os
serviços de dados através da classe
SD_Cliente.
Serviços de Interface
«user interface»
Ecrã Pré-Registo
«user interface»
Ecrã Reservas
Esquema semelhante se aplica para
as classes “Ecrã Reservas” e “Ecrã
Encomenda”. Dado necessitarem de
verificar se o cliente tem permissão,
o que é feito invocando a classe
“Controlo de Acesso” (com
estereótipo «control»), classe esta
que contém as regras de negócio
que gerem o acesso ao sistema.
Engenharia de Software - 2011/2012
Serviços de Negócio
Serviços de Dados
Cliente
«data connection»
{persistence = Yes}
- BI
- Nome
- Morada
+ Pré-Registo() {sequencial}
«control»
SD_Cliente
- BI
- Nome
- Morada
1
efetua
Controlo Acesso
«user interface»
60
Conceitos Avançados: Diagrama de Classe com 3 níveis
+
+
+
+
+ VerificaAcesso()
Ecrã Encomenda
«data connection»
Encomenda
Encomenda
{persistence = Yes}
- NumeroE
- Data
- TipoEncomenda
+ Criar() {sequencial}
1
0..*
0..*
- NumeroE
- Data
- TipoEncomenda
+
+
+
+
Serviços de Interface
«user interface»
Ecrã Pré-Registo
«user interface»
Criar()
Apagar()
Consultar()
Actualizar()
efetua
As classes persistentes
“Persistence=Yes” necessitam que
os seus objetos sejam gravados
fisicamente numa base de dados ou
outro meio.
Ecrã Reservas
A classe “Controlo”, neste caso, não
necessita de gravar os seus dados,
utilizando os serviços da classe
“Cliente”.
No entanto, se fosse necessário
manter um registo de acessos
específicos da classe ou de regras
de negócio, esta seria marcada
como persistente e teria uma classe
correspondente nos serviços de
dados.
Criar()
Apagar()
Consultar()
Actualizar()
Carlos Barrico - Departamento Informática da UBI
Serviços de Negócio
Cliente
«data connection»
{persistence = Yes}
- BI
- Nome
- Morada
+ Pré-Registo() {sequencial}
«control»
efetua
Controlo Acesso
+
+
+
+
Ecrã Encomenda
1
0..*
0..*
«data connection»
Encomenda
Encomenda
{persistence = Yes}
- NumeroE
- Data
- TipoEncomenda
Criar()
Apagar()
Consultar()
Actualizar()
efetua
+ VerificaAcesso()
+ Criar() {sequencial}
Engenharia de Software - 2011/2012
SD_Cliente
- BI
- Nome
- Morada
1
«user interface»
Serviços de Dados
- NumeroE
- Data
- TipoEncomenda
+
+
+
+
Criar()
Apagar()
Consultar()
Actualizar()
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
61
Conceitos Avançados: Diagrama de Classe com 3 níveis
A parte física dos dados dependerá do tipo de base de dados
(relacional ou objeto):
Se
base
de
dados
62
Conceitos Avançados: Agregação e Composição
A agregação num diagrama de classes pretende demonstrar a relação
que um todo é composto por partes (part-of relationship).
relacional,
aplicam-se
as
regras
de
transposição
semelhantes às já tratadas em análise de sistemas, a propósito da
Representa
uma
relação
assimétrica,
na
qual
uma
das
partes
desempenha um papel mais importante do que a outra.
transposição do modelo E-R para o modelo relacional.
Se B.D. objeto ou relacional-objeto, a transposição será mais direta, e será
tratada numa disciplina do plano de estudos do curso “Tópicos Avançados de
bases de Dados”.
Mesa
Restaurante
- Nome
- Morada
- Num_mesa
1
1..*
Um restaurante possui um conjunto de mesas
(o losângulo sem enchimento pretende
representar o conceito de agregação)
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
63
Conceitos Avançados: Agregação e Composição
Os critérios seguintes implicam uma agregação, mas o oposto nem
sempre
é
verdade,
ou
seja,
64
Conceitos Avançados: Agregação e Composição
a
agregação
não
os
implica
A composição:
é uma agregação com um significado mais forte existindo uma dependência
direta entre as duas classes (se a parte deixar de existir, o todo também
necessariamente:
Uma classe é parte de outra classe (o todo é composto por partes)
Os valores de um atributo de uma classe propagam-se aos atributos de outra
desaparece); dito de outra forma, a parte vive e morre com o todo.
qualquer remoção do todo implica a eliminação em cascata das partes.
Na composição a multiplicidade do lado do todo não ultrapassa o um,
classe.
Uma ação numa classe implica uma ação na outra classe.
ao contrário da agregação.
Os objetos de uma classe estão subordinados aos objetos da outra classe.
Em casos de dúvida quanto à existência de agregação, a associação
simples será preferível: lembremo-nos de que é necessário escolher
uma solução que implique o acoplamento mais fraco.
Não faz sentido
haver linhas de
encomenda
(parte) sem a
encomenda
respetiva (todo).
ItemEncomenda
Encomenda
- NúmeroE
- Data
- TipoEncomenda
1
1..*
Composição
- Codtem
- Quantidade
Parte
Todo
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
65
Conceitos Avançados: Agregação e Composição
Exemplo:
Os diagramas de classes são a espinha dorsal de praticamente todos os
Um polígono contém uma coleção ordenada de pontos. Esses pontos podem
ser alterados com a edição do polígono (agregação)
seu uso com alguns cuidados:
Polígono
gráfico do polígono (por ex., cor ou
textura); foi separado do polígono
1
Não tentar usar todas as notações disponíveis.
1
composição
agregação
porque diversos elementos gráficos
O relacionamento com o pacote gráfico
Adequar a perspetiva que se está a usar à fase em que o projeto se
1
{ordenado} 3..*
atributos gráficos.
encontra:
Ponto
Pacote Gráfico
é composição porque o pacote gráfico
fazer diagramas conceptuais, se se está a fazer análise;
Cor
Textura
fazer diagramas de especificação, ao começar a pensar-se em software; e
será criado ou destruído com o polígono.
fazer diagramas de implementação, apenas quando se pretender ilustrar uma solução
de implementação mais particular.
Classes compostas - classes implementadas por composição.
Carlos Barrico - Departamento Informática da UBI
Cap. 6.1 – UML - Modelação de Estrutura – Diagrama de Classes [Parte 2]
67
Quando Usar os Diagramas de Classes
Não desenhar modelos para tudo; é preferível concentrarmo-nos nas
áreas chave.
É melhor ter poucos diagramas, que se vão atualizando quando necessário,
do que ter muitos diagramas que se vão tornando obsoletos por falta de
atualização.
todo o custo começar a
pensar nos
pormenores
de
implementação demasiado cedo.
Para o conseguir, concentrar a atenção nas perspetivas de concepção e de
especificação.
Engenharia de Software - 2011/2012
Usar as mais complexas (aspetos avançados) quando forem estritamente
necessárias.
podem utilizar o mesmo pacote de
Engenharia de Software - 2011/2012
métodos orientados para objetos, sendo, por isso, os mais usados.
São, no entanto, os mais ricos e complexos, pelo que se recomenda o
A composição é utilizada para o pacote
Evitar a
66
Quando Usar os Diagramas de Classes
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
2
Tópicos
ENGENHARIA DE SOFTWARE
Objetivos
Transição para os Objetos
Diagramas de Objetos
Representação das Ligações
PARTE 2
Objetos Compósitos
Quando Utilizar os Diagramas de Objetos
LINGUAGEM DE MODELAÇÃO UML
C AP. 6 . 2 – U M L – M O D E L AÇ ÃO D A E S T R U T U R A D I AG R AM A D E O B J E TO S
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
3
Objetivos
4
Transição para os Objetos
Facilitar a compreensão do processo de transição dos casos de uso para
Os diagramas de casos de uso
Centram o desenvolvimento sobre as necessidades do utilizador.
o universo dos objetos.
Familiarizar com os conceitos essenciais à utilização dos diagramas de
Têm um objetivo de eficácia: fazer o que deve ser feito.
Dizem o que o sistema deve fazer, mas não como deve fazê-lo.
objetos.
Esclarecer as relações entre os diagramas de objetos e diagramas de
Os diagramas de objetos
Satisfazem um objetivo complementar, o da eficiência: fazer corretamente;
classes.
Dizem como deve ser feito.
Esta complementaridade é importante porque um bom projeto de
software tem de satisfazer, em simultâneo, os objetivos de eficiência e
eficácia.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
5
Transição para os Objetos
6
Transição para os Objetos
Transição de um caso de uso para uma formulação orientada para
objetos
A realização de um caso de uso é um momento crucial da construção
do modelo: é o momento da passagem para objetos.
Note-se, contudo, que uma decomposição que siga de forma direta um
caso de uso, tal como ele foi criado, corre o risco de conduzir a uma
Caso de uso
<<realiza>>
Colaboração
abordagem estruturada clássica, com todos os inconvenientes de uma
estruturação em torno de funções.
Numa abordagem para objetos, realiza-se o caso de uso através de
<<participa>>
<<participa>>
uma colaboração entre objetos.
<<participa>>
Veremos que os cenários, instâncias dos casos de uso, serão
Objeto
Objeto
representados por diagramas de interação de dois tipos:
Objeto
de colaboração, e
de sequência.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
7
Transição para os Objetos
8
Diagramas de Objetos
Os diagramas de objetos ou diagramas de instâncias representam os
objetos e as ligações entre eles, exatamente da mesma maneira que
os diagramas de classes representam as classes e as associações entre
elas.
Tal como nos diagramas de classes, os diagramas de objetos, que não
são mais do que a instanciação dos diagramas de classes, representam
estruturas estáticas.
A notação utilizada pelos diagramas de objetos deriva diretamente da
dos diagramas de classes, com a diferença que apresenta os nomes
dos elementos, que são as instâncias, sublinhados.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
9
Diagramas de Objetos
10
Diagramas de Objetos
Cada objeto é representado por um retângulo que contém os seguintes
Exemplo:
elementos:
o nome da classe e do objeto, separados por “:” (diz-se que se tem o modelo
Modelo completo:
Nome do objeto: Classe
completo)
o nome da classe à qual o objeto pertence (diz-se que se tem o modelo
Modelo incompleto:
anónimo)
Nome do objeto
o nome do objeto, sem indicação da classe a que pertence (diz-se que se tem
o modelo incompleto)
Modelo anónimo:
: Classe
O modelo anónimo é utilizado quando se sabe a que classe pertence
o objeto, mas ainda não se atribuiu um nome para ele
O modelo incompleto corresponde a situações em que já se escolheu
o nome para o objeto, mas não se sabe ao certo a que classe pertence.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
11
Diagramas de Objetos
12
Representação das Ligações
Os retângulos que simbolizam os objetos podem igualmente comportar
um segundo compartimento que contém o valor dos atributos.
O tipo não será necessário dado que já foi definido no diagrama de
classes que engloba o dos objetos.
Os objetos de um diagrama encontram-se ligados por ligações que são
instâncias das associações entre as classes às quais pertencem os
objetos considerados.
Exemplo do diagrama de objetos (simplificado) para um automóvel e
Exemplo para um objeto anónimo da classe Automóvel, com um único
do diagrama de classes para o qual representa uma instância:
atributo, Cor, cujo valor é Vermelha:
: Automóvel
: Motor
Automóvel
1
1
Motor
1
: Automóvel
: Roda
: Roda
: Roda
: Roda
4
Roda
Cor = Vermelha
É uma instancia de
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
13
Representação das Ligações
14
Objetos Compósitos
Ligações que são instâncias de associações reflexivas podem ligar os
objetos a si mesmos.
Os objetos compostos a partir de sub-objetos podem ser representados
por objetos compósitos, que permitem reduzir a complexidade dos
Dois exemplos da mesma associação reflexiva:
diagramas.
Representam-se como objetos normais, exceto no facto de nos objetos
Chefe
*
1
compósitos serem colocados os sub-objetos como atributos.
Mostra que o Dinis é o
chefe de si mesmo
João: Pessoa
Trabalhador
Pessoa
Chefe
Exemplo de objeto compósitos:
Mostra que o João
é chefe do Luís
Chefe
Luís: Pessoa
Dinis: Pessoa
Objeto compósito
: Parte 1
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
Engenharia de Software - 2011/2012
: Parte 2
: Parte 3
Carlos Barrico - Departamento Informática da UBI
Cap. 6.2 – UML - Modelação de Estrutura – Diagramas de Objetos [Parte 2]
15
Objetos Compósitos
16
Quando Utilizar os Diagramas de Objetos
Os objetos compósitos são instâncias de classes compósitas, isto é, as
classes construídas a partir de outras classes por meio de forma forte
Os diagramas de objetos utilizam-se principalmente para
ilustrar o contexto da instanciação de uma classe (por exemplo, antes ou
depois de uma interação) e
de agregação (composição).
Exemplo da classe compósita Janela e do diagrama de objetos
facilitar a compreensão das estruturas de dados complexas, como as
estruturas recursivas.
compósito que representa uma das suas instâncias:
1
Janela
2
:Janela
Elevador
1
: Zona de desenho
:Elevador horizontal
1
Zona de desenho
:Elevador vertical
Classe compósita “Janela”
Engenharia de Software - 2011/2012
Objeto compósito “Janela”
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.3 – UML - Modelação de Estrutura – Diagramas de Pacotes [Parte 2]
2
Tópicos
ENGENHARIA DE SOFTWARE
Diagramas de Pacotes
Pacote = agrupamento por critérios lógicos
Conceitos de acoplamento e coesão
Pacotes
PARTE 2
Hierarquias de Pacotes
Acesso aos Elementos
LINGUAGEM DE MODELAÇÃO UML
Arte na Conceção
Exemplo
Quando utilizar os Diagramas de Pacotes
C AP. 6 . 3 – U M L – M O D E L AÇ ÃO D A E S T R U T U R A D I AG R AM A D E P AC O T E S
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.3 – UML - Modelação de Estrutura – Diagramas de Pacotes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.3 – UML - Modelação de Estrutura – Diagramas de Pacotes [Parte 2]
3
Objetivos
4
Diagramas de Pacotes
Familiarizar com os conceitos essenciais sobre Diagramas de Pacotes:
perceber o conceito de pacote e dependência
mostrar exemplos de diagramas de pacotes
compreender o papel dos diagramas de pacotes na minimização das
dependências
Trata-se do responder à questão:
“Como dividir um grande sistema em subsistemas?”
Na abordagem estruturada tradicional era usada a decomposição funcional,
na qual o sistema era mapeado como uma
função e,
esta dividida em
subfunções, sub-subfunções e assim sucessivamente
Havia uma separação entre processos e dados, e além da decomposição
funcional havia uma estrutura de dados
Algumas técnicas de engenharia de informação agrupavam registos de dados
em áreas e produziam matrizes que mostravam como as funções e registos
de dados interatuavam.
Mas agora surgem os objetos: a separação dos processos e dados
desapareceu, a decomposição funcional desapareceu, mas a velha
questão permanece – como dividir?
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.3 – UML - Modelação de Estrutura – Diagramas de Pacotes [Parte 2]
Cap. 6.3 – UML - Modelação de Estrutura – Diagramas de Pacotes [Parte 2]
5
Pacotes
Solução: agrupar qualquer elemento de modelação UML (ex. Classes,
componentes,
6
Pacotes
interfaces,
etc.),
utilizando
critérios
lógicos,
em
unidades de mais alto nível, chamadas pacotes.
Os pacotes podem ser relacionados entre si, através de relações de
dependência.
Assim, criam-se os diagramas de pacotes - mostram os pacotes de
Interessante para projetos de grande dimensão, permitindo assim
manter a simplicidade dos diagramas ao possibilitar que cada diagrama
classes e as suas dependências.
Dependência - existe dependência entre dois elementos se, ao alterar-se a
definição de um dos elementos, isso levar a alterações no outro.
caiba numa página.
Permite-se o dividir da complexidade do sistema em partes mais
pequenas para uma melhor gestão.
Um pacote é representado graficamente como uma pasta, contendo
Com as classes, as dependências existem por várias razões:
Uma classe envia uma mensagem a outra;
uma classe tem outra como parte dos seus dados;
uma classe menciona outra como um parâmetro de uma operação.
Se uma classe altera a sua interface, então qualquer mensagem que enviar pode não
um nome.
ser mais válida.
Gestão de
Clientes
Gestão de
Encomendas
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.3 – UML - Modelação de Estrutura – Diagramas de Pacotes [Parte 2]
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.3 – UML - Modelação de Estrutura – Diagramas de Pacotes [Parte 2]
7
Hierarquias de Pacotes
8
Acesso aos Elementos
Cada um dos pacotes pode ser subdividido em mais pacotes e assim
sucessivamente, criando-se uma hierarquia de pacotes.
Não exagerar nos níveis de hierarquia, no máximo, 3.
Todos os elementos do sistema pertencem pelo menos a um pacote,
sendo o seu acesso público ou privado:
se público (representado graficamente com o prefixo +), os elementos estão
disponíveis nos outros pacotes;
se privado (representado
Gestão de Encomendas
Encomendas
Central
Divisão do pacote
Gestão de encomendas,
ilustrativa da hierarquia
de pacotes.
Encomendas
Balcão
graficamente com o prefixo -),
Encomendas
Telefone
só os elementos do próprio
pacote (incluindo subpacotes)
+ FormEncomenda
+ FormCatálogo
- Encomenda
é que lhe têm acesso.
Encomendas
Fax
Encomendas
Balcão
Os dois formulários são de acesso público
O elemento Encomenda é privado, sendo
apenas visível dentro do pacote.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.3 – UML - Modelação de Estrutura – Diagramas de Pacotes [Parte 2]
Cap. 6.3 – UML - Modelação de Estrutura – Diagramas de Pacotes [Parte 2]
9
Arte na Conceção
10
Exemplo
A arte na conceção será: minimizar as dependências - os efeitos das
alterações são reduzidos e é necessário menor esforço para realizar
Interface Utilizador p/
Recolha de Encomendas
Interface Utilizador p/
Recolha de Encomendas
Interface Utilizador p/
Mailing List
alterações (lembremo-nos do que foi dito no cap. 1, acerca da coesão e
Pacote
Dependência
acoplamento).
Idealmente só as alterações na interface da classe poderão afetar
Aplicação p/ Recolha
De Encomendas
Aplicação de
Mailing List
qualquer outra.
Os pacotes não oferecem respostas de como reduzir as dependências
no sistema, mas ajudam a ver o que são as dependências: só
Encomendas
poderemos trabalhar na redução das dependências se pudermos vê-las
facilmente.
Os diagramas de pacotes são uma ferramenta chave para manter sob
controlo a estrutura global dum sistema.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Cap. 6.3 – UML - Modelação de Estrutura – Diagramas de Pacotes [Parte 2]
11
Quando utilizar Diagramas de Pacotes
São uma ferramenta vital para grandes projetos.
Usar sempre que um diagrama de classe que mostre o sistema todo
não for legível numa folha A4.
Pretende-se manter as dependências ao mínimo, pois que isso diminui
o acoplamento.
Os pacotes são também particularmente úteis nos testes, devendo ter
uma ou mais classes de teste para testar o comportamento do pacote.
Engenharia de Software - 2011/2012
Carlos Barrico - Departamento Informática da UBI
Clientes
2. As dependências não são transitivas: se uma classe no pacote Encomendas for
alterada, isso não implica alterações no pacote Interface Utilizador p/ Recolha de
Encomendas, mas unicamente indica que o pacote de aplicação de Recolha de
Encomendas precisa de ser olhado para ver se necessita de alterações. Só se a
interface do pacote Aplicação p/ Recolha de encomendas for alterada, então implicará
alterações ao pacote de Interface de utilizador para recolha de encomendas.
Engenharia de Software - 2011/2012
3. A aplicação Recolha
de Encomendas isola a
Interface de Utilizador
para Recolha de
Encomendas de
alterações nas
Encomendas.
Comportamento
clássico de arquitetura
em camadas.
1. Existe uma
dependência entre dois
pacotes se existir
qualquer dependência
entre quaisquer duas
classes nos pacotes.
Ex. Se qualquer classe
no pacote Mailing List
for dependente de
qualquer classe no
pacote Clientes, então
há uma dependência
entre os dois pacotes.
Carlos Barrico - Departamento Informática da UBI
Download

UML - Modelação da Estrutura - Departamento de Informática da