SOLID

Preview:

Citation preview

SOLID

Виталий Унгурян unguryan@itstep.org

Принципы SOLID

Классы — это блоки, из которых строится приложение Java.

Принципы SOLID

Если материал, из которого построено здание —

некачественный, рано или поздно для такое здание может

развалится.

Принципы SOLID

Некачественно написанные классы однажды могут привести к трудной ситуации в процессе

работы приложения.

Принципы SOLID

Хорошо разработанные и качественно написанные

классы могут ускорить процесс разработки и уменьшить

количество ошибок.

Принципы SOLID

Хорошо разработанные и качественно написанные классы и интерфейсы не

нуждаются в изменениях, при изменении требований к

программе.

Принципы SOLID

SOLID — обозначает пять основных принципов

построения системы на основе ООП.

Принципы SOLID

Принципы SOLID применяются вместе и предназначены для

повышения вероятности того, что программист создаст систему,

которую будет легко поддерживать и расширять в течение долгого

времени.

SOLID Принцип единственной обязанности

Single responsibility principle(S) - на каждый объект должна быть возложена одна единственная обязанность.

SOLID Принцип единственной обязанности

Каждый объект должен иметь только одну обязанность и эта

обязанность должна быть полностью инкапсулирована в

класс.

SOLID Принцип единственной обязанности

Все открытые интерфейсы класса должны быть

направлены исключительно на обеспечение этой обязанности.

SOLID Принцип единственной обязанности

Например, представьте себе модуль, который составляет и печатает отчёт. Такой модуль может измениться по двум причинам. Во-первых, может измениться само содержимое отчёта. Во-вторых, может измениться формат отчёта. Оба этих фактора изменяют модуль по разным причинам: в одном случае изменение содержательное, а во втором — косметическое.

SOLID Принцип единственной обязанности

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

SOLID Принцип открытости/закрытости

Open/closed principle(O) - говорит о том, что программные сущности

должны быть открыты для расширения, но закрыты для

изменений. Объекты в программе могут быть заменены их наследниками без изменения свойств программы.

SOLID Принцип открытости/закрытости

Открыты для расширения.Это означает, что поведение модуля

можно расширить. Когда требования к приложению изменяются, мы

добавляем в модуль новое поведение, отвечающее изменившимся

требованиям. Иными словами, мы можем изменить состав функций

модуля.

SOLID Принцип открытости/закрытости

Закрыты для модификации. Расширение поведения модуля не

сопряжено с изменениями в исходном или двоичном коде

модуля. Двоичное исполняемое

представление модуля, остается неизменным.

SOLID Принцип подстановки Барбары Лисков

Liskov substitution principle(L) - принцип подстановки Барбары Лисков, который говорит, что

функция, использующая базовый тип, должна иметь возможность использовать подтипы базового

типа, не зная об этом.

SOLID Принцип подстановки Барбары Лисков

Производные классы не должны усиливать предусловия (не должны требовать большего от своих клиентов).

Производные классы не должны ослаблять постусловия (должны гарантировать, как минимум тоже, что и супер класс).

Принцип подстановки Барбары Лисков

Принцип подстановки Лисков не является панацеей в вопросах

наследования, он лишь помогает формализовать, в каких пределах может варьироваться поведение

наследника с точки зрения контракта базового класса.

Принцип подстановки Барбары Лисков

В своих трудах Барбара Лисков строила свой анализ на основе

контрактов класса: •предусловий •постусловий •инвариантов.

.

Принцип подстановки Барбары Лисков

С помощью контрактов мы можем хотя бы с некоторой долей

уверенности утверждать, что поведение наследника и базового класса является согласованным.

SOLID Принцип подстановки Барбары Лисков

Производные классы не должны нарушать инварианты базового класса (инварианты базового класса и наследников суммируются)

Производные классы не должны генерировать исключения, не описанные базовым классом.

SOLID Принцип разделения интерфейса

Interface segregation princilpe(I) - говорит о том, что лучше иметь множество

специализированных интерфейсов, чем один универсальный.

Клиенты не должны быть вынуждены реализовывать ненужные методы, которые они не будут использовать

SOLID Принцип инверсии зависимостей

Dependency inversion principle(D) – принцип инверсии зависимости

говорит о том, что зависимости в системе должны строиться на

основе абстракций.

Принцип инверсии зависимостей

Модули нижнего уровня не должны зависеть от модулей верхнего

уровня. И те и те должны зависеть от абстракций.

В свою очередь, абстракции не должны зависеть от деталей. Детали должны зависеть от

абстракций.

SOLID Принцип инверсии зависимостей

Вместо создания зависимостей напрямую, класс должен требовать их у более высокого уровня через аргументы

метода или конструктора. При этом зависимость должна

передаваться не в виде экземпляров конкретных классов, а в виде

интерфейсов или абстрактных классов.

SOLID Принцип инверсии зависимостей

Суть принципа инверсии зависимостей проста: Заменить композицию на

агрегацию.

SOLID Принцип инверсии зависимостей

DI выражается простым правилом:«Зависеть надо от абстракций».

Не должно быть зависимостей от конкретных классов;

Все связи в программе должны вести на абстрактный класс или интерфейс.

SOLID Принцип инверсии зависимостей

Не должно быть переменных, в которых хранятся ссылки на конкретные классы.

Не должно быть классов, производных от конкретных классов.

Не должно быть методов, переопределяющих метод, реализованный в одном из базовых классов.

SOLID коротко

SOLID принципы

SOLID принципы сами по себе не дадут вам прекрасный OO-дизайн!

Существуют обоснованные причины и ситуации когда их лучше не

использовать или обойти, но это должно быть осознанное решение, а не прихоть

или незнание.

SOLID принципы

Необходимо всегда оценивать, что

приобретаем и что улучшаем с использованием

SOLID.

Recommended