sexta-feira, 11 de março de 2011

Arquitetura de Software: Qual a diferença entre agregação, composição e herança?

Sempre me fiz esta pergunta... Então, vamos lá! :)

As diferenças são:

Agregação é a utilização de uma classe por outra através de um vínculo comum, onde a classe utilizada (agregado) faz "sentido" sem a classe que a utiliza (agregador). Um exemplo são as classes do tipo Carro e Roda (Um carro possue rodas, mas as rodas existem sem o carro).

class Carro {
private Roda[] rodas;
}

class Roda {
}

Composição é uma agregação mais "forte", onde o agregado não faz sentido sem o agregador. Um exemplo clássico, são classes do tipo Pedido e ItemPedido (Um pedido possue itens de pedido e o item de pedido não existe sem um pedido).

class Pedido {
private ItemPedido[] itens;
}

class ItemPedido {
//O código abaixo é só de exemplo, mas nem sempre em uma composição deve ser colocado assim.
private Pedido pedido;
}

Herança é quando uma classe possue todas as características de uma outra classe, a classe que possue as caracteristicas comuns é chamada de base ou de pai e a classe que "herda" estas caracteristicas é chamada de filha. Um exemplo são classes do tipo Animal e Mamifero (pois um mamífero é um animal, mas nem todo animal é mamífero):

class Animal {
}

class Mamifero extends Animal {
}

É isso ai... Pareceu até que estou escrevendo uma apostila :P

Até!

Um comentário:

Anônimo disse...

No final, eu penso assim: Um ar-condicionado "agrega" um valor ao carro (mas não impede que ele funcione), mas um motor "compõe" o carro (sem ele, o carro não funciona).