Prévia do material em texto
Diagrama de Classe
Livro: UML 2.0 – Uma abordagem prática
Autor: Gilleanes T. A. Guedes
Capítulo 4
Diagrama de Classes
O diagrama de classes é um dos mais importantes e mais
utilizados da UML.
Seu principal enfoque está em permitir a visualização das
classes que comporão o sistema com seus respectivos
atributos e métodos, bem como em demonstrar como as
classes do diagrama de relacionam, complementam e
transmitem informações entre si.
Diagrama de Classes
Esse diagrama apresenta uma visão estática de como as
classes estão organizadas, preocupando-se em como
definir a estrutura lógica das mesmas.
O diagrama de classes serve ainda como base para a
construção da maioria dos outros diagramas da
linguagem UML.
Basicamente, o diagrama de classes é composto por suas
classes e pelas associações existente entre elas, ou seja, o
relacionamentos entre as classes.
Diagrama de Classes
Alguns métodos de desenvolvimento de software
recomendam que se utilize o diagrama de classes ainda
durante a fase de análise, produzindo-se um modelo
conceitual a respeito das informações necessárias ao
software.
Somente na fase de projeto torna-se o modelo conceitual
do diagrama de classes e produz-se o modelo de domínio
que já enfoca na solução do problema.
Atributos e Métodos
Os métodos são declarados no diagrama de classes,
identificando os possíveis parâmetros que são por ele
recebidos e os possíveis valores por ele retornados.
Entretanto o diagrama de classes não se preocupa em
definir as etapas que tais métodos deverão percorrer
quando forem chamados, sendo esta uma função
atribuída a outros diagramas.
Atributos e Métodos
Exemplo de diagrama de
classe:
Retângulo com três
divisões;
Visibilidade;
Tipos de Retorno.
Atributos e Métodos
Exemplo de diagrama
de classe:
Parâmetros dos
métodos.
Diagrama de Classes Refletido em JAVA
public class Conta_comum {
protected long nro_conta;
protected Date dt_abertura;
protected Date dt_encerramento;
protected int situacao;
protected int senha;
protected double saldo;
public long abrirConta(int senha)
{
return 0;
}
public int consultarConta(long nro_conta)
{
return 0;
}
public int validarSenha(int senha)
{
return 0;
}
public double saldoConta()
{
return 0;
}
public int sacarValor(double valor)
{
return 0;
}
public int depositarValor(long
nro_conta, double valor)
{
return 0;
}
public int encerrarConta()
{
return 0;
}
public String extratoConta()
{
return "";
}
Características Extras
Atributos que sofrem
algum tipo de cálculo.
Valores Iniciais
Multiplicidade
Relacionamento ou Associações
As classes costumam ter relacionamentos entre si,
chamados associações, que permitem que elas
compartilhem informações entre si e colaborarem para a
execução dos processos executados pelo sistema.
As associações são representadas por linhas ligando as
classes envolvidas. Essas linhas podem ter nomes ou
títulos para auxiliar a compreensão do tipo de vínculo
estabelecido entre os objetos das classes envolvidas nas
associações.
Associações Unárias ou Reflexivas
Este tipo de associação ocorre quando existe um
relacionamento de um objeto de uma classe com objetos
da mesma classe.
Multiplicidade
Multiplicidade Significado
0..1 No mínimo zero (nenhum )e no máximo um. Indica que os objetos das
classes associadas não precisam obrigatoriamente estar relacionados, mas
se houver relacionamento indica que apenas uma instância da classe
relaciona-se com as instância da outra classe (ou da outra extremidade da
associação, se esta for unária.
1..1 Um e somente um. Indica que apenas um objeto da classe relaciona-se com
os objetos da outra classe.
0..* No mínimo nenhum e no máximo muitos. Indica que pode ou não haver
instâncias da classe participando do relacionamento
* Muitos. Indica que muitos objetos da classe envolvida na associação.
1..* No mínimo um e no máximo muitos. Indica que há pelo menos um objeto
envolvido no relacionamento, podendo haver muitos objetos envolvidos.
3..5 No mínimo três e no máximo cinco. Estabelece que existem pelo menos
três instâncias envolvidas no relacionamento e que podem ser quatro ou
cinco as instâncias envolvidas, mas não mais do que isso.
Papéis
Informações extras que
podem ajudar a explicar a
função de um objeto.
O uso de papéis pode
facilitar a compreensão da
associação existente, mas
nem sempre é necessário,
e seu uso excessivo pode
deixar os diagramas
visualmente muito
poluidos.
Associação Binária
Associações binárias ocorrem quando são identificados
relacionamentos entre objetos de duas classes distintas.
Navegabilidade
A navegabilidade é representada por uma seta em uma
das extremidades da associação, identificando o sentido
em que as informações são transmitidas entre os objetos
das classes envolvidas, ou seja, o sentido em que os
métodos poderão ser disparados.
Associação Ternária ou N-ária
Associações ternárias ou n-árias são associações que
conectam objetos de mais de duas classes. São
representadas pelo losango para onde convergem todas
as ligações da associação.
Exercícios
Estudo de caso: Sistema de Controle de Cinema
Agregação
Agregação é um tipo especial de associação onde se tenta
demonstrar que as informações de um objeto (chamado
objeto-todo) precisam ser complementadas pelas
informações contidas em um mais objetos de outra classe
(chamados objetos-parte).
Agregação
A associação de agregação pode, em muitos casos, ser
substituída por uma associação binária simples,
dependendo da visão de quem faz a modelagem.
A função principal de uma associação do tipo agregação é
identificar a obrigatoriedade de uma complementação
das informações de um objeto-todo por seus objetos-
parte, quando este for consultado. Já uma associação
binária essa obrigatoriedade não está explícita.
Composição
Uma associação do tipo composição constitui-se uma
variação da agregação, onde é apresentado um vínculo
mais forte entre os objetos-todo e os objetos-parte,
procurando demonstrar que os objetos-parte tem de
estar associados a um único objeto-todo.
Em uma composição os objetos-parte não podem ser
destruídos por um objeto diferente do objeto-todo ao
qual estão relacionados.
Composição
Quando usar composição ou agregação?
Quem é composição e quem é agregação?
Quando usar composição ou agregação?
Na Agregação, a existência do Objeto-Parte faz sentido,
mesmo não existindo o Objeto-Todo. Vejamos o exemplo
Time-Atleta:
Quando usar composição ou agregação?
Já a Composição é uma agregação mais forte; nela, a
existência do Objeto-Parte NÃO faz sentido se o Objeto-
Todo não existir.
Generalização/Especialização
O objetivo dessa associação é representar a ocorrência de
herança entre as classes, identificando as classes-mãe (ou
superclasses), chamadas gerais, e classes-filhas (ou
subclasses), chamadas especializadas, demonstrando a
hierarquia entre as classes e possivelmente métodos
polimórficos nas classes especializadas.
A generalização/especialização ocorre quando existem
duas ou mais classes com características semelhantes.
Generalização/Especialização
Para evitar ter de declarar atributos e/ou métodos
idênticos e como uma forma de reaproveitar código, cria-
se uma classe geral em que são declarados os atributos e
métodos comuns a todas as classes envolvidas no
processo e, então, declaram-se classes especializadas
ligadas à classe geral, que herdam todas as suas
características, podendo ter atributos e método próprios.
Generalização/Especialização
Além disso, métodos podem ser redeclarados em uma
classe especializada com o mesmo nome, mas
comportando-se de forma diferente, não sendo, portanto,
necessáriomodificar o código-fonte do sistema em
relação às chamadas de métodos das classes
especializadas, pois o nome do método não mudou,
somente foi redeclarado em uma classe especializada, e
só se comporta de maneira diferente quando for
chamado por objetos dessa classe.
Generalização/Especialização
Classe Associativa
Classes associativas são aquelas produzidas quando da
ocorrência de associações que tenham multiplicidade
muitos (*) em todas as suas extremidades.
As classes associativas são necessárias nos casos em que
existem atributos relacionados à associação que não
podem ser armazenados por nenhuma das classes
envolvidas.
Classe Associativa
Classe Associativa
No caso do exemplo anterior temos a seguinte situação:
um ator atua em um filme e tem um único papel.
E se um ator interpretasse mais de um papel em um
mesmo filme?
Exercícios
Estudo de caso: Sistema de Controle Bancário
Dependência
Este relacionamento, como o próprio nome diz, identifica
certo grau de dependência de uma classe em relação à
outra.
Realização
Uma realização é um tipo de relacionamento especial que
mistura características dos relacionamentos de
generalização e dependência, sendo usada para
identificar classes responsáveis por executar funções para
outras classes.
Interfaces
Podemos definir como interface o contrato entre a classe
e o mundo exterior. Quando uma classe implementa uma
interface, se compromete a fornecer o comportamento
publicado por esta interface.
As interfaces podem ser de dois tipos:
Interfaces fornecidas
Interfaces requeridas
Interfaces Requeridas
Este tipo de interface descreve os serviços que outras
classes devem fornecer a uma determinada classe, que
não precisa ter conhecimento de quais classes
implementam esses serviços.
Interfaces Fornecidas
Uma interface fornecida descreve um serviço
implementado por uma classe. Ao implementar uma
interface, uma classe suporta o conjunto de
características contidas por esta e obedece às suas
restrições.
Interfaces
É comum que uma interface fornecida em uma classe seja
um interface requerida em outra, podendo facilmente
ocorrer de ambas as interfaces surgirem juntas.
Restrições
Restrições constituem-se em informações extras que
definem condições a serem validadas durante a
implementação dos métodos de uma classe, das
associações entre as classes ou mesmo de seus atributos.
As restrições são representadas por textos limitados por
chaves.
Restrições podem ser usadas para detalhar requisitos
não-funcionais, incluindo regras de negócio.
Restrições
Estereótipos do Diagrama de Classe
Estereótipos são uma maneira de destacar determinados
componentes do diagrama, tornando explícito que tais
componentes executam alguma função um pouco
diferente dos demais componentes apresentados no
diagrama.
Há três estereótipos mais utilizados no diagrama de
classe:
<<entity>>
<<boundary>>
<<control>>
Estereótipo <<entity>>
O estereótipo <<entity>> tem por objetivo tornar
explícito que uma classe é uma entidade, ou seja, a classe
contém informações recebidas e armazenada pelo
sistema ou gerada por meio deste.
Também fornecem a informação de que normalmente
terão muitos objetos e que os mesmo possivelmente
terão um período de vida longa, isto é, existe a
possibilidade de que os objetos dessas classes precisem
ser persistidos, ou seja preservados fisicamente de
alguma maneira.
Estereótipo <<entity>>
Um problema de se utilizar esse estereótipo é que ele
esconde os atributos e métodos da classe.
Estereótipo <<boundary>>
O estereótipo <<boundary>>, também conhecido como
estereótipo de fronteira, identifica uma classe que serve
de comunicação entre os atores externos e o sistema
propriamente dito.
Estereótipo <<control>>
O estereótipo <<control>> identifica classes que servem
de intermédio entre as classes <<boundary>> e as demais
classes do sistema. Objetos <<control>> são responsáveis
pro interpretar os eventos ocorridos sobre os objetos
<<boundary>>, como movimento do mouse,
pressionamento do botão.
Exercícios
Estudo de caso: Sistema de Controle de Clube Social
Exercícios
Estudo de caso: Sistema de Locação de Veículos