Что знаешь про агрегацию ?

Спросят с вероятностью 3%



Агрегация в ООП
— это концепция, при которой один класс включает в себя другой класс в качестве части, но обе части могут существовать независимо друг от друга. Агрегация описывает "имеет-a" отношения между объектами, где один объект является контейнером или коллекцией для другого объекта, но не несет ответственности за его существование.



Рассмотрим простой пример с классами Person и Address:

class Address:

def __init__(self, street, city):

self.street = street

self.city = city



def display(self):

return f"{self.street}, {self.city}"



class Person:

def __init__(self, name, address):

self.name = name

self.address = address # Агрегация



def display(self):

return f"{self.name} lives at {self.address.display()}"



# Создание объектов Address и Person

address = Address("123 Main St", "New York")

person = Person("John Doe", address)



print(person.display()) # Выведет: John Doe lives at 123 Main St, New York




В этом примере:




Класс Address определяет атрибуты улицы и города и метод для отображения адреса.

Класс Person включает объект Address в качестве атрибута.



Оба объекта могут существовать независимо. Объект Address может существовать без объекта Person, и наоборот.



Различие между агрегацией и композицией



Агрегация: Части могут существовать независимо. Если объект-контейнер удален, включенные объекты могут продолжать существовать.

Композиция: Части не могут существовать независимо. Если объект-контейнер удален, все включенные объекты также будут удалены.



Пример агрегации:


class Engine:

def __init__(self, horsepower):

self.horsepower = horsepower



class Car:

def __init__(self, model, engine):

self.model = model

self.engine = engine # Агрегация



engine = Engine(150)

car = Car("Toyota", engine)



# Удаление объекта car не удаляет объект engine

del car

print(engine.horsepower) # Выведет: 150




Пример композиции:

class Engine:

def __init__(self, horsepower):

self.horsepower = horsepower



class Car:

def __init__(self, model, horsepower):

self.model = model

self.engine = Engine(horsepower) # Композиция



car = Car("Toyota", 150)



# Удаление объекта car также удаляет объект engine

del car

# Теперь доступ к engine невозможен




Преимущества



1️⃣Гибкость: Компоненты могут быть легко заменены или изменены без влияния на другие части системы.

2️⃣Повторное использование: Один и тот же объект может быть использован в нескольких агрегатах.

3️⃣Чистая архитектура: Способствует созданию более модульного и поддерживаемого кода.



Агрегация в ООП — это отношение, при котором один объект включает в себя другой, но оба объекта могут существовать независимо. Это полезно для создания гибкой и модульной архитектуры, где компоненты могут быть легко заменены или повторно использованы.



👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент



🔐 База собесов | 🔐 База тестовых