3. SOLID
Буква Акро- англ. рус.
ним
SRP Single responsibility Принцип единственной
S
principle обязанности
OCP Open/closed principle Принцип
O
открытости/закрытости
LSP Liskov substitution Принцип подстановки
L
principle Барбары Лисков
ISP Interface segregation Принцип изоляции
I
principle интерфейса
DIP Dependency inversion Принцип инверсии
D
principle зависимостей
4.
5. Single responsibility principle
Принцип единственной обязанности
На каждый объект должна быть возложена одна
единственная обязанность.
11. Liskov substitution principle
Принцип подстановки Барбары Лисков
Объекты в программе могут быть заменены их
наследниками без изменения свойств программы.
18. Dependency inversion principle
Принцип инверсии зависимостей
Зависимости внутри системы строятся на основе
абстракций. Модули верхнего уровня не зависят от
модулей нижнего уровня. Абстракции не должны
зависеть от деталей. Детали должны зависеть от
абстракций.
а) Модули более высокого уровня не должны зависеть от модулей более
низкого уровня. И те и другие должны зависеть только от абстракций.
б) Абстракции не должны зависеть от деталей. Детали должны зависеть
от абстракций.
20. GRASP
General Responsibility Assignment Software Patterns
№ англ. рус.
1 Information Expert Информационный эксперт
2 Creator Создатель
3 Controller Контроллер
4 Low Coupling Слабая связанность
5 High Cohesion Сильное зацепление
6 Polymorphism Полиморфизм
7 Pure Fabrication Чистая выдумка
8 Indirection Посредник
9 Protected Variations Сокрытие реализации
21. Information Expert
Информационный эксперт
обязанности должны быть назначены
объекту, который владеет максимумом
необходимой информации для выполнения
обязанности (информационному эксперту).
Тривиально, но очень важно!
22.
23. Creator
Создатель
Это применение шаблона Information
Expert к проблеме создания объектов.
Класс B должен (может) создавать объекты
класса A когда:
● Класс B содержит или агрегирует объекты A.
● Класс B записывает экземпляры объектов A.
● Класс B активно использует объекты A
● Класс B обладает данными инициализации для
объектов A.
26. Controller
Контроллер
Берет на себя ответственность за
выполнение операций, приходящих от
пользователя.
Как правило, не выполняет работу
самостоятельно, а делегирует обязанности
компетентным объектам.
Пример: Model-View-Controller
27.
28. Low Coupling
Слабая связанность
Распределяет обязанности между
объектами таким образом, чтобы степень
связанности между системами оставалась
низкой.
Степень связанности (coupling) — это мера, определяющая, насколько
жестко один элемент связан с другими элементами, либо каким
количеством данных о других элементах он обладает.
Свойства элемента с низкой степенью связанности(слабым связыванием):
● Малое число зависимостей между классами (подсистемами).
● Слабая зависимость одного класса (подсистемы) от изменений в
другом классе (подсистеме).
● Высокая степень повторного использования подсистем.
29. High Cohesion
Сильное (функциональное) зацепление
Задает свойство сильного зацепления
внутри подсистемы.
Зацепление (cohesion) (функциональное зацепление) — это мера
связанности и сфокусированности обязанностей класса.
Объект обладает высокой степенью зацепления, если
его обязанности тесно связаны между собой и он не
выполняет огромных объемов работы.
Antipattern: God object
30. Polymorphism
Полиморфизм
Позволяет обрабатывать альтернативные
варианты поведения на основе типа и
заменять подключаемые компоненты
системы.
Все альтернативные реализации приводятся к общему
интерфейсу.
31.
32. Pure Fabrication
Чистая выдумка
Класс, не отражающий никакого реального
объекта предметной области, но специально
придуманный для усиления зацепления,
ослабления связанности или увеличения
степени повторного использования.
33.
34. Indirection
Посредник
Поддерживает слабую связанность путём
назначения обязанностей промежуточному
объекту.
Пример: Model-View-Controller
35. Protected Variations
Сокрытие реализации
Защищает элементы от изменения других
элементов, вынося взаимодействия в
фиксированный интерфейс.
Поведение может варьироваться лишь с помощью
создания другой реализации интерфейса.