Найти в Дзене
programmer's notes (python and more)

Связи между классами. Дополнение к разделу ООП в языке Python

Оглавление

Доброго времени суток, читатели, зрители моего канала programmer's notes.

programmer's notes

Эта статья дополнение к курсу

ООП в Python | programmer's notes | Дзен

Статья совсем уже не о Python. Она вообще о классах и объектно-ориентированных подходах. Но при разработке больших программ на основе объектно-ориентированного подхода подобный анализ несомненно будет полезен. Наш краткий обзор, однако, лишь краткий справочник связей (отношений) между классами. Для более детального изучения подобных вопросов вам понадобиться какой-нибудь хороший учебник по UML (Unified Modeling Language).

О связях между классами

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

Наследование

О наследовании мы говорили очень много. Это один из видов связей между классами. При такой связи есть родительский класс и дочерний класс, который наследует методы родительского класса. При наследовании происходит уменьшение множества экземпляров родительского класса путём уточнения их параметров и функциональных возможностей.

Типичная схема наследования классов
Типичная схема наследования классов

Реализация

Реализация это наследование от абстрактного класса. Это мы уже обсуждали.

Агрегация

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

Объекты класса Группа содержать экземпляры класса Студент.
Объекты класса Группа содержать экземпляры класса Студент.

Композиция

Композиция несколько напоминает агрегацию, но существенное отличие. При композиции экземпляры второго класса не могут существовать самостоятельно. Оценка не может существовать сама по себе, он жестко привязана к ученику.

Экземпляры класса Оценка могут существовать только в конкретном экземпляре класса Ученик
Экземпляры класса Оценка могут существовать только в конкретном экземпляре класса Ученик

Ассоциация

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

Собственник может иметь несколько квартир, одна квартира может быть в собственности нескольких собственников
Собственник может иметь несколько квартир, одна квартира может быть в собственности нескольких собственников

Зависимость

Зависимость последний тип связи между классами. Выражается он в том, выполнение методов одного класса зависит от объектов другого класса. Магазин делает заказ на склад. Выполнение заказа зависит от того, есть в наличие на складе тот или иной продукт и его количество. Т.е. метод объекта Магазин должен использовать объект класса Склад, чтобы узнать наличие на складе тех или иных продуктов.

Магазин получает продукты со склада. Запрос на получение продуктов зависит от того, сколько на данных продуктов.
Магазин получает продукты со склада. Запрос на получение продуктов зависит от того, сколько на данных продуктов.

Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Вы запутались в связях между классами
Вы запутались в связях между классами