Generalização Associação Agregação UML Relações entre Classes · Classes e operações...

32
12/03/16 UML Relações entre Classes Generalização Associação Agregação Composição Dependência Prof.Dr. Enzo Seraphim

Transcript of Generalização Associação Agregação UML Relações entre Classes · Classes e operações...

12/03/16

UML Relações entre Classes

Generalização

Associação

Agregação

Composição

Dependência Prof.Dr. Enzo Seraphim

12/03/16

UML Relações entre Classes

Generalização

Associação

Agregação

Composição

Dependência Prof.Dr. Enzo Seraphim

Generalização

Pessoa

Aluno

generalização especialização

super-classe

sub-classe

Relação semântica “is a” (“é um” / “é uma”) – um aluno é uma pessoa

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

As três facetas da generalização Substitutabilidade

– onde se espera um objeto da super­classe pode­se passar um objeto duma subclasse

Herança de interface– a subclasse herda as assinaturas (e significados) das 

operações da super­classe Herança ou overriding de implementação

– a subclasse pode herdar as implementações das operações da super­classe, mas também pode ter novas implementações de algumas dessas operações

– quando em UML se repete numa subclasse a assinatura de uma operação da super­classe, quer dizer que tem uma nova implementação na subclasse

Hierarquias de classes Na super classe da hierarquia colocam­se as 

propriedades que são comuns a todas as suas subclasses 

Evita­se redundância, promove­se reutilização!

centroX: intcentroY: int

Triangulo Quadrado

Poligono

base: intaltura : int

lado: int

centroX: intcentroY: int

Triangulo Quadrado

Poligono

base: intaltura : int

lado: int

Subclasses disjunção / sobreposição

Disjunção  quando um objeto da superclasse só pode pertencer a uma subclasse (situação por omissão)

Sobreposição  quando um objeto da superclasse  pode pertencer simultaneamente a mais do que uma subclasse

Funcionario

Mensal Diarista

disjunção

Conta

Corrente Poupanca

sobreposição

sobreposição

Subclasses completas / incompletas

Completa  quando um objeto pertence a uma superclasse ou a uma subclasses (situação por omissão)

Incompleta  quando um objeto da superclasse não pode pertencer a nenhuma das subclasses

Pessoa

Estudante Professor

completa

Automovel

Passeio Utilitario

incompleta

incompleta

Classes e operações abstratas / concretas Classe abstrata  classe que não pode ter instâncias 

diretas. As instâncias somente pelas subclasses concretas

Operação abstrata  operação com implementação a definir nas subclasses. Uma classe com operações abstratas tem de ser abstrata

Notação : estereótipo<<abstract>> centroX: int

centroY: int

Triangulo Quadrado

<<abstract>>Poligono

base: intaltura : int

lado: int

area() : double

area() : doublearea() : double

Herança simples / múltipla

Herança Simples  quando uma subclasse possui apenas uma super­classe

Herança Múltipla  quando uma subclasse possui mais de uma super­classe

AlunoFuncionario

Aluno Funcionario

Múltipla

Pessoa

Estudante Professor

Simples

Classificação simples / múltipla

Classificação Simples  quando um objeto em qualquer momento pertence a somente uma classe.

Classificação Múltipla  quando um objeto em um dado momento pertence a várias classes, sem que exista uma subclasse que represente a intersecção dessas classes. Não suportado pelas linguagens de programação OO, mas pode então ser simulada por agregação.

exemplo de combinação : {Mulher, Paciente, Enfermeira}

Homem

MulherPessoa sexo

Paciente

paciente

funçãoMedico

Enfermeira

Fisioterapeuta

12/03/16

UML Relações entre Classes

Generalização

Associação

Agregação

Composição

Dependência Prof.Dr. Enzo Seraphim

Associações binárias

Uma associação é uma relação entre objetos das classes participantes (um objeto de cada classe em cada ligação)

Essa ligação é uma instância de uma associação Implementado através de uma referência entre os 

objetos relacionados Pode haver mais do que uma associação (com 

nomes diferentes) entre o mesmo par de classes Papéis nos extremos da associação podem ter 

indicação de visibilidade (pública, privada, etc.)

Participante-1 Participante-2

Nome da associação

papel-1 papel-2cardinal-1 cardinal-2

Nome de associação

A indicação do nome é opcional O nome é indicado no meio da linha que une as classes 

participantes Pode­se indicar o sentido em que se lê o nome da 

associação

Empresa PessoaTrabalha-para

