Найти в Дзене

Шпаргалка по ООП в Python: Абстракция, Инкапсуляция, Наследование, Полиморфизм

Объектно-ориентированное программирование (ООП) основывается на четырёх основополагающих принципах: абстракция, инкапсуляция, наследование и полиморфизм. Подписывайтесь на мой канал в Телеграмм, чтобы ничего не пропустить. Каждый из этих принципов помогает сделать код более структурированным, модульным и легко поддерживаемым. Абстракция — это процесс выделения ключевых характеристик объекта, скрывая при этом ненужные или сложные детали реализации. Она позволяет сосредоточиться на поведении объекта, а не на его внутреннем устройстве. Абстракция — это основа, на которой строятся другие принципы ООП. Она помогает выделить важные характеристики объекта, а инкапсуляция, наследование и полиморфизм позволяют реализовать эти характеристики на практике. Здесь класс Vehicle задаёт общий интерфейс для транспортных средств, а классы Car и Motorcycle реализуют его по-своему. Инкапсуляция — это процесс объединения данных и методов, которые работают с этими данными, в одном объекте, а также сокрыти
Оглавление

Объектно-ориентированное программирование (ООП) основывается на четырёх основополагающих принципах: абстракция, инкапсуляция, наследование и полиморфизм.

Подписывайтесь на мой канал в Телеграмм, чтобы ничего не пропустить.

Каждый из этих принципов помогает сделать код более структурированным, модульным и легко поддерживаемым.

1. Абстракция

Что это такое?

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

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

Ключевые моменты:

  • Абстракция используется для создания шаблонов или интерфейсов, которые потом реализуются в конкретных классах.
  • В Python абстракция реализуется с помощью абстрактных классов и методов через модуль abc.

Пример: Абстрактный класс

-2

Здесь класс Vehicle задаёт общий интерфейс для транспортных средств, а классы Car и Motorcycle реализуют его по-своему.

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

Что это такое?

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

Ключевые моменты:

  • В Python доступ к атрибутам можно ограничить с помощью соглашений:_protected_attr — защищённые атрибуты (рекомендуется доступ только внутри класса и его наследников).
    __private_attr — приватные атрибуты (скрытые, но доступные через механизм "name mangling").
  • Для управления доступом к атрибутам используются геттеры, сеттеры и свойства (@property).

Пример: Инкапсуляция с использованием приватных атрибутов

-3

Приватный атрибут __balance недоступен извне, что предотвращает его случайное изменение.

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

Что это такое?

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

Ключевые моменты:

  • Родительский (базовый) класс передаёт свои свойства и методы дочерним классам.
  • Дочерний класс может переопределять методы родительского класса.
  • Функция super() используется для обращения к методам родительского класса.

Пример: Наследование с переопределением методов

-4

Класс Dog и Cat наследуют от базового класса Animal и переопределяют метод speak.

4. Полиморфизм

Что это такое?

Полиморфизм — это способность объектов разных классов использовать один и тот же интерфейс. Это позволяет писать код, который может работать с разными типами объектов единообразно.

Другие определения полиморфизма:

Полиморфизм — это способность одного и того же действия (метода, функции) работать по-разному в зависимости от ситуации.

Пример на пальцах: представь, что у тебя есть команда "Ехать". Машина поедет, используя колёса, лодка — по воде, а самолёт — полетит. Команда одна (метод), но каждый объект выполняет её по-своему.

Применительно к объектам, полиморфизм — это способность объектов разного типа реагировать на один и тот же метод (или сообщение) по-разному.

или вот, еще определение: Полиморфизм в контексте ООП означает, что разные объекты могут реагировать на один и тот же запрос, проявляя разное поведение в зависимости от своего типа.

Полиморфизм — свойство системы, позволяющее использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Виды полиморфизма:

1. Статический полиморфизм — реализуется через перегрузку методов. В Python это реализуется ограниченно (В Python перегрузка методов не поддерживается напрямую, как в Java или C++. Однако можно симулировать перегрузку, используя аргументы по умолчанию или через проверку типов внутри метода.).

2. Динамический полиморфизм — реализуется через наследование и переопределение методов.

Пример 1: Статический полиморфизм

С использованием аргументов по умолчанию:

-5

Здесь метод add ведёт себя по-разному в зависимости от количества переданных аргументов.

С проверкой типов внутри метода:

-6

Пример 2: Динамический полиморфизм

-7

Здесь функция print_area работает с любым объектом, который реализует метод area, независимо от его класса.

Полиморфизм в Python также может быть реализован через функции, которые работают с объектами разных типов (Python):

-8

Чуть другая реализация в Python называется утиной типизацией (Duck Typing). Это интересный подход, который подразумевает, что объект рассматривается по своим методам и поведению, а не по типу. Если объект "выглядит как утка и крякает как утка", то его можно считать уткой.

Пример (Python):

-9

Такой подход, конечно, потенциально может быть не безопасным. Пишите в комментариях почему ).

Для более строгого контроля можно использовать абстрактные классы с помощью модуля abc (Abstract Base Classes). Это приближает Python к более формализованной, типобезопасной реализации полиморфизма.

Пример (Python):

-10

Зачем следовать принципам ООП?

Следование принципам ООП делает код более понятным, гибким и легко поддерживаемым. Зачеркнул, так как утверждение спорное. Зависит от решаемой задачи, уровня программиста и других факторов.
Тем не менее вот главные преимущества:

  1. Масштабируемость: Код можно легко расширять, добавляя новые классы и объекты, не нарушая существующую логику.
  2. Повторное использование: Благодаря наследованию и полиморфизму, разработчики могут избегать дублирования кода и эффективно использовать уже написанные решения.
  3. Упрощение поддержки: Инкапсуляция и абстракция делают код более модульным, что упрощает его поддержку и обновление.
  4. Читаемость: Хорошо структурированный код по принципам ООП легче понять другим разработчикам, что особенно важно при командной работе.

Итог

  • Абстракция: Скрывает детали реализации, предоставляя общий интерфейс.
  • Инкапсуляция: Скрывает внутренние данные объекта, ограничивая доступ к ним.
  • Наследование: Позволяет использовать повторно код родительских классов.
  • Полиморфизм: Обеспечивает единый интерфейс для работы с объектами разных классов.

Эти принципы делают код гибким, понятным и легко модифицируемым.

Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?

Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика

Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.

Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам

-11