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

ООП на Python. Абстрактные методы и классы. Приложение к видеоуроку 13

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

Теперь в Дзен есть Подборки. Данная статья относится к подборке

ООП в Python
programmer's notes

Приложение к видеоуроку

Абстрактные методы и классы

Речь идёт о подходе к тому, как формировать объектно-ориентированную структуру программы. Ну в начале простые определения.

Абстрактный метод это метод, который не содержит кода. Предполагается, что код для него будет определён в дочернем классе.

Абстрактный класс это класс, все методы которого абстрактные.

Да и вспомним, что вообще означает слово абстрактный и абстрагирование. Речь идёт о том, что мы отбрасываем что-то, что в данном случае, в данном контексте является несущественным. Применительно к абстрактном классу и методам это означает как раз, что главным является имя и набор параметров абстрактного класса. Содержимое будет определяться в дочерних классах, применительно к той конкретике, которая будет понятна, когда дочерний класс будет создан и станут ясны детали того, что он будет описывать.

Важно понять, что создавая абстрактный класс, мы заранее планируем набор методов — интерфейс, что очевидно на данном уровне.

Чтобы не бы не вдаваться в общие рассуждения, попробуем спланировать абстрактный класс Геометрическая фигура (Gsh). Какие методы, очевидно, должны быть:

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

Конечно, можно продолжать, но для этого нужно определить, какую задачу я решаю, т.е. требования к программе.

 Пример абстрактного класса и дочернего класса.
Пример абстрактного класса и дочернего класса.

На картинке представлен пример абстрактного класса и пример дочернего класса. В дочернем классе мы раскрыли содержимое абстрактных методов.

Конечно, возникает вопрос: а зачем нужно вот такое проектирование классов? Законный, кстати, вопрос. Ответ некоторых удивит.

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

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

Как я уже сказал в видеоуроке, это фактически первая часть темы об абстрактных классов. Мы вернёмся к этому вопросу, когда перейдём к следующему нашему курсу по Python.

Замечание терминологическое.
Часто абстрактным классом называют класс, у которого по-крайней мере один метод абстрактный. Когда все методы абстрактны, то такой абстрактный класс называется
интерфейсом. Но мы не будем пользоваться термином интерфейс.

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

Искусство программирования и "ты должен программировать так, так и так" — это совсем о разном.
Искусство программирования и "ты должен программировать так, так и так" — это совсем о разном.