Como você resolve de maneira fácil quando o assunto e Agregação e Composição

:shock: Falando em coleções e arranjos simples, é sempre uma dificuldade para entender uma regra que melhor se encaixe quando o assunto é Agregação e Composição.

:arrow: Então que regra é mais fácil para interpretá-los, isso é uma discussão que alguns gurus da UML, já até então abordaram exaustivamente em obras e livros.

Vc tem cunhado? Se tiver vai ser fácil entender.
O seu cunhado está agregado a sua família, ele não compõe a sua família.
Já você compõe sua família.
:smiley:

[quote=allanmarques]Vc tem cunhado? Se tiver vai ser fácil entender.
O seu cunhado está agregado a sua família, ele não compõe a sua família.
Já você compõe sua família.
:D[/quote]
Ótimo exemplo :wink:

[code]class Voce {

}

class SeuCunhado {

}

class SuaFamilia {
private SeuCunhado seuCunhado; // Agregação
private Voce voce; // Composição
}[/code]
No contexto de sua aplicação, você pode ter instâncias de SuaFamilia com o atributo “seuCunhado” igual a null ( agregação ), mas nenhuma delas terá o atributo “voce” igual a null ( composição ).

COMPOSIÇÃO: O outro lado só existe se aquele que esta com ele existir.

AGREGAÇÃO: O objeto esta associado mas possue estado independente de quem esta associado a ele.

acho q é isso.

[quote=allanmarques]Vc tem cunhado? Se tiver vai ser fácil entender.
O seu cunhado está agregado a sua família, ele não compõe a sua família.
Já você compõe sua família.
:smiley:

[/quote]
Acho que isso foi inocente, mas acabou se aproximando de um conceito até mais plausível

[quote=tnaires]
Ótimo exemplo :wink:

[code]class Voce {

}

class SeuCunhado {

}

class SuaFamilia {
private SeuCunhado seuCunhado; // Agregação
private Voce voce; // Composição
}[/code]
No contexto de sua aplicação, você pode ter instâncias de SuaFamilia com o atributo “seuCunhado” igual a null ( agregação ), mas nenhuma delas terá o atributo “voce” igual a null ( composição ).[/quote]

:!: Este é um exemplo que cabe pra Ruby também ?

foi bom mesmo…

só que VOCÊ existe mesmo sem suaFamilia existir, mas sua família não existe se VOCE não existir. Pense nisso.

[quote=Giulliano]COMPOSIÇÃO: O outro lado só existe se aquele que esta com ele existir.

AGREGAÇÃO: O objeto esta associado mas possue estado independente de quem esta associado a ele.

acho q é isso.
[/quote]
Coloca uma situação sem ter que ser conceitual, dando um enfoque criativo algo que até em um caso de uso acho teria melhor relação.

[quote=Giulliano]foi bom mesmo…

só que VOCÊ existe mesmo sem suaFamilia existir, mas sua família não existe se VOCE não existir. Pense nisso.[/quote]

Mas de outra forma, como você poderia dizer então !!!

a classe VOCÊ existe e a classe CUNHADO existe, já a classe SUAFAMILIA é associada (composição) com a classe VOCÊ.

Ou seja sem VOCÊ a SUAFAMILIA nunca existirá.

class Voce{
private SuaFamilia suaFamilia;
}

class Cunhado{}

class SuaFamilia{
private Voce voce;
private Cunhado cu;
}

quanto ao código continua a mesma coisa, só mudaria na implementação.

Os conceitos de agregação e composição também dependem muito do domínio em que estamos. Ex:
Se o meu domínio é uma concessionária de carros, motor não existe sozinho, ele compõe o carro. O carro também não existe sem
o motor.
Já se o meu domínio é um ferro-velho, motor pode existir sozinho como também pode estar agregado a um carro.

Não me lembro de ter visto tanta atrocidade junta antes… talvez na Segunda Gerra Mundial!
Agregação: a parte pode pertencer a mais de um todo.
Composição: a parte pertence a um único todo.
O resto das cláusulas são efeitos destas regras ou pura balela!
Um abraço a todos!

[quote=malsan]Não me lembro de ter visto tanta atrocidade junta antes… talvez na Segunda Gerra Mundial!
Agregação: a parte pode pertencer a mais de um todo.
Composição: a parte pertence a um único todo.
O resto das cláusulas são efeitos destas regras ou pura balela!
Um abraço a todos![/quote]

Associação: um objeto não faz parte do outro, porém eles se conhecem.

Acho que o que eu vou dizer pode parecer besteira, mas
Agregação quando A conhece objetos do tipo B e que, quando um for “destruído” não acarretará na “destruição” de outro.
Composição é quando, se A for “destruído”, B vai ser também.

Não sei onde li isso… Mas pelo que eu me lembre foi o conceito pelo qual consegui entender um pouco.

[quote=allanmarques]Vc tem cunhado? Se tiver vai ser fácil entender.
O seu cunhado está agregado a sua família, ele não compõe a sua família.
Já você compõe sua família.
:smiley:

[/quote]

Excelente exemplo!!! Caramba, precisamos mais disso pra aprender OO!!! Fica muito mais fácil.

Outro exemplo envolvendo familia poderia ser hehee

Composição e quando vc casa com sua esposa se morre e sua esposa morre junto
Agreção é quando vc casa vc ganha de brinde sua sogra hehee

[quote=tnaires]

[code]class Voce {

}

class SeuCunhado {

}

class SuaFamilia {
private SeuCunhado seuCunhado; // Agregação
private Voce voce; // Composição
}[/code][/quote]
O exemplo é bom, mas ainda acho que não é 100% exato. Afinal, você continuaria a existir sem sua família, e sua família continuaria a existir sem você também (apenas seria um pouco mais triste ou mais feliz, dependendo de como você os trata :))

[quote=gomesrod][quote=tnaires]

[code]class Voce {

}

class SeuCunhado {

}

class SuaFamilia {
private SeuCunhado seuCunhado; // Agregação
private Voce voce; // Composição
}[/code][/quote]
O exemplo é bom, mas ainda acho que não é 100% exato. Afinal, você continuaria a existir sem sua família, e sua família continuaria a existir sem você também (apenas seria um pouco mais triste ou mais feliz, dependendo de como você os trata :))[/quote]

Sem ele não seria “a família dele” e sim outra família qualquer.

Sem ele não seria “a família dele” e sim outra família qualquer.[/quote]

:arrow: Não busque a explicação de composição ou agregação se situando em código, mesmo porque o efeito a regra pode realmente mudar.

[quote=Ssalgado]
Sem ele não seria “a família dele” e sim outra família qualquer.[/quote]
Bom… não entendo profundamente esse assunto, então tenham paciencia se eu estiver falando besteira, mas acho o seguinte: uma relação de composição não traz a idéia de “um não vive sem o outro” ?

Assim: Se José não existe a família continua existindo. Ela se torna “uma outra família qualquer que não a de José”, mas isso não é apenas um detalhe? Da mesma forma, sem ele o cunhado também não é mais o cunhado dele, mas o cunhado de um outro qualquer - nem por “José tem um cunhado” foi considerado Composição.

Não sei se fui claro o suficiente…

Um exemplo do que considero composição:
-> José tem uma cabeça.
José não vive sem a cabeça, a cabeça não vive sem José, e caso José não exista a cabeça dele não poderá simplesmente tornar-se a cabeça de um outro cara.

Faz sentido isso?

Valeu!