Найти тему
programmer's notes (python and more)

Основы ООП в Python. Приложение к видеоуроку (Видео 1)

Оглавление

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

Курс по ООП только начинается. Здесь мы просто кратко пересказываем содержание видеоурока

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

ООП

ООП - объектно-ориентированное программирование, это одна из парадигм, воплощённая во многих языках программирования. Надо сказать, что это далеко не панацея. Честно говоря, я не видел исследований, которые бы доказывали эффективность этого подхода. Но, при разработке больших проектов без ООП уже никто не обходится. Основатели парадигмы ООП говорили, что она эффективна, если программа достаточно велика. На сколько велика - никто не знает. Есть предположение, что более тысячи строк. Но если программа невелика, то писать ее в ООП, конечно, не стоит. Больше времени потратите на разработку такой программной структуры.

Что лежит в основе ООП? Давайте попробуем избавиться от универсальных процедур и глобальных переменных, которые используются в разных функциях. Разобьём всю программу на группы функций и переменных. При этом группе желательно сопоставить некий предмет (объект) из внешнего мира или предметной области, которую мы хотим автоматизировать. Но поскольку предмет во внешнем мире как правило не один, а имеет множество подобных объектов, назовем группу классом объектов, с возможностью создавать экземпляры класса или объекты. Например, если класс описывает графическую фигуру, то мы можем "размножать" эти фигуры, создавая объекты - конкретные фигуры.

Теперь о терминах. Функция в классе, обычно называется методом, переменная - свойством. А методы и свойства вместе называются членами класса.

ООП - что это?
ООП - что это?

Абстрагирование

Обычно говорят о трех китах, на которых зиждется все объектно-ориентированное программирование. Добавим к ним четвертое и начнем именно с него (слон номер ноль).

Так вот, абстрагирование важный элемент ООП. Ведь прежде чем создать структуру программы, вы должны продумать, какие классы у вас будут. И значит:

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

Я в видеоуроке уже приводил пример класса - ученик. Ясно, что вес, рост и цвет глаз ученика не имеет значение, если мы описываем учебный процесс. Вот оно абстрагирование. А вот сколько ему лет, его ФИО, в каком классе он учиться - это важно.

Абстрагирование - это же так просто. Отбрасываем ненужное и оставляем важное.
Абстрагирование - это же так просто. Отбрасываем ненужное и оставляем важное.

Инкапсуляция

Слон номер один. Инкапсуляция. Я придерживаюсь такого подхода. Инкапсуляция это возможность объединения кода и данных в одну сущность. Есть несколько иные определения. Не будем о них. Важен именно сам факт возможности такого объединения. При чем это объединение может порождать множество элементов, называемых объектами. И это отражение наших реалий. Естественный язык, как правило, скрывает один важный момент. Мы часто одним словом обозначаем и обобщенное понятие и экземпляр - представитель этого понятия. Например, мы все знаем, что такое телевизор. Но под словом "телевизор" мы ведь понимаем и любой прибор, обладающий определенными свойствами и возможностями и конкретный телевизор висящий на стенке. Просто в естественном языке большую роль играет контекст. А в ООП есть класс - обобщенное понятие и есть его экземпляр - конкретный объект, с которым можно что-то делать.

Инкапсуляция - образование капсулы. А ведь как точно
Инкапсуляция - образование капсулы. А ведь как точно

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

Наследование это слон номер два. На самом деле это тоже взято из жизни. Смотрите, есть просто телевизор, абстрактный. Слово "абстрактный" здесь к месту, но я пока не раскрываю глубину этого понятия. Но есть телевизоры, которые выпускает данное предприятие (фирма). Это тоже телевизоры, но с более конкретным качеством. Можно сказать, что телевизор конкретной фирмы, как класс является наследником (потомком) телевизора "вообще". А телевизор "вообще" это родитель (предок) телевизора из данной фирмы. С точки зрения программирования это означает, что все свойства и методы родителя переносятся его наследнику. Т.е. всё, что есть у родителя переносится его потомку. Но потомок это самостоятельный класс и мы можем добавить в него свойства и методы, которые отсутствуют у родителя.

Да, многим наследование не нравится. Я придерживаюсь того мнения, что глубину наследования следует жестко ограничивать, кроме специальных случаев. Впрочем, "кому нравится поп, а кому попадья". Выбирайте по вкусу.

- Поначалу наш роман не задавался. - А что было потом? - А потом её дядюшка оставил ей наследство...
- Поначалу наш роман не задавался. - А что было потом? - А потом её дядюшка оставил ей наследство...

Полиморфизм

Ну и,наконец, слон номер три. Полиморфизм. Довольно интересное явление, но необходимое, если мы допускаем наследование. Дело в том, что при наследовании:

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

Я приводил пример геометрических фигур. Есть класс "геометрическая фигура". От него наследуют три класса: точка, треугольник, окружность. У всех трех есть метод, который рисует эти фигуры и называется он одинаково, но работает совершенно по-разному. Вот простейший пример полиморфизма.

Способность одного и того же вещества кристаллизоваться в различных формах - химики знают толк в полиморфизме
Способность одного и того же вещества кристаллизоваться в различных формах - химики знают толк в полиморфизме

Говорят, что ООП в Python реализован несколько упрощенно. Но это, мне кажется, не правильное суждение: вот как посчитали нужным, так и реализовали.

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

Объектно-ориентированный способ разбогатеть: Наследование
Объектно-ориентированный способ разбогатеть: Наследование