Parte II
Modelos Estruturais
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Introdução

Questões
• Como representar modelos estruturais em notação UML?
• Qual a finalidade dos diagramas de classes UML?
• O que são diagramas de classes?
• Que elementos constituem os diagramas de classes?
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Diagramas de Classes:
Conceitos Básicos
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Sumário



Finalidade dos diagramas de classes
Objectos, classes, atributos e operações
Relações entre classes:
• Associação
-
Multiplicidade de associações binárias
Navegabilidade de associações
Classe-Associação
Associações n-árias
• Agregação
- Multiplicidade da agregação
- Hierarquias de objectos
• Generalização
- Hierarquias de classes
- Herança de propriedades
- Polimorfismo
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Finalidade dos Diag. de Classes

Um diagrama de classes serve para modelar o
vocabulário de um sistema, do ponto de vista do
utilizador/problema ou do implementador/solução
• Ponto de vista do utilizador/problema – na fase de captura e
análise de requisitos, em paralelo com a identificação dos casos
de uso
• Vocabulário do implementador/solução – na fase de projecto
(design)


Construído e refinado ao longo das várias fases do
desenvolvimento do software, por analistas,
projectistas (designers) e implementadores
Também serve para:
• Especificar colaborações
• Especificar esquemas lógicos de bases de dados
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Objectos do Mundo Real e
Objectos Computacionais




No desenvolvimento de software orientado por objectos, procurase imitar no computador o mundo real visto como um conjunto de
objectos que interagem entre si
Alguns objectos computacionais são imagens de objectos do
mundo real
Dependendo do contexto (análise ou projecto) podemos estar a
falar em objectos do mundo real, em objectos computacionais ou
nas duas coisas em simultâneo
Exemplos de objectos do mundo real:
• o Sr. João
• o carro com matrícula ES-00-01
• a aula de ES no dia 11/10/2000 às 11 horas

Exemplos de objectos computacionais:
• o registo que descreve o Sr. João (imagem de objecto do mundo real)
• uma árvore de pesquisa binária (objecto puramente computacional)
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Noção de Objecto

Um objecto é algo
• com fronteiras bem definidas
• relevante para o problema em causa
• com estado, comportamento e identidade
- estado: valores de atributos (tamanho, forma, peso, etc.) e ligações
com outros objectos
- identidade no espaço: é possível distinguir dois objectos mesmo que o
seu estado seja idêntico
- exemplo: podemos distinguir duas folhas de papel A4, mesmo que tenham
os mesmos valores dos atributos
- identidade no tempo: é possível saber que se trata do mesmo objecto
mesmo que o seu estado mude
- exemplo: se pintarmos um folha de papel A4 de amarelo, continua a ser a
mesma folha de papel
- comportamento: um objecto exibe comportamentos invocáveis (por
resposta a mensagens) ou reactivos (por resposta a eventos)
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Noção de Classe

Uma classe é um descritor de um conjunto de objectos que
partilham as mesmas propriedades (atributos, operações,
relações e semântica)
• Trata-se de uma noção de classe em compreensão, no sentido de tipo
de objecto, por oposição a uma noção de classe em extensão, como
conjunto de objectos do mesmo tipo

Um objecto de uma classe é uma instância da classe

A extensão de uma classe é o conjunto de instâncias da classe

Em Matemática, uma classe é um conjunto de “objectos” com
uma propriedade em comum, podendo ser definida em
compreensão ou em extensão
C = {x |N : x mod 3 = 2} = {2, 5, 8, 11, 14, ...}
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Noção de classe (cont.)


Em UML, é habitual escrever os nomes das classes no singular
(nome de uma instância da classe), com a primeira letra em
maiúscula
Exemplos de classes:
•
•
•
•

Coisas concretas: Pessoa, Turma, Carro, Imóvel, Factura, Livro
Papéis: Aluno, Professor, Piloto
Eventos: Curso, Aula, Acidente
Tipos de dados: Data, Intervalo de Tempo, Número Complexo, Vector
Para se precisar o significado pretendido para uma classe,
deve-se explicar o que é (e não é ...) uma instância da classe
• Exemplo: “Um aluno é uma pessoa que está inscrita num curso
ministrado numa escola. Uma pessoa que esteve no passado inscrita num
curso, mas não está presentemente inscrita em nenhum curso, não é um
aluno.”
• Em geral, o nome da classe não é suficiente para se compreender o
significado da classe
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Noção de classe (cont.)

