Junior — Middle
Каква е разликата между отношенията на агрегиране и композиция в обектно-ориентираното програмиране?
sobes.tech AI
Отговор от AI
Агрегацията и композицията са два типа отношения между обекти в обектно-ориентираното програмиране (ООП), които описват как обектите са свързани помежду си.
-
Агрегация: това е отношение "има" (has-a), при което един обект съдържа друг, но жизненият цикъл на вложения обект не зависи от контейнера. Вложеният обект може да съществува независимо.
-
Композиция: по-силна форма на агрегация, при която вложеният обект изцяло принадлежи на контейнера и не съществува отделно. Ако контейнерът бъде унищожен, и вложеният обект също изчезва.
Пример:
class Engine {}
// Агрегация: Car има Engine, но Engine може да съществува отделно
class Car {
var engine: Engine?
}
// Композиция: House се състои от Rooms, които не съществуват без къщата
class Room {}
class House {
var rooms: [Room] = []
init() {
rooms = [Room(), Room()]
}
}
В композицията обектите са тясно свързани и се управляват заедно, докато в агрегацията връзката е по-слаба.