Найти тему
DEBAGanov

Java 31. Что такое SOLID? Приведите примеры.

SOLID - это аббревиатура, используемая для описания пяти основных принципов объектно-ориентированного программирования (ООП), которые помогают разработчикам создавать более поддерживаемый и расширяемый код.

  • Принцип единственной ответственности (Single Responsibility Principle, SRP) - класс должен иметь только одну ответственность. Например, класс, отвечающий за работу с базой данных, не должен также заниматься обработкой пользовательского ввода или выводом на экран.
  • Принцип открытости/закрытости (Open/Closed Principle, OCP) - классы должны быть открыты для расширения, но закрыты для модификации. Это означает, что новый функционал должен добавляться через добавление новых классов или методов, а не изменение существующих.
  • Принцип подстановки Барбары Лисков (Liskov Substitution Principle, LSP) - объекты одного класса могут быть заменены объектами другого класса, производного от него, не нарушая работоспособность программы. Например, класс "фрукт" может быть заменен производными классами "яблоко", "груша", "апельсин" и т. д.
  • Принцип разделения интерфейса (Interface Segregation Principle, ISP) - клиенты не должны зависеть от интерфейсов, которые они не используют. Интерфейсы должны быть маленькими и специфическими для конкретных задач.
  • Принцип инверсии зависимостей (Dependency Inversion Principle, DIP) - модули верхнего уровня не должны зависеть от модулей нижнего уровня. Их зависимости должны быть инвертированы через абстракции. Например, класс, который использует базу данных, должен зависеть от абстрактного интерфейса базы данных, а не от конкретной реализации базы данных.

Примеры применения этих принципов:

  • SRP: класс UserService отвечает только за работу с пользователями, а не занимается другими функциями, такими как работа с базой данных или обработка ввода/вывода.
  • OCP: вместо изменения класса UserService при добавлении новой функциональности связанной с пользователями, создается новый класс, например, UserPermissionsService.
  • LSP: производный класс Apple является полноценной заменой базового класса Fruit. Таким образом, метод, который ожидает объект типа Fruit, может использовать объект типа Apple без изменения своей работы.
  • ISP: интерфейс UserService содержит только методы, относящиеся к пользователям. Таким образом, клиентский код, который использует UserService, не зависит от других, неиспользуемых интерфейсов.
  • DIP: класс UserService зависит от абстрактного интерфейса UserDatabase, а не от конкретной реализации базы данных. Это позволяет легко заменять одну реализацию базы данных на другую без изменения UserService.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov