Объектно-ориентированное программирование (ООП)
Подход, при котором программа строится из объектов — данных вместе с действиями над ними, — описанных классами.
Объектно-ориентированное программирование (ООП) — способ строить программу из объектов. Объект объединяет данные (поля) и действия над ними (методы). Описание объекта называется классом: класс «Счет» задает, что у каждого счета есть владелец и баланс и что на него можно зачислить деньги. Конкретные счета клиентов — объекты этого класса.
Как это выглядит в коде
# Python
class Account:
def __init__(self, owner):
self.owner = owner
self._balance = 0
def deposit(self, amount):
if amount <= 0:
raise ValueError("Сумма должна быть положительной")
self._balance += amount
Здесь Account — класс, owner и _balance — поля, deposit — метод. Код, который создает счет и пополняет его, не трогает баланс напрямую: правило «сумма должна быть положительной» проверяет сам объект.
Четыре принципа ООП
- Инкапсуляция — объект скрывает внутреннее устройство и меняет свои данные только через методы.
- Наследование — новый класс получает поля и методы существующего и дополняет их: «Кредитный счет» наследует «Счет» и добавляет лимит.
- Полиморфизм — разные объекты отвечают на один и тот же вызов по-своему: метод «оплатить» работает и для карты, и для перевода через СБП.
- Абстракция — в класс попадает только то, что важно для задачи. Для бухгалтерии у сотрудника важны оклад и стаж, а цвет глаз — нет.
Где применяется
На идеях ООП построены Java, C#, C++, Kotlin, Swift, Python, TypeScript. Подход хорошо подходит для корпоративных систем: понятия предметной области — клиент, договор, платеж, заявка — естественно превращаются в классы, а правила работы с ними живут внутри этих классов, а не разбросаны по программе. Типовые решения из объектов собраны в шаблонах проектирования.
Сильные стороны и подводные камни
- Плюсы: код организован вокруг понятий бизнеса, изменения локализованы внутри классов, готовые классы переиспользуются.
- Минусы: глубокие цепочки наследования становятся хрупкими — изменение базового класса ломает наследников. Поэтому в современной практике чаще собирают объекты из частей (композиция), а не наследуют.
- Лишняя сложность: для простого скрипта иерархия классов только мешает — ООП окупается в больших и долгоживущих системах.
ООП и другие подходы
ООП не единственный способ писать программы. В функциональном программировании основа — функции и неизменяемые данные. Большинство современных языков сочетают оба подхода, и в одном проекте их используют вместе: объекты описывают предметную область, а функции — обработку данных.