O conjunto de todos os objectos num determinado
contexto/domínio/aplicação forma um universo
• numa fase de análise, é habitual falar em universo de discurso
(UoD - Universe of Discourse)

As classes (em extensão) são subconjuntos do UoD
UoD
Aluno
x João
x Maria
classe
objecto
Curso
x Informática
x Rui
Funcionário
x Electrotecnia
x Dª Rita
x Sr. Silva
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Representação de classes e objectos

Nos diagramas (de classes), uma classe é representada por
um rectângulo com o nome da classe
Aluno

Funcionário
Curso
Nos diagramas (de objectos), um objecto é representado
por um rectângulo com o nome sublinhado
João: Aluno
nome do separador
objecto
ou
nome da
classe
: Aluno
objecto
anónimo
João:
ou
classe não
especificada
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Noção de atributo


Um atributo é uma propriedade com nome de uma classe que descreve
uma gama de valores que as instâncias da propriedade podem tomar
Exemplos:
• atributos de Pessoa: nome, data de nascimento, peso, etc.
• atributos de Carro: matrícula, ano, peso, etc.

Um atributo de uma classe tem um valor (possivelmente diferente) em
cada instância (objecto) da classe
• Exemplo: João é uma pessoa com nome “João Silva”, data de nascimento
“18/3/1973” e peso “68 Kg”



Todos os objectos de uma classe são caracterizados pelos mesmos
atributos
Uma classe não pode ter dois atributos com o mesmo nome
Podem existir atributos com o mesmo nome em classes diferentes (ver
atributo peso definido nas classes Pessoa e Carro)


O valor de um atributo de um objecto pode mudar ao longo do tempo
O estado de um objecto num dado momento é dado (em parte) pelos
valores dos seus atributos (outra parte é dada pelas ligações que tem com outros
objectos)
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Representação de
atributos e valores



Atributos são listados num compartimento de atributos
(opcional) a seguir ao compartimento com o nome da classe
A seguir ao nome de um atributo pode indicar-se o tipo de dados
(ou classe) e o valor inicial por omissão
Os nomes dos tipos não estão pré-definidos em UML, podendo-se
usar os da linguagem de implementação alvo
classe
objecto
Pessoa
compartimento
de atributos
nome: string
data de nascimento: date
peso: real = 75 kg
João: Pessoa
nome = “João Silva”
data de nascimento =
18/3/1973
peso = 70 kg
valor inicial por omissão
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Noção de operação

“Uma operação é a implementação de um serviço que pode
ser solicitado a qualquer objecto da classe”
• Uma operação é algo que se pode (mandar) fazer a um objecto de
uma classe
• Uma operação é um serviço oferecido pelos objectos de uma classe


As operações são representadas num compartimento de
operações, a seguir ao compartimento de atributos
Para cada operação pode-se indicar o nome, lista de
argumentos e tipo de retorno
Pessoa
nome: string
morada: string
mudar-morada(nova-morada:string): bool
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Associações binárias
Participante-1





Nome da associação
papel-1
papel-2
Participante-2
Uma associação é uma relação estrutural (física ou lógica)
entre objectos das classes participantes (um objecto de
cada classe em cada ligação)
Não gera novos objectos
Matematicamente,uma associação binária é uma relação
binária, i.e., um subconjunto do produto cartesiano das
extensões das classes participantes
Assim como um objecto é uma instância duma classe, uma
ligação é uma instância duma associação
Pode haver mais do que uma associação (com nomes
diferentes) entre o mesmo par de classes
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Auto-associação

Pode-se associar uma classe com ela própria (em papéis
diferentes)
Paternidade
pai
0..1
Pessoa
* filho filho *
mãe
0..1
Maternidade
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Multiplicidade de
associações binárias

muitos-para-muitos

muitos-para-um

um-para-um
Partic. 1
* Partic. 2
x
x
x
Partic. 1

