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 Nogueira



Generalizaçã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.

Admilson Nogueira

Admilson Nogueira - Empresário, estudioso da Língua Japonêsa, Certificado Intel, Graduado em Matemática com Licenciatura em Física, Analista de Sistemas e Programador. Como especialista Unified Modeling Language e Capability Maturity Model, atuou ativamente em diversos Projetos em empresas como: Infraero, Ministério da Aeronáutica, Embraer, Alcoa, Telefonica, Banco do Brasil (Mainframe), entre outras. Atualmente atua como Analista de Negócios da BM&FBOVESPA em São Paulo, focado em BPM (Business Process Management).
Blog:
http://nogueirajr.spaces.live.com.