Diagrama de Classes - profalansantos.files.wordpress.com · Agregação Composição ... origem...

81
Diagrama de Classes

Transcript of Diagrama de Classes - profalansantos.files.wordpress.com · Agregação Composição ... origem...

Diagrama de Classes

Diagrama de Classes

Classes

Atributos

Métodos

Relacionamentos

Associação

Agregação

Composição

Generalização

Dependência

Realização

Sobre Classes

• São o elemento mais importante de qualquer

sistema orientado a objetos

• Uma classe é uma descrição de um conjunto

de objetos com os mesmos atributos,

relacionamentos, operações e semântica

• Classes são usadas para capturar o

vocabulário de um sistema

• Classes são abstrações de elementos do

domínio do problema, como “Cliente”,

“Banco”, “Conta”

Diagrama de Classes

Diagrama mais utilizado da UML

Serve de apoio para a maioria dos

outros diagramas

Define a estrutura das classes do

sistema

Estabelece como as classes se

relacionam

Diagrama de Classes

Permite a visualização das classes

que compõem o sistema

Representa

Atributos e métodos de uma classe

Os relacionamento entre classes.

Diagrama de Classes

Apresenta uma visão estática de como

as classes estão organizadas

Preocupação com a estrutura lógica

Representação de uma Classe

Uma classe é representada por um

retângulo com três divisões:

Nome da Classe

Atributos da Classe

Métodos da Classe Pessoa

nome

email

enviarMensagem()

Representação de uma Classe

Uma classe é representada por um

retângulo com três divisões:

Nome da Classe

Atributos da Classe

Métodos da Classe Pessoa

nome

email

enviarMensagem()

Nome

Atributos

Métodos

Notação básica

Nome (obrigatório) Atributos (opcional)

Operações (opcional)

Forma

origem

mover()

redimensionar()

exibir()

Meu Primeiro Diagrama

Pessoa

nome

email

Aluno

matricula

Professor

Outro Diagrama de Classes

Diagrama de Classes

Classes

Atributos

Métodos

Relacionamentos

Associação

Agregação

Composição

Generalização

Dependência

Realização

Atributos

Permitem a identificação de cada

objeto de uma classe

Os valores dos atributos podem variar

de instância para instância

Atributos devem conter o tipo de dados a ser armazenado Byte, boolean, int, double, char, String,

etc.

Atributos - Notação

Atributos podem ser identificados

apenas com nomes

Atributos podem ter seus tipos (ou

classes) especificados e terem

valores padrão definidos

Cliente

nome

endereço

telefone

Parede

altura : real

largura : real

espessura : real

viga : boolean = false

Diagrama de Classes

Classes

Atributos

Métodos

Relacionamentos

Associação

Agregação

Composição

Generalização

Dependência

Realização

Métodos

São apenas declarados neste

diagrama

Diagrama de Classes não define a

implementação

Outros diagramas permitem modelar o

comportamento interno dos métodos

Diagrama de Sequência

Diagrama de Atividades

Métodos - Notação

Como para os atributos, você pode

especificar uma operação apenas com seu

nome

Você pode também especificar a

assinatura da operação: seus parâmetros,

o tipo desses parâmetros e o tipo de retorno

Retângulo

mover()

aumentar()

diminuir()

Tipos de visibilidade

Público (+): Visível para qualquer

elemento que possa ver a classe.

