Sobes.tech
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()]
    }
}

კომპოზიციაში ობიექტები მჭიდროდ არიან დაკავშირებული და ერთობლივად მართავენ, ხოლო აგრეგაციაში კავშირი სუსტიია.