sexta-feira 31 agosto, 2012

UML: Composição vs Agregação


É comum, durante a modelagem de um sistema, aparecer a dúvida sobre o tipo de relacionamento entre duas classes. Em um certo momento a única certeza que temos é a de que duas classes estão relacionadas e o problema é saber o tipo dessa relação.

Composição

A composição representa um vínculo forte entre duas classes, ou seja, uma classe FILHA só faz sentido se uma classe PAI existir. Se a classe PAI for apagada, a classe FILHA automaticamente deixará de existir.

Exemplo: Imagine um sistema de Recursos Humanos. Suponha as classes funcionario e empresa, onde funcionario é a classe filha e empresa é a classe pai. Observe que não faz sentido ter funcionários, se não existir uma empresa onde eles possam trabalhar. Se a empresa deixar de existir, automaticamente ela deixará de ter funcionários. Perceba que uma empresa é composta por funcionários (relação todo-parte).

A notação UML para esse tipo de relacionamento é uma linha com um losango cheio posicionado na classe pai. Veja a imagem a seguir.

Agregação

A agregação representa um vínculo fraco entre duas classes, ou seja, a classe FILHA faz sentido mesmo se a classe PAI deixar de existir. Se a classe PAI for apagada, a classe FILHA continuará existindo sem problemas.

Exemplo: Imagine um sistema de gerenciamento de obras. Suponha as classes casa e tijolo, onde tijolo é a classe filha e casa é a classe pai. Observe que caso você deixe de construir uma casa, mesmo assim os tijolos poderão ser utilizados na construção de outro tipo de obra. Perceba que uma casa é feita de tijolos (relação todo-parte).

A notação UML para esse tipo de relacionamento é uma linha com um losango vazio posicionado na classe pai. Observe a figura abaixo.

Nota: Preste atenção na subjetividade desse tipo de relacionamento, pois se uma construtora constrói apenas casas, teremos uma composição. Mas se a construtora faz outros tipos de empreendimentos, temos uma agregação.

Associação Simples

Quando não existir a relação PAI | FILHA teremos uma associação simples.

Exemplo: Imagine um sistema de avaliação de artigos acadêmicos. Temos uma relação autor | artigo. Note que a classe autor não compartilha atributos da classe artigo e vice-versa. Nesse caso, não existe a relação todo-parte.

A notação UML para esse tipo de relacionamento é uma linha simples ligando as duas classes. Observe a figura abaixo.

Fonte: Guedes, G. T. A. UML 2 - Guia Prático, Editora Novatec, 2007.

Algoritmo para identificar tipo de relacionamento entre classes

#Diagrama de Classes
#Identificando Agregação | Composição | Associação Simples
puts "Digite o nome da classe PAI"
a = gets
puts "Digite o nome da classe FILHA"
b = gets
puts "Se voce apagar #{a}, tera que apagar #{b}?"
puts "Digite: sim | nao"
resposta = gets.chomp
if resposta == "sim"
puts "A relacao e de COMPOSICAO"
elsif resposta =="nao"
puts "A classe #{b} tem alguma utilidade sem a classe #{a}?"
puts "Digite: sim | nao"
resposta2 = gets.chomp
if resposta2 == "sim"
puts "A relacao e de AGREGACAO"
end
else
puts "A relacao e de ASSOCIACAO"
end

10 Comentários

  • Bruno disse:

    O que tem a ver agregação e composição com Mãe e Filha?

  • HENRIQUE SOUSA disse:

    Parabéns, muito bem explicado, como disse Henrique: já havia buscado vários sites,slides e apostilas mas encontrei uma resposta clara aqui. Obrigado e sucesso.

  • Henrique disse:

    Fantástico, depois de passar por vários sites não consegui explicação melhor que esta, parabéns.
    Só não gostei do exemplo de agregação, na qual o tijolo vai herdar algumas características de casa? Meio sem sentindo concorda?
    Mas a ideia deu pra entender, abraços!

  • Fernando Jombra Corrêa disse:

    o conteúdo esta bem fácil de entender se pude-se postar mais algo sobre agregação ficaria agradecido.
    Att,
    Fernando Corrêa

  • Parabens!!! Ajudou-me a esclarecer e reforcar... mudanca é importante e UML é meu horizonte mais proximo..

    Obrigado por compartilhar seu conhecimento

  • André Vieira disse:

    Parabéns pelo artigo! Reforcei meus conhecimentos sobre agregação e composição e associação simples.
    Mas fiquei com uma dúvida simples na qual se encontra na seguinte pergunta: A relação todo é o pai(nomenclatura presente no exemplo acima) e a relação parte é a filha(nomenclatura presente no exemplo acima)?

    Muito obrigado!
    Att,
    André Vieira.

    • Cleibson Almeida disse:

      Oi André.
      Sim a parte todo=pai e a parte parte=filha. Venho da programação estruturada e ainda tenho muitos vícios daquele paradigma. Vou corrigir o post para não deixar dúvidas!
      Obrigado pela visita


Trackbacks e Pingbacks

Deixe um Comentário


Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *