ENIGMA AI
ENIGMA AI

Назовите и опишите основные принципы объектно-ориентированного программирования (ООП).

встречается 17× junior oop

Как ответить

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

  • Инкапсуляция — скрытие внутреннего состояния и реализация деталей. Данные доступны только через публичные методы. Например, поле balance в банковском аккаунте делаем приватным, а изменение через deposit() — чтобы валидировать сумму. Без инкапсуляции кто угодно может напрямую поменять баланс, и невозможно отследить, когда и как это произошло.
  • Наследование — построение иерархии классов, когда подкласс наследует поля и методы родителя. Например, класс Animal с методом makeSound(), а Dog и Cat переопределяют его. Но важно не злоупотреблять: глубокое наследование усложняет чтение. На практике часто заменяют композицией, если это не строгое «является».
  • Полиморфизм — один интерфейс, разные реализации. Бывает двух видов: параметрический (через generics) и ad-hoc (перегрузка методов). Самый полезный вариант — полиморфизм подтипов: работаем с родительской ссылкой, а конкретный объект решает, какой код выполнить. Например, у нас есть метод processShape(Shape shape), который вызывает shape.draw(). В зависимости от того, круг это или прямоугольник — рисуется по-разному.
  • Абстракция — выделение главного, отбрасывание лишнего. Допустим, мы описываем Vehicle с методом move(). Нас не волнует, как именно машина движется — будто ли двигатель внутреннего сгорания или электро, нас интересует только контракт. На уровне абстрактного класса или интерфейса задаём обязательное поведение, а детали реализации оставляем потомкам. Абстракция тесно связана с инкапсуляцией: первая скрывает сложность, вторая — данные.

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

Ключевые тезисы

  • Инкапсуляция: скрытие полей через private, доступ через методы (геттеры/сеттеры).
  • Наследование: отношение is-a, переопределение методов, но предпочтение композиции.
  • Полиморфизм: единый интерфейс, разное поведение (переопределение, интерфейсы).
  • Абстракция: отделение контракта от реализации (абстрактные классы/интерфейсы).

Что спросят дальше

  • — Чем отличается абстракция от инкапсуляции? Приведите примеры.
  • — Какие проблемы могут возникнуть при использовании множественного наследования? Как их решают в Java?
  • — Как принципы ООП соотносятся с SOLID? Приведите по одному примеру нарушения каждого принципа.

Готовьтесь к собеседованию с ENIGMA AI

AI-суфлёр подсказывает ответы прямо на собеседовании в реальном времени — незаметно для интервьюера.

Скачать приложение