*
x
x
x
*
1
x
x
x
Notação:
Partic. 1
• * - zero ou mais
x
x
x
1
x
x
x
• 1 - exactamente um
• 0..1 - zero ou um
Partic. 2
1
Partic. 2
x
x
x
• 1..* - um ou mais
• 1, 3..5 - um ou três a 5
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Navegabilidade de associações
As associações são classificadas quanto à navegabilidade
em:
Class-1
Class-2
bidirecionais
(normal)
Class-1
unidirecionais
Class-2
um objecto da classe 1 tem a responsabilidade de dar o(s)
objecto(s) correspondente(s) da classe 2 (nível de especificação)
ou
um objecto da classe 1 tem apontador(es) para o(s) objecto(s)
correspondente(s) da classe 2 (nível de implementação)
Pode-se indicar o sentido em que se lê o nome duma
associação
Trabalha-para
Empresa
empregador
Emprega
empregado
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Pessoa
‹#›
Classe-Associação
Class-1
Association Name
Class-2
Association Name
link attribute
...
link operation
...




reúne as propriedades de associação e classe
o nome pode ser colocado num sítio ou noutro, conforme
interessa realçar a natureza de associação ou de classe, mas a
semântica é a mesma
o nome também pode ser colocado nos dois sítios
não é possível repetir combinações de objectos das classes
participantes na associação
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Associações n-árias

Notação
Association Name
Class-1
role-1
role-2
Class-2
role-3
Class-3

Multiplicidade
Class-2
Class-1
0..1
Class-3
a cada par de objectos das restantes classes (1 e 2), correspondem 0 ou 1
objectos da classe 3
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Atributos versus Associações


Uma propriedade que designa um objecto de uma classe
presente no modelo, deve ser modelada como uma
associação e não como um atributo
Exemplo:
• o país Canadá é um objecto cujo atributo nome tem o valor "Canadá"
(cadeia de caracteres)
• a capital do Canadá é um objecto cidade e não deve ser modelada
como um atributo, mas antes como uma associação entre um objecto
país e um objecto cidade, cujo nome é a cadeia "Otawa"
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Agregação
• Relação semântica “part of”
• Traduz a criação de objectos mais
complexos a partir de objectos mais simples
• Pode-se ver como uma associação com
nomes pré-definidos (contém / faz parte
de)
Texto
1
*
Parágrafo
1
*
Palavra
Classe de agregados
Classe de componentes
• Um texto contém 0 ou mais parágrafos
• Um parágrafo faz parte de um texto
• Um parágrafo contém 0 ou mais palavras
• Uma palavra faz parte de um parágrafo
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Multiplicidade da agregação
•As partes (componentes) podem ser
• partilhadas
• dependentes
• repetidas
• obrigatórias
..*
1..
..*
1..
ou exclusivas
ou independentes
ou únicas
ou opcionais
..1
0..
..1
0..
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Generalização
Super-classe
Pessoa
especialização
generalização
Aluno
Sub-classe
• Relação semântica “is a” (“é um” / “é uma”) : um aluno é uma
pessoa
• Relação de inclusão nas extensões das classes:
UoD
super-classe
x
sub-classe
extensão (sub-classe)
x
x
x
x
objecto
extensão (super-classe)
• Relação de herança nas propriedades: A sub-classe herda as
propriedades (atributos, operações e relações) da super-classe, podendo
acrescentar outras
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Exemplo em C++
class Pessoa {
private:
string nome;
Data dataNascimento;
public:
Pessoa(string, Data);
string getNome() const;
Data getDataNascimento() const;
int getIdade() const;
void setNome(string);
void setDataNascimento(Data);
void imprime() const;
};
class Aluno : public Pessoa {
private:
string curso;
public:
Aluno(string nm, Data, string crs);
string getCurso() const;
void setCurso(string);
void imprime() const;
};
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Hierarquias de classes

Em geral, pode-se
ter uma
hierarquia de
classes
relacionadas por
herança /
generalização
• em cada classe da
hierarquia
colocam-se as
propriedades que
são comuns a
todas as suas
subclasses
 evita-se
redundância,
promove-se
reutilização!
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Notações Alternativas para
Hierarquias de classes
Pessoa
Aluno
Professor
Pessoa
Aluno
Professor
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Polimorfismo




Numa sub-classe podem-se redefinir operações da
super-classe
Polimorfismo: uma operação de uma classe
comporta-se de forma diferente consoante a subclasse do objecto a que a operação é aplicada
Caso da operação imprime() no exemplo anterior
Em UML, quando se repete (a assinatura) de uma
operação numa sub-classe, quer-se dizer que a
operação tem uma implementação diferente (a
implementação não é herdada)
• chama-se método à implementação da operação
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Diagramas de Classes:
Conceitos Avançados
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Sumário

