Агрегация и композиция: основные принципы в программировании и ООП

Агрегация и композиция - два основных способа организации связей между объектами в объектно-ориентированном программировании.

Агрегация представляет собой связь "часть-целое", где объекты могут существовать независимо от своего контейнера. То есть, если контейнер уничтожается, то его составляющие объекты могут продолжать свое существование. В агрегации один объект содержит ссылки на другие объекты, и те могут быть использованы и другими объектами. Например, в случае класса "Команда" и его членов (игроков) - один объект (команда), содержащий ссылки на множество других объектов (игроки). При удалении команды игроки могут продолжать существовать и быть привязанными к другой команде.

Вот пример класса "Компания", который содержит ссылки на объекты класса "Сотрудник":

python
class Company:
    def __init__(self, employees):
        self.employees = employees
class Employee:
    def __init__(self, name, position):
        self.name = name
        self.position = position
employee1 = Employee("John Doe", "Manager")
employee2 = Employee("Jane Smith", "Developer")
employee3 = Employee("Bob Johnson", "Designer")
employees = [employee1, employee2, employee3]
company = Company(employees)

Композиция, с другой стороны, представляет собой более строгую связь "часть-целое", где объекты существуют только в контексте своего контейнера. Если контейнер уничтожается, также уничтожаются и его составляющие объекты. В композиции контейнер "владеет" своими частями и контролирует их жизненный цикл. Например, класс "Учебная группа" и объекты класса "Студент" могут быть примером композиции. Если учебная группа расформировывается, все студенты также будут расформированы и уничтожены.

Вот пример класса "Учебная группа", который владеет объектами класса "Студент":

python
class StudyGroup:
    def __init__(self):
        self.students = []
    def add_student(self, student):
        self.students.append(student)
    def remove_student(self, student):
        self.students.remove(student)
class Student:
    def __init__(self, name):
        self.name = name
group = StudyGroup()
student1 = Student("John Doe")
group.add_student(student1)
student2 = Student("Jane Smith")
group.add_student(student2)
group.remove_student(student1)

В данном примере объекты класса "Студент" являются исключительно частями объекта класса "Учебная группа". И если группа удалена, все студенты также будут удалены.

Похожие вопросы на: "агрегация и композиция "

Как работать с XML в Excel: советы и инструкции
Git Delete Branch: Learn How to Remove a Branch in Git
SSH и GitHub: безопасный доступ к репозиториям и проектам
Java Length: Measuring Strings and Arrays Made Easy
Newtonsoft Json - мощный инструмент для работы с JSON данными
How to Deal with a Self Signed Certificate in Certificate Chain Error
Как написать калькулятор на Python
Rust vs C: какой язык программирования выбрать?
Центрирование элементов с использованием CSS
Изучение механизма MRO в Python