Desenvolvimento - Modelagem
UML - Unified Modeling Language - Generalização, agregação, composição e dependência
Continuando com a séria de artigos vamos conhecer um pouco mais sobre generalização, agregação, composição e dependência em UML.
por Admilson NogueiraGeneralização
Definição
É a capacidade de se criar superclasses que encapsulam estrutura e/ou comportamento comuns a várias subclasses.
Procedimentos
Os procedimentos para se obter a generalização são:
- Identificar similaridades de estrutura/comportamento entre várias Classes.
- Criar a superclasse para encapsular a estrutura/comportamento comum.
- As classes originais passam a ser subclasses da nova superclasse criada.
Uma maneira relativamente fácil de se entender isso, é comparando com a nossa herança genética: Você possui algumas características de seus Pais. Mas seus Pais não possuem suas características. Pois bem, você seria uma subclasse.
Outra maneira de se compreender é entendo o conceito de Herança.
Herança
É uma hierarquia de abstrações na qual uma subclasse herda a estrutura e/ou comportamento de uma ou mais superclasses. Exemplo:
A classe VeículoTerrestre pode possuir as subclasses Carro e Caminhão, onde as subclasses podem herdar os Atributos Peso e Comprimento.
A Classe Caminhão pode ter o Atributo Tonelagem próprio da Classe, herdando Peso e Comprimento.
A Classe Carro pode não ter nenhum Atributo próprio, herdando Peso e Comprimento da classe VeículoTerrestre.
Caminhão é uma espécie de VeículoTerrestre.
Carro é uma espécie de VeículoTerrestre.
Tipos de Herança
Herança simples é quando uma subclasse herda estrutura e/ou comportamento de uma única superclasse.
Herança múltipla é quando uma subclasse herda estrutura e/ou comportamento de mais de uma superclasse.
IMPORTANTE: Herança é uma relação entre Classes de Objetos, e não uma relação entre instância das Classes.
Uma subclasse herda:
- Atributos
- Operações
- Relacionamentos
- Uma subclasse pode:
- Adicionar novos atributos, operações e relacionamentos.
- Redefinir operações herdadas.
Agora que você já tem uma pequena noção do que é um Relacionamento Generalização na UML, vamos abordar o Relacionamento Agregação.
Agregação
Definição
É uma forma especializada de associação na qual um todo é relacionado com suas partes. Também conhecida como relação de conteúdo.
Como representamos uma Agregação?
É representada como uma linha de associação com um diamante junto à Classe agregadora. A multiplicidade é representada da mesma maneira que nas associações. Veja a figura:
A Agregação é um caso particular da associação, indica que uma das classes do relacionamento é uma parte, ou está contida em outra classe. As palavras chaves usadas para identificar uma agregação são: "consiste em", "contém", "é parte de".
Agregação Compartilhada: É dita compartilhada quando uma das classes é uma parte, ou está contida na outra, mas esta parte pode estar contida na outra várias vezes em um mesmo momento. Veja figura:
Agregação Reflexiva: Uma variação desse tipo de Relacionamento, quando o Objeto de uma Classe é composto de Objetos da própria Classe. Veja figura:
Um objeto da Classe FormulárioDeRegistro contém um único objeto FormulárioDeMatrícula. Um objeto FormulárioDeMatrícula está contido num único objeto FormulárioDeRegistro.
Agora que você já tem uma pequena noção do que é uma Agregação na UML, vamos abordar os Relacionamentos de Composição na UML, que nada mais são do que um tipo de Agregação.
Composição
Definição
É uma agregação onde uma classe que está contida na outra "vive" e constitui a outra. Se o objeto da classe que contém for destruído, as classes da agregação de composição serão destruídas juntamente, já que as mesmas fazem parte da outra.
Como representamos uma Agregação Composição?
É representada como uma linha de associação com um diamante preenchido junto à Classe agregadora. A multiplicidade é representada da mesma maneira que nas associações. Veja as figuras:
Agora que você já tem uma pequena noção do que é uma Agregação Composição na UML, vamos abordar os Relacionamentos de Dependência.
Dependência
Definição
Uma dependência indica a ocorrência de um relacionamento semântico entre dois ou mais elementos do modelo, onde uma classe cliente é dependente de alguns serviços da classe fornecedora, mas não tem uma dependência estrutural interna com esse fornecedor [Furlan, 1998]
Como funciona?
Por exemplo: Uma mudança no elemento independente irá afetar o modelo dependente. Como no caso anterior com generalizações, os modelos de elementos podem ser uma classe, um pacote, um use-case e assim por diante.
Na Prática
Quando uma classe recebe um objeto de outra classe como parâmetro, uma classe acessa o objeto global da outra. Nesse caso existe uma dependência entre estas duas classes, apesar de não ser explícita.
Graficamente
Uma relação de dependência é simbolizada por uma linha tracejada com uma seta no final de um dos lados do relacionamento. E sobre essa linha o tipo de dependência que existe entre as duas classes. Veja a figura:
Agora que você já tem uma pequena noção do que é uma Dependência na UML, vamos abordar os Esteriótipos na UML.
- Programação a Objetos - Nível ZeroModelagem
- Orientações básicas na elaboração de um diagrama de classesModelagem
- Como fazer um plano de testes baseado em casos de usoQualidade e Testes
- BPM – Abordagem ConceitualModelagem
- Diferenças entre documentação de Projeto, de Sistema e de UsuárioModelagem