Объектно-ориентированное программирование (ООП)

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

Объектно-ориентированное программирование (ООП) — способ строить программу из объектов. Объект объединяет данные (поля) и действия над ними (методы). Описание объекта называется классом: класс «Счет» задает, что у каждого счета есть владелец и баланс и что на него можно зачислить деньги. Конкретные счета клиентов — объекты этого класса.

Как это выглядит в коде

# 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. Подход хорошо подходит для корпоративных систем: понятия предметной области — клиент, договор, платеж, заявка — естественно превращаются в классы, а правила работы с ними живут внутри этих классов, а не разбросаны по программе. Типовые решения из объектов собраны в шаблонах проектирования.

Сильные стороны и подводные камни

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

ООП и другие подходы

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