Ответ
SOLID — это пять ключевых принципов проектирования в ООП, направленных на создание гибкого, поддерживаемого и масштабируемого кода.
- S (Single Responsibility Principle — Принцип единственной ответственности): Класс должен иметь одну и только одну причину для изменения.
- O (Open/Closed Principle — Принцип открытости/закрытости): Классы должны быть открыты для расширения, но закрыты для модификации.
- L (Liskov Substitution Principle — Принцип подстановки Барбары Лисков): Объекты базового класса должны быть заменяемы объектами его подклассов без нарушения корректности программы.
- I (Interface Segregation Principle — Принцип разделения интерфейса): Много специализированных интерфейсов лучше, чем один универсальный.
- D (Dependency Inversion Principle — Принцип инверсии зависимостей): Зависимости должны строиться на абстракциях (интерфейсах), а не на конкретных реализациях.
Пример нарушения и исправления SRP:
// Нарушение: класс UserService выполняет две разные задачи.
class UserService {
void saveUser(User user) {
// Сохранение пользователя в БД (ответственность #1)
saveToDatabase(user);
// Логирование (ответственность #2)
System.out.println("User saved: " + user.getName());
}
}
// Соблюдение: ответственности разделены между двумя классами.
class UserRepository {
void save(User user) { /* Только сохранение в БД */ }
}
class Logger {
void log(String message) { /* Только логирование */ }
}
// Теперь UserService может использовать оба компонента.
class UserService {
private UserRepository repository;
private Logger logger;
void saveUser(User user) {
repository.save(user);
logger.log("User saved: " + user.getName());
}
}