parte ii modelos estruturais
DESCRIPTION
Parte II Modelos Estruturais. 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?. Diagramas de Classes: Conceitos Básicos. Sumário. - PowerPoint PPT PresentationTRANSCRIPT
1 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Parte IIModelos Estruturais
2 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?
3 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Diagramas de Classes: Conceitos Básicos
4 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
5 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
6 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,
procura-se 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)
7 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)
8 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, ...}
9 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
10 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 UoDUoD
x João
x Rui
x Maria
AlunoCurso
x Electrotecnia
x Informática
objecto x Dª Rita
x Sr. Silva
Funcionário
classe
11 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Nos diagramas (de classes), uma classe é representada por um rectângulo com o nome da classe
Nos diagramas (de objectos), um objecto é representado por um rectângulo com o nome sublinhado
Representação de classes e objectos
Aluno Funcionário Curso
João: Aluno
nome do objecto
separador
nome da classe
ou : Aluno
objecto anónimo
ou João:
classe não especificada
12 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)
13 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
compartimento de atributos
Pessoa
nome: stringdata de nascimento: datepeso: real = 75 kg
valor inicial por omissão
João: Pessoa
nome = “João Silva”data de nascimento = 18/3/1973peso = 70 kg
classe objecto
14 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: stringmorada: string
mudar-morada(nova-morada:string): bool
15 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Associações bináriasParticipante-1 Participante-2Nome da associação
papel-1 papel-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
16 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)
PessoaPaternidade
pai
filho0..1
* filho
mãe0..1
*Maternidade
17 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Multiplicidade de associações binárias
xxx
xxx
Partic. 1 Partic. 2* *
xxx
xxx
Partic. 1 Partic. 2* 1
xxx
xxx
Partic. 1 Partic. 21 1
muitos-para-muitos
muitos-para-um
um-para-um
Notação:• * - zero ou mais
• 1 - exactamente um
• 0..1 - zero ou um
• 1..* - um ou mais
• 1, 3..5 - um ou três a 5
18 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Navegabilidade de associaçõesAs associações são classificadas quanto à navegabilidade em:
bidirecionais(normal)unidirecionais
um objecto da classe 1 tem a responsabilidade de dar o(s) objecto(s) correspondente(s) da classe 2 (nível de especificação) ouum 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
Class-1 Class-2
Class-1 Class-2
Empresa PessoaTrabalha-paraEmpregaempregado
rempregado
19 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Classe-Associação
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
Class-1 Class-2
Association Name
link attribute...
link operation...
Association Name
20 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Associações n-árias Notação
Multiplicidade
a cada par de objectos das restantes classes (1 e 2), correspondem 0 ou 1 objectos da classe 3
Class-1 Class-2
Association Name
role-1 role-2
Class-3role-3
Class-1 Class-2
Class-30..1
21 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"
22 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)
Classe de agregados
Classe de componentes
Texto
Parágrafo*1
Palavra*1
• 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
23 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Multiplicidade da agregação
•As partes (componentes) podem ser
• partilhadas ou exclusivas
• dependentes ou independentes
• repetidas ou únicas
• obrigatórias ou opcionais
..* ..1
1.. 0..
..* ..1
1.. 0..
24 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Generalização
• Relação semântica “is a” (“é um” / “é uma”) : um aluno é uma pessoa• Relação de inclusão nas extensões das classes:
UoDsuper-classe
sub-classe x xx
xx
objecto
extensão (sub-classe) extensão (super-classe)
Super-classe
Sub-classe
generalização
especialização
Pessoa
Aluno
• 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
25 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;};
Pessoanome : stringdataNascimento : Data
Pessoa(string, Data)getNome() : stringgetDataNascimento() : DatagetIdade() : intsetNome(string) : voidsetDataNascimento(Data) : voidimprime() : void
Alunocurso : string
Aluno(string nm, Data, string crs)getCurso() : stringsetCurso(string) : voidimprime() : void
26 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Pessoanome : stringdataNascimento : Data
Pessoa(string, Data)getNome() : stringgetDataNascimento() : DatagetIdade() : intsetNome(string) : voidsetDataNascimento(Data) : voidimprime() : void
Alunocurso : string
Aluno(string nm, Data, string crs)getCurso() : stringsetCurso(string) : voidimprime() : void
Professorcategoria : string
Professor(string nm, Data, string ctg)getCategoria() : stringsetCategoria(string) : voidimprime() : void
AlunoDoutoramento
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!
27 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Notações Alternativas para Hierarquias de classes
Aluno Professor
Pessoa
Aluno Professor
Pessoa
28 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 sub-classe 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
29 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Diagramas de Classes: Conceitos Avançados
30 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
• 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
Restrições
Elementos derivados
Relações avançadas:• associação qualificada• composição• dependência• concretização ("realization")
Classes avançadas:• classe parametrizada
("template")• metaclasse• utilitário• tipo• interface
31 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?)
{overlapping}
Superclass
Subclass-1
Subclass-2
{overlapping}
ou Superclass
Subclass-1
Subclass-2
32 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
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?)
Técnico Comercial
Funcionário
{incomplete}
33 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
Estudante
Professorcurso categori
a
Académiconome
Professor-Estudanteredução de horário
{overlapping}
Só faz sentido assim!
pelo menos conceptualmente, existe uma superclasse comum
herda propriedades de Estudante e Professor e, indirectamente, de Académico (uma única vez!)
34 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
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)
Classificação múltipla (simples)
• combinações legais: {Mulher, Paciente, Enfermeira}, {Homem, Fisioterapeuta}, ...
• Geralmente não suportado pelas LPOO• Pode ser simulada por agregação de papéis
Homem
MulherPessoa sexo
Paciente
paciente
funçãoMédico
Enfermeira
Fisioterapeuta
{complete}
35 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
Pessoatarefa
Gestor
Engenheiro
Vendedor
«dynamic»
atributo discriminante (atributo de pessoa que indica a subclasse a que pertence)
Uma pessoa que num dado momento tem a tarefa de gestor, pode noutro momento ter a tarefa de vendedor, etc.
36 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Classes e operações abstractas (concretas) Classe abstracta: classe que
não pode ter instâncias directas
• pode ter instâncias indirectas pelas subclasses concretas
Operação abstracta: operação com implementação a definir nas subclasses
• uma classe com operações abstractas tem de ser abstracta
• função virtual pura em C++
Notação : nome em itálico ou propriedade {abstract}
Icon
RectangularIcon
ArbitraryIcon
origin: Point
display()getID(): Integer
height: Integerwidth: Integer
edge:LineCollectiondisplay()isInside(p:Point):Bool
Button
display()
Fonte: The UML User Guide, Booch et al
37 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
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
Operação do âmbito da classe: não tem como argumento implícito um objecto da classe
Notação: nome sublinhado
Correspondem a membros estáticos (static) em C++ e Java
Factura
número: Longdata: Datevalor: RealúltimoNumero: Long = 0
criar(data:Date,valor:Real)destruir()valorTotal(): Real
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
38 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Visibilidade de atributos e operações
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
Também aplicável aos papéis nos extremos duma associação
Toolbar
# currentSelection: Tool# toolCount: Integer
+ getTool(i: Integer): Tool+ addTool(t: Tool)+ removeTool(i: Integer)- compact()
usada internamente por outras operações
39 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..*
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?
NetworkController
consolePort [2..*]: Port
1
40 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
41 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Restrições em classesPessoa
nomedataNascimentolocalNascimentodataFalecimento
{chave candidata: (nome, dataNascimento, localNascimento)}{dataFalecimento > dataNascimento}
Factura LinhaFactura*1número
datanúmeroartigoquantidadevalor
{chave candidata: (factura.número, número)}
{chave candidata: (número)}
42 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Restrições em associações
Pessoa Empresachefe
1*empregado empregador
trabalhador
0..1 *Pessoa.empregador = Pessoa.chefe.empregador
Pessoa Comité
Membro-de
Director-de
*
*
*
1 {subset}
Factura LinhaFactura*
{ordered}1
uma factura é constituída por um conjunto ordenado de 0 ou mais linhas
Conta
Pessoa
{xor}
Empresa
associações mutuamente exclusivas
43 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
44 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Exemplo de elementos derivados
Movimento
datavalor
/ TotalMensal
mêsvalor
{valor = (select sum(valor) from Movimento where month(data) = mês)}
Empresa 1Departament
o
*Pessoa
TrabalhaEmDepartamento
1
/TrabalhaEmEmpresa
empregador
1
*
{Pessoa.empregador =Pessoa.departamento.empresa}
*
dataNascimento/idade
{idade = dataActual() - dataNascimento}
45 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Associação qualificada
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
qualificador
Classe A Classe B
0..1nomeFicheir
oDirectório Ficheiro*
para cada par Directório + nomeFicheiro
Associação
i-node
identificador internoem UNIX
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)
46 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
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++
47 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Window
Notações alternativas para a composição
Window
Slider Header Panel
scrollbar 2
1
title1
1 1
1body
scrollbar: Slider 2
title: Header 1
body: Panel 1
(sub-objectos no compartimento dos atributos)
Window
scrollbar[2]: Slidertitle: Headerbody: Panel
48 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Relação de dependência
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.
elemento de que se depende(usado)
elemento que depende (usa)
49 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Relação de concretização ("realization")
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
Classs AClasse B
50 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Classes parametrizadas (templates)
FArray
Tk: Integer
parâmetros formais
data [k] : T
ThreePoints
«bind» (Point,3)
classe parametrizada
parâmetros actuais
Farray<Point,3>ou
template <class T, int k> class FArray {
public: T[k] data; };
typedef Farray<Point,3> ThreePoints;
C++:
diferente da generalização, porque não se podem acrescentar propriedades!
classe ligada ("bound")
51 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»
«instanceOf»
«metaclass» SYSCLASSES
name
Class-1«instanceOf»
object-1: Class-1
52 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): Realcos(ang: Real): Real
atributos e operações deviam estar sublinhados?
53 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
54 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Exemplo com tipos e classes de implementação
«type»FinitePriorityQueue
isFull():Boolean
maxSize:Integer «type»
PriorityQueue
insert(x:T, priority:Integer)deleteMax():TisEmpty():Boolean
T
«implementationClass» HeapFinitePriorityQueu
e
+ insert(x: T, priority: Integer)+ deleteMax():T+ isEmpty(): Boolean+ isFull(): Boolean- HeapifyUp- HeapifyDown
TmaxSize:Integer
- elems [0..maxSize]: T- size: Integer = 0
«implementationClass» HeapFilaPacientes
«bind» (Paciente, 100)
55 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)
56 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000
Notações alternativas para interfaces
«interface»InterfaceClass
ImplementationClass
ImplementationClass
InterfaceClassoperations
ClientClass
attributes
operations
attributes
operations
ou
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