Prog Academy
RU UA
Программирование

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

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

У подхода четыре опорных принципа. Инкапсуляция прячет внутреннее устройство и открывает наружу только безопасные операции. Наследование позволяет строить новый класс на основе существующего. Полиморфизм даёт разным классам отвечать на один и тот же вызов по-своему. Абстракция оставляет в интерфейсе только то, что важно снаружи.

Смысл всего этого — управляемость. В большой системе изменения должны затрагивать ограниченный участок кода, а не расходиться волной по всему проекту. ООП — базовая модель в Java, C# и Python, поэтому вопросы о нём звучат почти на каждом собеседовании.

Где применяется

Объектная модель лежит в основе почти всех корпоративных технологий: Spring в Java, ASP.NET Core в C#, Django в Python. Работая с любым из этих фреймворков, вы постоянно создаёте классы — контроллеры, сервисы, сущности базы данных — и наследуете поведение от базовых.

Тот же подход встречается и за пределами бэкенда: страница в автоматизации тестирования описывается классом Page Object, элемент интерфейса во фронтенде — компонентом со своим состоянием. Поэтому вопросы про инкапсуляцию, наследование и полиморфизм звучат почти на каждом техническом собеседовании.

Пример

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

public class Customer {
    protected String name;

    public BigDecimal discount(BigDecimal total) {
        return BigDecimal.ZERO;
    }
}

public class PremiumCustomer extends Customer {
    @Override
    public BigDecimal discount(BigDecimal total) {
        return total.multiply(new BigDecimal("0.15"));
    }
}
Инкапсуляция и полиморфизм: данные скрыты за методами, а наследник переопределяет расчёт под себя.

Частые вопросы

Чем класс отличается от объекта?

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

Что такое инкапсуляция простыми словами?

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

Нужно ли ООП, если писать на Python или JavaScript?

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

Всегда ли наследование — хорошее решение?

Нет. Глубокие цепочки наследования делают код запутанным: изменение в базовом классе неожиданно ломает потомков. Современная практика чаще советует композицию — собирать поведение из отдельных объектов, а наследование использовать там, где связь действительно означает «является разновидностью».

Связанные термины