Зарегистрируйтесь, чтобы продолжить обучение

Объектная композиция Python: Полиморфизм

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

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

В этом уроке мы рассмотрим принцип объектной композиции и изучим, как его применять на практике.

Применение объектной композиции

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

Представим, что мы создаем систему для управления больницей. У нас есть классы, которые представляют врачей, пациентов и отделения:

class Doctor:
    def __init__(self, name):
        self.name = name


class Patient:
    def __init__(self, name):
        self.name = name


class Department:
    def __init__(self, name):
        self.name = name

В данном примере у нас есть три базовых класса: Doctor — врач, Patient — пациент и Department — отделение. Каждый из этих классов представляет собой отдельную сущность в контексте больницы.

В больнице у каждого врача есть список пациентов, и каждый врач работает в определенном отделении. Это можно представить с помощью композиции:

class Doctor:
    def __init__(self, name, department):
        self.name = name
        self.department = department
        self.patients = []

    def add_patient(self, patient):
        self.patients.append(patient)


class Patient:
    def __init__(self, name):
        self.name = name


class Department:
    def __init__(self, name):
        self.name = name

Теперь, когда мы начинаем строить взаимосвязи между этими классами, вступает в игру принцип композиции. В нашем контексте каждый врач (Doctor) работает в определенном отделении (Department) и имеет список пациентов (Patient). Мы реализуем эти связи в классе Doctor путем включения экземпляров Department и Patient в его состав.

В этом примере класс Doctor состоит из объектов классов Department и Patient. Мы можем добавить пациентов к врачу с помощью метода add_patient:

surgery = Department("Surgery")
dr_smith = Doctor("Dr. Smith", surgery)
patient1 = Patient("John Doe")
patient2 = Patient("Jane Doe")

dr_smith.add_patient(patient1)
dr_smith.add_patient(patient2)

Здесь мы создаем экземпляры каждого из наших классов и налаживаем связи между ними. Мы создаем отделение, врача, привязываем врача к отделению и добавляем пациентов в список пациентов врача.

В результате у нас получается сложная структура данных, которая отражает реальную структуру больницы. Это позволяет нам легко моделировать сложные отношения между различными объектами.

Выводы

Объектная композиция — инструмент для создания сложных структур данных. Она позволяет создавать гибкие и масштабируемые системы, которые легко расширяются и поддерживаются.


Дополнительные материалы

  1. Архитектура и ООП
  2. Принцип разделения интерфейса

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff