Diagrama de Classes - profalansantos.files.wordpress.com · Agregação Composição ... origem...
Transcript of Diagrama de Classes - profalansantos.files.wordpress.com · Agregação Composição ... origem...
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
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
enviarMensagem()
Nome
Atributos
Métodos
Notação básica
Nome (obrigatório) Atributos (opcional)
Operações (opcional)
Forma
origem
mover()
redimensionar()
exibir()
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
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
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 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
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
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:
Janela
Scroll Título Corpo
1
0..1 2 1
Empresa
Departamento Escritório
1 1..* 1..*
0..1
*
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
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