Aspectos da generalização:
• Subclasses sobrepostas
• Subclasses incompletas
• Herança múltipla

Restrições

Elementos derivados

Relações avançadas:
•
•
•
•
• Classificação dinâmica




Classes e operações abstractas
Atributos e operações do
âmbito da classe
Visibilidade de atributos e
operações
Multiplicidade de classes e
atributos

associação qualificada
composição
dependência
concretização ("realization")
Classes avançadas:
•
•
•
•
•
classe parametrizada ("template")
metaclasse
utilitário
tipo
interface
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Subclasses sobrepostas ( disjuntas)

caso em que um objecto da superclasse pode
pertencer simultaneamente a mais do que uma
subclasse

indicado por restrição {overlapping}

o contrário é {disjoint} (situação por omissão?)
ou
Superclass
Superclass
{overlapping}
{overlapping}
Subclass-1
Subclass-2
Subclass-1
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Subclass-2
‹#›
Subclasses incompletas (completas)

caso em que um objecto da superclasse pode não
pertencer a nenhuma das subclasses

indicado por restrição {incomplete}

o contrário é {complete} (situação por omissão?)
Funcionário
{incomplete}
Técnico
Comercial
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Herança múltipla (simples)

ocorre numa subclasse com múltiplas superclasses

geralmente suportada por linguagens de programação OO
Académico
pelo menos
conceptualmente, existe uma
superclasse comum
nome
e-mail
{overlapping}
Estudante
Professor
curso
categoria
Professor-Estudante
redução de horário
Só faz sentido assim!
herda propriedades de
Estudante e Professor e,
indirectamente, de
Académico (uma única vez!)
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Classificação múltipla (simples)

caso em que um objecto pode pertencer num dado momento
a várias classes, sem que exista uma subclasse que represente
a intersecção dessas classes (com herança múltipla)
Médico
Homem
Mulher
sexo
{complete}
Pessoa
função
paciente
Enfermeira
Fisioterapeuta
Paciente
• combinações legais: {Mulher, Paciente, Enfermeira}, {Homem,
Fisioterapeuta}, ...
• Geralmente não suportado pelas LPOO
• Pode ser simulada por agregação de papéis
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Classificação dinâmica (estática)

caso em que a(s) classe(s) a que um objecto pertence pode(m)
variar ao longo da vida do objecto

indicado por estereótipo «dynamic»

geralmente não suportado por LPOO
atributo discriminante (atributo de
pessoa que indica a subclasse a que
pertence)
Gestor
Pessoa
tarefa
«dynamic»
Engenheiro
Vendedor
Uma pessoa que num dado momento tem a tarefa de gestor, pode
noutro momento ter a tarefa de vendedor, etc.
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Classes e operações abstractas
(concretas)

Icon
Classe abstracta: classe que
não pode ter instâncias
directas
origin: Point
display()
getID(): Integer
• pode ter instâncias indirectas
pelas subclasses concretas

Operação abstracta: operação
com implementação a definir RectangularIcon
nas subclasses
height: Integer
width: Integer
• uma classe com operações
abstractas tem de ser abstracta
ArbitraryIcon
edge:LineCollection
display()
isInside(p:Point):Bool
• função virtual pura em C++

Notação : nome em itálico ou
propriedade {abstract}
Button
display()
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Fonte: The UML User
Guide, Booch et al
‹#›
Atributos e operações do âmbito da classe
(instância)




Atributo do âmbito da classe:
tem um único valor para todas
as instâncias (objectos) da
classe, o qual está definido
mesmo que não exista
nenhuma instância
número: Long
data: Date
valor: Real
últimoNumero: Long = 0
Operação do âmbito da classe:
não tem como argumento
implícito um objecto da classe
criar(data:Date,valor:Real)
destruir()
valorTotal(): Real
Notação: nome sublinhado
Correspondem a membros
estáticos (static) em C++ e
Java
Factura
retorna a soma dos valores
de todas as facturas
cria uma nova factura com a data e
valor especificados, e um número
sequencial atribuído automaticamente
com base em ultimoNumero
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Visibilidade de atributos e operações

Toolbar
Visibilidade:
+ (public) : visível por todos
- (private) : visível só por
operações da própria classe
# (protected): visível por
operações da própria classe e
descendentes (subclasses)