Empregaempregador empregado

Pessoa Carropessoa carros

1 *comprado

compra

Multiplicidade de associações binárias

Muitos-para-Muitos 1-para-1Muitos-para-1

Professor Curso Aluno Curso Aluno Historico* 1 11**

1   ­ exatamente um0..1   ­ zero ou um (zero a 1)*   ­ zero ou mais0..*   ­ zero ou mais1..*   ­ um ou mais1, 3..5 ­ um ou três a 5

Acesso a Multiplicidade 

Departamento

nome: stringsigla: string

1 *funcionariosdepartamento

getNome(): stringsetNome(v:string): voidgetSigla(): stringsetSigla(v:string): voidgetFuncionarios():List<Funcionario>setFuncionarios(l:List<Funcionario>)

Funcionario

nome: stringrg: stringgetNome(): stringsetNome(v:string): voidgetRg(): stringsetRg(v:string): voidgetDepartamento():DepartamentosetDepartamento(v:Departamento):void

Atributos versus Associações Uma propriedade que designa um objeto de uma classe 

presente no modelo, deve ser modelada como uma associação e não como um atributo

Exemplo:

Aluno Curso

nome: string

curso: Curso

*

nome: stringalunos:List<Aluno>

1cursoalunos

Associação reflexiva Pode­se associar uma classe com ela própria (em papéis 

diferentes)

Pessoapai

filho0..1

* filho

mãe1

*

Associações bidirecionais / unidirecional

As associações são classificadas quanto à navegabilidade em:

Bidirecional  ambos objetos possuem referência.

Unidirecional  classe que recebe a seta recebe também a referência.

Classe3 Classe4Classe1 Classe2

bidirecional unidirecional

Exemplo

Aluno Disciplina

nome: string

endereco: string

*

nome: stringsigla: string

*disciplinasalunos

Bidirecional

Cliente Fita

nome: string

endereco: string

titulo: stringgenero: string

*

fitas

Unidirecional

Classe­Associação

Reúne as propriedades de associação e classeAs linguagens OO não podem repetir 

combinações de objetos das classes participantes na associação

Classe-1 Classe-2

Nome da Associação

ref Classe-1ref Classe-2

operação...

Nome da Associação

Associações n­árias

Notação

Multiplicidade 

– a cada par de objetos das restantes classes (1 e 2), correspondem 0 ou 1 objetos da classe 3

Class-1 Class-2

Association Name

role-1 role-2

Class-3

role-3

Class-1 Class-2

Class-30..1

12/03/16

UML Relações entre Classes

Generalização

Associação

Agregação

Composição

Dependência Prof.Dr. Enzo Seraphim

Agregação

Associação com o significado contém (é constituído por) / faz parte de  (part of)

Relação de inclusão nas instâncias das classesHierarquias de objetosExemplo:

Casa

Comodo*

1

Uma casa contém vários cômodos

Um cômodo faz parte de uma casa

Exemplo

Unidirecional / Bidirecional / Multiplicidades / Papeis

Instituto Departamento

nome:stringendereco:string

1

sigla: stringnome:string

*departamentosinstituto

Bidirecional

Legume

local:string nome:stringpeso:double

Unidirecional

*

legumesHorta

12/03/16

UML Relações entre Classes

Generalização

Associação

Agregação

Composição

Dependência Prof.Dr. Enzo Seraphim

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

Notação: losango cheio ou notação encaixada

Exemplo

Carro Motor

placa: stringmodelo: string

1

serie: intpotencia:doubletotalCilindro:int

1motorcarro

Livro Capitulo

titulo: string titulo: stringgenero: string

Unidirecional

*

capitulos

Bidirecional

Unidirecional / Bidirecional / Multiplicidades / Papeis

Notação Alternativa

Carro

motor: Motor 1

pneus: Pneus *

Livro

Capitulo *

secao: Secao*

12/03/16

UML Relações entre Classes

Generalização

Associação

Agregação

Composição

Dependência Prof.Dr. Enzo Seraphim

Relação de dependência

Relação de uso entre dois elementos (classes, componentes, etc.), 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

Úteis para gestão de dependências

ClasseClasseDependente

Exemplo

Funcionario

rg:stringnome:string

carteiraTrabalho:String

Mensalista Diarista

Vinculo

salario:float diaria:float

SoftwareServidorSoftwareCliente

12/03/16

UML Relações UML Relações entre Classesentre Classes

Prof.Dr.Enzo Seraphim

[email protected]/UNIFEI