parte ii modelos estruturais

56
1 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000 Parte II Modelos Estruturais

Upload: ronny

Post on 12-Jan-2016

27 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Parte II Modelos Estruturais

1 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000

Parte IIModelos Estruturais

Page 2: Parte II Modelos 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?

Page 3: Parte II Modelos Estruturais

3 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000

Diagramas de Classes: Conceitos Básicos

Page 4: Parte II Modelos Estruturais

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

Page 5: Parte II Modelos Estruturais

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

Page 6: Parte II Modelos Estruturais

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)

Page 7: Parte II Modelos Estruturais

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)

Page 8: Parte II Modelos Estruturais

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, ...}

Page 9: Parte II Modelos Estruturais

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

Page 10: Parte II Modelos Estruturais

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

Page 11: Parte II Modelos Estruturais

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

Page 12: Parte II Modelos Estruturais

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)

Page 13: Parte II Modelos Estruturais

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

Page 14: Parte II Modelos Estruturais

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

Page 15: Parte II Modelos Estruturais

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

Page 16: Parte II Modelos Estruturais

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

Page 17: Parte II Modelos Estruturais

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

Page 18: Parte II Modelos Estruturais

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

Page 19: Parte II Modelos Estruturais

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

Page 20: Parte II Modelos Estruturais

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

Page 21: Parte II Modelos Estruturais

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"

Page 22: Parte II Modelos Estruturais

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

Page 23: Parte II Modelos Estruturais

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..

Page 24: Parte II Modelos Estruturais

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

Page 25: Parte II Modelos Estruturais

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

Page 26: Parte II Modelos Estruturais

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!

Page 27: Parte II Modelos Estruturais

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

Page 28: Parte II Modelos Estruturais

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

Page 29: Parte II Modelos Estruturais

29 Curso de UML, 20 de Novembro a 19 de Dezembro de 2000

Diagramas de Classes: Conceitos Avançados

Page 30: Parte II Modelos Estruturais

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

Page 31: Parte II Modelos Estruturais

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

Page 32: Parte II Modelos Estruturais

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}

Page 33: Parte II Modelos Estruturais

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

e-mail

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!)

Page 34: Parte II Modelos Estruturais

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}

Page 35: Parte II Modelos Estruturais

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.

Page 36: Parte II Modelos Estruturais

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

Page 37: Parte II Modelos Estruturais

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

Page 38: Parte II Modelos Estruturais

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

Page 39: Parte II Modelos Estruturais

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

Page 40: Parte II Modelos Estruturais

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

Page 41: Parte II Modelos Estruturais

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)}

Page 42: Parte II Modelos Estruturais

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

Page 43: Parte II Modelos Estruturais

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

Page 44: Parte II Modelos Estruturais

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}

Page 45: Parte II Modelos Estruturais

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)

Page 46: Parte II Modelos Estruturais

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++

Page 47: Parte II Modelos Estruturais

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

Page 48: Parte II Modelos Estruturais

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)

Page 49: Parte II Modelos Estruturais

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

Page 50: Parte II Modelos Estruturais

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")

Page 51: Parte II Modelos Estruturais

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

Page 52: Parte II Modelos Estruturais

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?

Page 53: Parte II Modelos Estruturais

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

Page 54: Parte II Modelos Estruturais

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)

Page 55: Parte II Modelos Estruturais

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)

Page 56: Parte II Modelos Estruturais

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