Devem-se esconder todos os
detalhes de implementação
que não interessam aos
clientes (utilizadores) da
classe
# currentSelection: Tool
# toolCount: Integer
+ getTool(i: Integer): Tool
+ addTool(t: Tool)
+ removeTool(i: Integer)
- compact()
usada
internamente por
outras operações
Também aplicável aos papéis
nos extremos duma associação
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Multiplicidade de classes e atributos

Multiplicidade de classe:
número de instâncias que
podem existir
• por omissão, é 0..*

NetworkController 1
consolePort [2..*]: Port
Multiplicidade de atributo:
número de valores que o
atributo pode tomar do tipo
especificado
• por omissão é 1
• qual a diferença em relação a
especificar a multiplicidade no
próprio tipo de dados do
atributo?
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Restrições


Uma restrição especifica uma condição que tem de se
verificar
Uma restrição é indicada por uma expressão ou texto
entre chavetas ou por uma nota posicionada junto aos
elementos a que diz respeito, ou a eles ligada por
linhas a traço interrompido (sem setas, para não confundir
com relação de dependência)

OCL - "Object Constraint Language" - pode ser usada
para especificar restrições mais formalmente
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Restrições em classes
Pessoa
nome
dataNascimento
localNascimento
dataFalecimento
{chave candidata: (nome, dataNascimento, localNascimento)}
{dataFalecimento > dataNascimento}
LinhaFactura
Factura
número
data
1
*
{chave candidata: (número)}
número
artigo
quantidade
valor
{chave candidata: (factura.número, número)}
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Restrições em associações
Factura
Pessoa
*
1
{ordered}
1
*
Membro-de
{subset}
Director-de
LinhaFactura
*
*
uma factura é
constituída por um
conjunto ordenado
de 0 ou mais linhas
Comité
Pessoa
Conta
{xor}
Empresa
empregado
Pessoa
*
chefe 0..1
* trabalhador
empregador
1
associações
mutuamente
exclusivas
Empresa
Pessoa.empregador =
Pessoa.chefe.empregador
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Elementos derivados



Elemento derivado (atributo, associação ou
classe): elemento calculado em função doutros
elementos do modelo
Notação: barra “/” antes do nome do elemento
derivado
Um elemento derivado tem normalmente
associada uma restrição que o relaciona com os
outros elementos
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Exemplo de elementos derivados
1
Empresa
1 empregador
*
Departamento
1
TrabalhaEmDepartamento
*
/TrabalhaEmEmpresa
{Pessoa.empregador =Pessoa.departamento.empresa}
*
Pessoa
dataNascimento
/idade
{idade = dataActual() - dataNascimento}
Movimento
data
valor
/ TotalMensal
mês
valor
{valor = (select sum(valor) from Movimento
where month(data) = mês)}
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Associação qualificada
Associação
Classe A


Classe B
qualificador
Qualificador: lista de um ou mais atributos de uma
associação cujos valores partem o conjunto de objectos
associados a um objecto do lado do qualificador no outro
extremo da associação em sub-conjuntos disjuntos
Serve para navegar ("lookup") de A para B
um ficheiro pode aparecer em muitos directórios
(mas só pode aparecer uma vez em cada
directório, por definição de associação binária)
Directório
nomeFicheiro
*
para cada par
Directório + nomeFicheiro
0..1
Ficheiro
i-node
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
identificador
interno
em UNIX
‹#›
Relação de composição

Forma mais forte de agregação aplicável quando:
• existe um forte grau de pertença das partes ao todo
• cada parte só pode fazer parte de um todo (i.e., a
multiplicidade do lado do todo não excede 1)
• o topo e as partes têm tempo de vida coincidente, ou, pelo
menos, as partes nascem e morrem dentro de um todo
• a eliminação do todo propaga-se para as partes, em cascata

O todo é chamado um “compósito”

Notação: losango cheio

Membros-objecto em C++
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Notações alternativas para a
composição
Window
1
scrollbar
2
Slider
1
1
title 1
Header
body
Window
Window
scrollbar: Slider
title: Header
body: Panel
1
Panel
2
1
scrollbar[2]: Slider
title: Header
body: Panel
1
(sub-objectos no compartimento dos atributos)
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Relação de dependência
elemento que depende
(usa)



