Sobes.tech
Junior — Middle

Qual é a diferença entre relações de agregação e composição na programação orientada a objetos?

sobes.tech IA

Resposta da IA

A agregação e a composição são dois tipos de relações entre objetos na programação orientada a objetos (POO), que descrevem como os objetos estão relacionados.

  • Agregação: é uma relação de "tem" (has-a), na qual um objeto contém outro, mas o ciclo de vida do objeto contido não depende do contêiner. O objeto contido pode existir de forma independente.

  • Composição: uma forma mais forte de agregação, onde o objeto contido pertence completamente ao contêiner e não existe separadamente. Se o contêiner for destruído, o objeto contido também será.

Exemplo:

class Engine {}

// Agregação: Car tem Engine, mas Engine pode existir separadamente
class Car {
    var engine: Engine?
}

// Composição: House é composta por Rooms, que não existem sem a casa
class Room {}

class House {
    var rooms: [Room] = []
    init() {
        rooms = [Room(), Room()]
    }
}

Na composição, os objetos estão fortemente ligados e são gerenciados juntos, enquanto na agregação, a ligação é mais fraca.