Как ответить
Основные элементы ООП — это четыре принципа: инкапсуляция, наследование, полиморфизм и абстракция. На практике они позволяют писать переиспользуемый, модульный и легко поддерживаемый код. Для junior-разработчика важно не просто знать определения, а уметь показать, как каждый принцип применяется в реальных задачах.
Инкапсуляция — скрытие внутренней реализации и предоставление доступа через публичные методы. Это уменьшает связанность кода. Например, в Java мы ставим поля private, а для изменения используем геттеры и сеттеры с валидацией:
public class User {
private String email;
public void setEmail(String email) {
if (email.contains("@")) {
this.email = email;
} else {
throw new IllegalArgumentException("Некорректный email");
}
}
}Наследование — создание иерархий классов: дочерний класс получает поля и методы родителя. Избыточное наследование усложняет поддержку, поэтому часто предпочитают композицию. Пример:
class Animal {
void eat() { /* общая логика */ }
}
class Dog extends Animal {
void bark() { /* специфичное */ }
}Полиморфизм — способность объекта вести себя по‑разному через один интерфейс. В Java это достигается через переопределение методов (override) и интерфейсы. Пример: один список List<Shape> может содержать Circle и Square, каждый рисуется по-своему.
interface Shape {
void draw();
}
class Circle implements Shape {
@Override
public void draw() { System.out.println("Рисуем круг"); }
}Абстракция — выделение существенных характеристик объекта, игнорирование неважных деталей. Реализуется через абстрактные классы и интерфейсы. Например, абстрактный класс DatabaseConnection задаёт контракт (connect(), query()), а конкретные драйверы (MySQL, PostgreSQL) реализуют его.
Помимо четырёх принципов, в ООП есть фундаментальные понятия: класс (шаблон) и объект (экземпляр). Объекты взаимодействуют через передачу сообщений — вызов методов. На собеседовании я бы ещё отметил, что принципы не изолированы: хороший дизайн использует их вместе, а нарушение (например, глубокое наследование) ведёт к хрупкому коду.