elemento de que se depende
(usado)
Relação de uso entre dois elementos (não
necessariamente classes), em que uma mudança
na especificação do elemento usado pode afectar
o elemento utilizador
Exemplo típico: classe-1 que depende de outra
classe-2 porque usa operações ou definições da
classe-2
Estereótipos comuns:
• «bind» - com "templates"
• «derive» - com elementos derivados (dependentes)
• etc.
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Relação de concretização
("realization")
Classe B



Classs A
Relação semântica entre classes, em que uma classe
(A) especifica um contrato que outra classe (B)
assegura
Aplicável em geral entre classificadores (classes,
casos de uso, componentes, etc.)
Normalmente usada para relacionar um interface (A)
com uma classe ou componente (B) que proporciona as
operações ou serviços especificados no interface
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Classes parametrizadas (templates)
classe parametrizada
FArray
parâmetros
actuais
T
k: Integer
parâmetros formais
diferente da generalização,
porque não se podem
acrescentar propriedades!
data [k] : T
«bind» (Point,3)
ThreePoints
ou
Farray<Point,3>
classe ligada ("bound")

C++:
template <class T, int k>
class FArray {
public: T[k] data;
};
typedef Farray<Point,3> ThreePoints;
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Metaclasses

Uma metaclasse é uma classe cujas instâncias
são classes

Notação: classe com estereótipo «metaclass»

Usadas geralmente em meta-modelos

Relação de instanciação (entre classe e
metaclasse, objecto e classe, etc,) pode ser
indicada por dependência com estereótipo
«instanceOf» «metaclass»
Class-1
SYSCLASSES
name
«instanceOf»
«instanceOf»
object-1: Class-1
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Utilitários


Um utilitário é um agrupamento de variáveis
globais e procedimentos como classe
Notação: classe com estereótipo «utility»
«utility»
MathPack
pi: Real
sin(ang: Real): Real
cos(ang: Real): Real
atributos e operações deviam estar sublinhados?
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Tipos ( classes de implementação)


Classes podem dividir-se em tipos e classes de
implementação
Um tipo é usado para especificar um domínio de objectos em
conjunto com as operações aplicáveis a esses objectos, sem
especificar a implementação física desses objectos
• não pode incluir métodos (implementação de operações)
• pode incluir atributos e associações (abstractos?), mas apenas com o
objectivo de especificar o comportamento das operações, sem
compromisso de implementação
• notação: classe com estereótipo «type»

Uma classe de implementação define a estrutura física de
dados (para atributos e associações) e métodos de um
objecto tal como é implementado numa linguagem
tradicional
• notação: classe normal ou classe com estereótipo
«implementationClass»
• diz-se que uma classe de implementação concretiza ("realizes") um tipo
se proporciona todas as operações definidos no tipo, com o mesmo
comportamento especificado
no tipo
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Exemplo com tipos e classes de
implementação maxSize:Integer
«type»
FinitePriorityQueue
«type»
PriorityQueue
T
insert(x:T, priority:Integer)
deleteMax():T
isEmpty():Boolean
isFull():Boolean
T
maxSize:Integer
«implementationClass»
HeapFinitePriorityQueue
- elems [0..maxSize]: T
- size: Integer = 0
+ insert(x: T, priority: Integer)
+ deleteMax():T
+ isEmpty(): Boolean
+ isFull(): Boolean
- HeapifyUp
- HeapifyDown
«bind» (Paciente, 100)
«implementationClass»
HeapFilaPacientes
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Interfaces

Um interface especifica um conjunto de operações
externamente visíveis de uma classe (ou componente,
subsistema, etc.)
• semelhante a um tipo sem atributos nem associações
• semelhante a uma classe abstracta só com operações abstractas e
sem atributos nem associações


Uma classe de implementação pode ter vários interfaces
Vantagem em separar interface de implementação: os
clientes de uma classe podem ficar a depender apenas da
classe de interface em vez da classe de implementação

Notação: classe com estereótipo «interface» (ligada por
relação de concretização à classe de implementação) ou
círculo (ligado por linha simples à classe de
implementação)
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Notações alternativas para interfaces
Notação: classe com estereótipo «interface» (ligada por relação de
concretização à classe de implementação) ou círculo (ligado por linha
simples à classe de implementação)
ClientClass
ClientClass
InterfaceClass
ou
ImplementationClass
attributes
operations
«interface»
InterfaceClass
operations
ImplementationClass
attributes
operations
Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
‹#›
Download

Modelo de classes UML