Проверяет знание принципов проектирования SOLID.
SOLID — это 5 принципов ООП для создания поддерживаемого и расширяемого кода:
SRP (Single Responsibility) — один класс = одна ответственность.
OCP (Open-Closed) — классы открыты для расширения, но закрыты для изменений.
LSP (Liskov Substitution) — подклассы должны заменять родительские классы.
ISP (Interface Segregation) — маленькие интерфейсы лучше больших.
DIP (Dependency Inversion) — зависимости от абстракций, а не реализаций.
Проблема: Класс User отвечает за сохранение в БД и отправку email.
Решение: Разделить на User, UserRepository, EmailService.
Пример:
interface Discount { double apply(double price); }
class RegularDiscount implements Discount { ... }
class PremiumDiscount implements Discount { ... }Новые скидки добавляются без изменения существующего кода.
Нарушение:
class Square extends Rectangle {
void setWidth(int w) {
super.setWidth(w);
super.setHeight(w); // Неожиданное поведение для Rectangle!
}
}Проблема:
interface Worker {
void code();
void cook();
}
// Программист вынужден реализовывать ненужный cook()!Плохо:
class UserService {
private MySQLDatabase db; // Зависимость от конкретной БД.
} Хорошо:
class UserService {
private Database db; // Зависимость от абстракции.
}Вывод:
SOLID упрощает поддержку и масштабирование кода.