Composição e agregação
Classes e objetos podem ser relacionados entre si. A herança descreve um relacionamento "É A". Um leão É UM animal. Esse relacionamento é facilmente expresso usando herança, onde
Animal
seria a classe pai e
Lion
seria a filha. Mas nem todo relacionamento no mundo é adequadamente descrito dessa maneira. Por exemplo, um teclado definitivamente tem alguma relação com um computador, mas
não é um computador . As mãos têm alguma relação com uma pessoa, mas não são uma pessoa. Esses casos representam um tipo diferente de relacionamento — não "É A", mas "TEM A". Mãos não são uma pessoa, mas uma pessoa TEM mãos. Um teclado não é um computador, mas um computador TEM UM teclado. "TEM UM"
. A diferença entre esses conceitos está no "rigidez" das relações. Vamos dar um exemplo simples: temos um arquivo
Car
. Todo carro tem um motor. Além disso, todos os carros podem transportar passageiros. Qual é a diferença fundamental entre os campos
Engine engine
e
Passenger[] passengers
? Se o passageiro
A
estiver sentado dentro de um carro, isso não significa que os passageiros
B
e
C
também não possam estar no carro. Um carro pode acomodar vários passageiros. Além do mais, todos os passageiros podem sair do carro, mas ele continuará funcionando sem problemas. A relação entre a
Car
classe e o
Passenger[] passengers
array é menos estrita. É chamado de
agregação . Aqui está um bom artigo sobre este tópico:
Relacionamentos entre classes (objetos). Ele fornece outro bom exemplo de agregação. Digamos que temos uma
Student
classe que representa um aluno e uma
StudentGroup
que representa um grupo de alunos. Um aluno pode ser membro de um clube de física, um fã-clube estudantil de Star Wars ou um clube de comédia.
A composição é um tipo mais estrito de relacionamento. Ao usar composição, um objeto possui outro objeto, mas não pode pertencer a outro objeto do mesmo tipo. O exemplo mais simples é o motor de um carro. Se um carro tem motor, esse motor não pode pertencer a outro carro. Como você pode ver, essa relação é muito mais estrita do que a de
Car
e
Passengers
.
![Relações entre classes. Herança, composição e agregação - 4]()
GO TO FULL VERSION