SOLID — набор принципов проектирования объектно-ориентированных систем.
Помогает создавать гибкую, поддерживаемую и масштабируемую архитектуру.
Нужны для улучшения структуры и качества кода.
SOLID и ООП: в чём разница?
🔷ООП — методология или стиль программирования ( с основными свойствами: инкапсуляция, наследование и полиморфизм)
🔴SOLID — набор рекомендаций, как правильно использовать принципы ООП, чтобы создать код, который будет легче поддерживать и расширять
ООП даёт инструменты, а SOLID помогает применять их эффективно.
Принципы SOLID
❤️ — Single Responsibility Principle (Принцип единственной ответственности)
Каждый класс должен решать одну задачу
делай модули меньше🟢Пример: класс "Order" отвечает только за управление заказом, а уведомления отправляются другим классом
♥️Связь с ООП: связан с инкапсуляцией — каждый объект скрывает детали своей реализации и выполняет только одну функцию
❤️— Open/Closed Principle (Принцип открытости/закрытости)
Класс должен быть открыт для расширений, но закрыт для изменений
делай модули расширяемыми 🟢чтобы добавить новый тип отчёта, создаём новый класс, не изменяя существующий код
♥️использует наследование - создание новых классов на основе существующих;
и полиморфизм - способность объектов разных типов использовать общий интерфейс для выполнения различных действий
❤️— Liskov Substitution Principle (Принцип подстановки Барбары Лисков)
Подклассы должны заменять родительские классы без ошибок
наследуйся правильно🟢 если класс "Bird" имеет метод "fly", класс "Penguin" не должен его наследовать, так как пингвины не летают
♥️связан с принципом наследования. Подклассы должны правильно реализовывать поведение родительских классов, не нарушать полиморфизм
❤️ — Interface Segregation Principle (Принцип разделения интерфейса)
Узкие специализированные интерфейсы лучше, чем один общий
дроби интерфейсы🟢вместо общего интерфейса "Animal" создаём отдельные интерфейсы "Flyable", "Swimmable", "Runnable"
♥️поддерживает полиморфизм и инкапсуляцию. Это делает классы более гибкими и позволяет зависеть только от нужных методов
❤️ — Dependency Inversion Principle (Принцип инверсии зависимостей)
Модули должны зависеть от абстракций, а не от конкретных реализаций
используй интерфейсы🟢класс "UserService" зависит от интерфейса "Database", а не от конкретной реализации БД
♥️использовании абстракций (отделения концепции от её реализации);
и полиморфизма для уменьшения зависимости между модулями
❗Нарушение SOLID приводит к антипаттернам, таким как "God Object" (класс с множеством задач) или "Spaghetti Code" (запутанный код)
Зачем аналитику SOLID?
➡️ поможет оценить архитектуру на этапе проектирования
🟢например, при добавлении новых способов оплаты система не должна требовать переписывания основного кода (принцип ❤️)
➡️ для составления требований к разработке и задач рефакторинга
🟢 если каждая функция изолирована, то изменения не затронут другие модули (принцип ❤️)
➡️ для согласования архитектурны с разработкой
🟢 корректное использование интерфейсов предотвратит сложную интеграцию с новыми системами в будущем (принцип ❤️)
📎 Материалы
1. Принципы SOLID в программировании — что это такое
2. SOLID
3. Простое объяснение принципов SOLID
4. SOLID принципы: что это такое и зачем они нужны?
5. SOLID — это несложно. С примерами на Python
6. SOLID == ООП?
📚Книги
1. Чистая архитектура — Роберт Мартин
2. Объектно-ориентированный анализ и проектирование с примерами приложений - Грэди Буч
3. Объектно-ориентированное мышление - Мэтт Вайсфельд
4. Приемы объектно-ориентированного проектирования. Паттерны проектирования. Хелм Ричард, Влиссидес Джон
#проектирование
➿➿➿➿➿➿➿➿➿➿
🧑🎓 Больше полезного в базе знаний по системному анализу