Какие принципы лежат в основе ООП?

«Какие принципы лежат в основе ООП?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Объектно-ориентированное программирование (ООП) основано на четырех фундаментальных принципах ("столпах"):

  1. Абстракция — моделирование ключевых характеристик объекта, скрывая сложные детали реализации.

    • Пример: Класс Car с методами startEngine() и brake(). Водителю не нужно знать, как именно работает двигатель.
  2. Инкапсуляция — объединение данных (полей) и методов для работы с ними в одной единице (классе), а также ограничение прямого доступа к внутреннему состоянию.

    • Пример: Поле private String secret доступно только через публичный метод getSecret().
      class BankAccount {
      private double balance; // Скрытая деталь
      public double getBalance() { return balance; } // Контролируемый доступ
      }
  3. Наследование — механизм, позволяющий классу (потомку) заимствовать структуру и поведение другого класса (родителя), расширяя или изменяя его.

    • Пример: Класс Dog extends Animal наследует общие свойства (возраст, вес) и может добавить свои (bark()).
  4. Полиморфизм — способность объектов с одинаковой спецификацией (интерфейсом или родительским классом) иметь различную реализацию.

    • Пример через переопределение метода:
      Animal myAnimal = new Dog();
      myAnimal.makeSound(); // Вызовется Dog.makeSound()
      myAnimal = new Cat();
      myAnimal.makeSound(); // Вызовется Cat.makeSound()

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