Protected (#): Visível a outros

elementos dentro da classe e de

subclasses.

Private (-): Visível a outros

elementos dentro da classe.

Package (~): Visível a elementos do

mesmo pacote.

+ enviarMensagem()

~ receberMensagem()

Tipos de visibilidade

Público (+): Visível para qualquer

elemento que possa ver a classe.

Protected (#): Visível a outros

elementos dentro da classe e de

subclasses.

Private (-): Visível a outros

elementos dentro da classe.

Package (~): Visível a elementos do

mesmo pacote.

Pessoa

# nome

- email

Demais Notações

Como expressar classes abstratas:

O nome da classe deve ser escrito no estilo

itálico.

Como expressar métodos abstratos:

O nome do método deve ser escrito no estilo

itálico.

Exemplo de classe e método

abstrato

Shape

# origin : Point

+ move (offset : Point) : void

+ resize (ratio : Real) : void

+ display () : void

Rectangle

- width : float

- height : float

+ resize(ratio : Real) : void

+ display() : void

Circle

- radius : float

+ resize(ratio : Real) : void

+ display() : void

Polygon

- vertexOffest : Point [ ]

+ resize(ratio : Real) : void

+ display() : void

superclasse

generalização

sub-classes

#nome : String-dataNascimento : Data-telefone : String#/idade : int#limiteCrédito : Moeda = 500.0-quantidadeClientes : int-idadeMédia : float

Cliente

Público (+)

Package (~)

Protegido (#)

Privado (-)

Derivado ( / ) Abstrato (itálico)

Static (sublinhado)

Diagrama de Classes

Diagrama de Classes

Classes

Atributos

Métodos

Relacionamentos

Associação

Agregação

Composição

Generalização

Dependência

Realização

Relacionamentos

Classes possuem relacionamentos

entre elas Compartilham informações

Colaboram umas com as outras

Comunicação entre Objetos (I)

Conceitualmente, objetos se

comunicam através da troca de

mensagens.

Mensagens definem:

O nome do serviço requisitado

A informação necessária para a

execução do serviço

O nome do requisitante.

Comunicação entre Objetos (II)

Na prática, mensagens são

implementadas como chamadas

de métodos

Nome = o nome do método

Informação = a lista de parâmetros

Requisitante = o método que

realizou a chamada

Relacionamentos

Principais tipos de relacionamentos Associação

Agregação / Composição

Herança

Dependência

Realização

Relacionamentos - Notação Associação

Sem/com navegação

Agregação

Realização

Generalização

Composição

Dependência

Relacionamentos

Os relacionamentos possuem:

Nome: descrição dada ao relacionamento (faz, tem,

possui,...)

Sentido de leitura

Navegabilidade: indicada por uma seta no fim do

relacionamento

Multiplicidade: 0..1, 0..*, 1, 1..*, 2, 3..7

Tipo: associação (agregação, composição),

generalização e dependência

Papéis: desempenhados por classes em um

relacionamento

Relacionamentos

Pessoa Empresa 1..*

Tipo: associação

multiplicidade

* trabalha para

empregado

papéis

empregador

sentido de

leitura

E a navegabilidade?

nome

Relacionamentos

O cliente sabe quais são seus endereços,

mas o endereço não sabe a quais clientes

pertence

Endereço Cliente reside

1 *

navegabilidade

Diagrama de Classes

Classes

Atributos

Métodos

Relacionamentos

Associação

Agregação

Composição

Generalização

Dependência

Realização

Associação

Descreve um vínculo entre duas

classes

Chamado Associação Binária

Determina que as instâncias de uma

classe estão de alguma forma ligadas

às instâncias da outra classe

Associação

A associação é um relacionamento

estrutural que especifica que objetos de um

elemento estão conectados a objetos de

outro elemento

Companhia Funcionárioemprega

Representação da Associação

Uma associação é representada por

uma linha sólida conectando duas

classes.

Pessoa Empresa

associação

Representação da Associação

Cliente

registro

DVD

titulo <locados> 0..*

0..1

Multiplicidade

É a cardinalidade de uma associação

Classeexatamente 1

1

Classemuitos (zero ou

mais)

*

Classeopcional (zero ou

um)

0..

1

Classesequência

especificada

m..

n

Multiplicidade

0..1 No máximo um. Indica que os Objetos da

classe associada não precisam

obrigatoriamente estar relacionados.

1..1 Um e somente um. Indica que apenas um

objeto da classe se relaciona com os objetos

da outra classe.

0..* Muitos. Indica que podem haver muitos objetos

da classe envolvidos no relacionamento

1..* Um ou muitos. Indica que há pelo menos um

objeto envolvido no relacionamento.

3..5 Valores específicos.

Associação

Pessoa Empresa 1..*

associação

multiplicidade

* trabalha para

* significa 0..*

Associação Unária

Quando há um relacionamento de uma

classe para consigo própria

Funcionário

1

1..*

1

1..*

gerencia

Associação Binária

Quando há duas classes envolvidas na

associação de forma direta de uma para a

outra

Cliente Pedido

0..*1

faz

1 0..*

Associação: Navegabilidade

Em geral a navegação entre as classes de

uma associação é bidirecional

Porém é possível limitá-la a apenas uma

direção

Usuário Senha

Associação: papéis

Papéis: um dos lados da associação

Nomes de papéis são necessários

para associação entre dois objetos da

mesma classe

Companhia Empregado 1..* *

+empregador 1

0..*

+subordinado

+chefe

Associação

Exemplo:

Um Estudante pode ser

um aluno de uma Disciplina e

um jogador da Equipe de Futebol

Cada Disciplina deve ser cursada por no mínimo 1 aluno

Um aluno pode cursar de 0 até 8 disciplinas

Associação com Atributos

Em uma associação entre classes, a

própria associação pode ter

propriedades.

Modela as propriedades associadas

com uma associação

As propriedades devem ser

representadas por uma classe

Associação com Atributos

Companhia Empregado 1..* * * 1..*

Trabalho

descrição

salário

Diagrama de Classes

Classes

Atributos

Métodos

Relacionamentos

Associação

Agregação

Composição

Generalização

Dependência

Realização

Agregação

Tipo especial de associação

Demonstra que as informações e um

objeto precisam ser complementadas

por um objeto de outra classe

Associação Todo-Parte

objeto-todo

objeto-parte

Representação de Agregação

Um losango na extremidade da

classe que contém os objetos-todo

Pessoa

nome

email

Time

nome

Agregação

Um objeto “parte” pode fazer parte de

vários objetos “todo”

Item Pedido 1 1..*

agregação

todo parte

Quando utilizar Agregação ?

Deseja-se modelar um relacionamento “todo/parte”, em que uma classe representa uma entidade completa (todo), composta de outras entidades (partes).

Diagrama de Classes

Classes

Atributos

Métodos

Relacionamentos

Associação

Agregação

Composição

Generalização

Dependência

Realização

Composição

Uma variação do tipo agregação

Representa um vínculo mais forte

entre objetos-todo e objetos-parte

Objetos-parte têm que pertencer ao

objeto-todo

O todo não existe (ou não faz sentido)

sem a parte

Composição

O todo é responsável pela disposição de suas partes, ou seja, que o todo deve gerenciar a criação e destruição de suas partes.

Ou seja, um objeto pode ser uma parte de somente uma composição por vez.

Representação da Composição

Um losango preenchido, e da mesma

forma que na Agregação, deve ficar ao

lado do objeto-todo

Time

nome

Jogador

posicao

Composição

Quando o “todo” morre todas as suas

“partes” também morrem

Teclado Notebook

Frame Window

1 1

1 0..*

1..* 0..* errado

Composição

Ex:

Composição

Ex:

Janela

Scroll Título Corpo

1

0..1 2 1

Empresa

Departamento Escritório

1 1..* 1..*

0..1

*

Agregação X Composição

Andar Edifício1..n

MesaSala

1..n11

1..n

1..n

Diagrama de Classes

Classes

Atributos

Métodos

Relacionamentos

Associação

Agregação

Composição

Especialização/Generalização

Dependência

Realização

Especialização / Generalização

Identifica classes-mãe (gerais) e

classes-filhas (especializadas)

Atributos e métodos definidos na

classe-mãe são herdados pelas

classes-filhas

Especialização / Generalização

Pessoa

nome

email

Aluno

matricula

Professor

Generalização Forma

origem

mover()

exibir()

Retângulo

ponto : Ponto

Círculo

raio : float

Polígono

pontos : ListaDePontos

exibir()

Quadrado

“é um”

“é um tipo de”

superclasse

subclasse

Veículo

Terrestre Aéreo

Generalização

É um relacionamento entre itens

gerais (superclasses)

e itens mais específicos (subclasses)

Herança Múltipla

Ocorrem múltiplas superclasses para uma

mesma subclasse

Veículo Aquático

Veículo

Veículo Terrestre

Veículo Anfíbio

Herança simples e múltipla

Herança Simples Herança Múltipla

RadioRelogio

- horario

- despertar

- horarioAlarme

- emissora

- tipoEmissora

- volumeRadio

- volumeRelogio

<<interface>>

Radio

+ setEmissora(emissora,tipoEmi)

+ getEmissora()

+ getTipoEmissora()

+ setVolumeRadio(vol)

+ getVolumeRadio()

<<interface>>

Relogio

+ setHorario(horario)

+ getHorario()

+ setHorarioAlarme(horario)

+ getHorarioAlarme(horario)

+ ligarAlarme()

+ desligarAlarme()

+ setVolumeRelogio(vol)

+ getVolumeRelogio()

Shape

# origin : Point

+ move (offset : Point) : void

+ resize (ratio : Real) : void

+ display () : void

Rectangle

- width : float

- height : float

+ resize(ratio : Real) : void

+ display() : void

Circle

- radius : float

+ resize(ratio : Real) : void

+ display() : void

Polygon

- vertexOffest : Point [ ]

+ resize(ratio : Real) : void

+ display() : void

superclasse

generalização

sub-classes

Diagrama de Classes

Classes

Atributos

Métodos

Relacionamentos

Associação

Agregação

Composição

Especialização/Generalização

Dependência

Realização

Dependência

É um relacionamento que declara que

uma entidade usa a informação e

serviços de outra entidade, mas não

necessariamente o inverso.

Geralmente se usa dependência para

mostrar que uma classe usa

operações de outra classe ou usa

variáveis ou argumentos de tipo de

outra classe.

Dependência

Tipo menos comum de

relacionamento

Identifica um baixo grau de

dependência de uma classe em

relação a outra

Representação da

Dependência

Representado por uma reta tracejada entre

duas classes

Uma seta na extremidade indica o

dependente

Funcionario DVD

titulo

locar()

Representação da

Dependência

Representado por uma reta tracejada entre

duas classes

Uma seta na extremidade indica o

dependente

Funcionario DVD

titulo

locar()

locar(Funcionario func)

Dependência

Dependências são relações de uso

Uma dependência indica que mudanças em

um elemento (o “servidor”) podem afetar

outro elemento (o “cliente”)

Uma dependência entre classes indica que

os objetos de uma classe usam serviços

dos objetos de outra classe

Cliente Servidor

Dependência

A alteração de um objeto (o objeto

independente) pode afetar outro objeto (o

objeto dependente)

Ex:

Obs:

A classe cliente depende de algum serviço da classe fornecedor

A mudança de estado do fornecedor afeta o objeto cliente

A classe cliente não declara nos seus atributos um objeto do tipo fornecedor

Fornecedor é recebido por parâmetro de método

cliente fornecedor

Diagrama de Classes

Classes

Atributos

Métodos

Relacionamentos

Associação

Agregação

Composição

Especialização/Generalização

Dependência

Realização

Sobre Interfaces

Uma interface é um conjunto de operações

usado para especificar um serviço de uma

classe ou componente

Diferentemente das classes, as interfaces

não especificam nenhuma estrutura

Interfaces não podem conter atributos

Sobre Interfaces

Com as interfaces, é possível se concentrar

apenas nos serviços oferecidos por

classes ou componentes

O uso de interfaces é uma maneira

elegante e poderosa de isolar a

especificação da implementação

Uma interface especifica o contrato para

uma classe ou componente, sem definir

como ele será implementado

Interfaces e Realização

Realização é uma relação pela qual um

elemento especifica o contrato que outro

elemento deve implementar

A realização é um relacionamento entre

uma especificação e sua implementação

É um relacionamento semântico entre

classificadores no qual um classificador

especifica um contrato que outro

classificador garante cumprir

Realização - Notação

Empregado

Empregado_Impl

Empregado

verificarFicha()

calcularSalário()

<<interface>>

Empregado_Impl

Expressando interfaces em UML

<<interface>>

Radio

+ setEmissora(emissora,tipoEmi)

+ getEmissora()

+ getTipoEmissora()

+ setVolumeRadio(vol)

+ getVolumeRadio()

<<interface>>

Relogio

+ setHorario(horario)

+ getHorario()

+ setHorarioAlarme(horario)

+ getHorarioAlarme(horario)

+ ligarAlarme()

+ desligarAlarme()

+ setVolumeRelogio(vol)

+ getVolumeRelogio()

RadioRelogio

- horario

- despertar

- horarioAlarme

- emissora

- tipoEmissora

- volumeRadio

- volumeRelogio

Notas

Informativos

Algum comentário na classe, método ou atributo

Alguma restrição de funcionalidade

Objetivo é informa como o objeto se comporta

Notas

Nome é obrigatório para

toda instancia desta classe Pessoa

nome

email