Transcript
SOLIDGRASP
основные принципы ООП
SOLIDБуква Акро-
нимангл. рус.
S SRP Single responsibility principle
Принцип единственной обязанности
O OCP Open/closed principle Принцип открытости/закрытости
L LSP Liskov substitution principle
Принцип подстановки Барбары Лисков
I ISP Interface segregation principle
Принцип изоляции интерфейса
D DIP Dependency inversion principle
Принцип инверсии зависимостей
Single responsibility principleПринцип единственной обязанности
На каждый объект должна быть возложена одна единственная обязанность.
смешенная ответственность
разделенная ответственность
Open/closed principleПринцип открытости/закрытости
Программные сущности должны быть открыты для расширения, но закрыты для изменения.
открытая "кухня"
закрытая "кухня"
Liskov substitution principleПринцип подстановки Барбары Лисков
Объекты в программе могут быть заменены их наследниками без изменения свойств программы.
кот и пес не смогут стать животными :)
треугольник может стать фигурой
Interface segregation principleПринцип изоляции интерфейса
Много специализированных интерфейсов лучше, чем один универсальный.
жирный интерфейс
набор тонких специализированных интерфейсов
Dependency inversion principleПринцип инверсии зависимостей
Зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от
абстракций.
а) Модули более высокого уровня не должны зависеть от модулей более низкого уровня. И те и другие должны зависеть только от абстракций.
б) Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
сильная зависимость
слабая зависимость
GRASPGeneral 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 Сокрытие реализации
Information ExpertИнформационный эксперт
обязанности должны быть назначены объекту, который владеет максимумом
необходимой информации для выполнения обязанности (информационному эксперту).
Тривиально, но очень важно!
CreatorСоздатель
Это применение шаблона Information Expert к проблеме создания объектов.
Класс B должен (может) создавать объекты
класса A когда:● Класс B содержит или агрегирует объекты A.● Класс B записывает экземпляры объектов A.● Класс B активно использует объекты A● Класс B обладает данными инициализации для
объектов A.
Abstract FactoryАбстрактная фабрика
BuilderСтроитель
ControllerКонтроллер
Берет на себя ответственность за выполнение операций, приходящих от
пользователя.
Как правило, не выполняет работу самостоятельно, а делегирует обязанности
компетентным объектам.
Пример: Model-View-Controller
Low CouplingСлабая связанность
Распределяет обязанности между объектами таким образом, чтобы степень связанности между системами оставалась низкой.Степень связанности (coupling) — это мера, определяющая, насколько жестко один элемент связан с другими элементами, либо каким количеством данных о других элементах он обладает. Свойства элемента с низкой степенью связанности(слабым связыванием):● Малое число зависимостей между классами (подсистемами).● Слабая зависимость одного класса (подсистемы) от изменений в
другом классе (подсистеме).● Высокая степень повторного использования подсистем.
High CohesionСильное (функциональное) зацепление
Задает свойство сильного зацепления внутри подсистемы.
Зацепление (cohesion) (функциональное зацепление) — это мера связанности и сфокусированности обязанностей класса.
Объект обладает высокой степенью зацепления, если его обязанности тесно связаны между собой и он не выполняет огромных объемов работы. Antipattern: God object
PolymorphismПолиморфизм
Позволяет обрабатывать альтернативные варианты поведения на основе типа и заменять подключаемые компоненты
системы. Все альтернативные реализации приводятся к общему интерфейсу.
Pure FabricationЧистая выдумка
Класс, не отражающий никакого реального объекта предметной области, но специально
придуманный для усиления зацепления, ослабления связанности или увеличения
степени повторного использования.
IndirectionПосредник
Поддерживает слабую связанность путём назначения обязанностей промежуточному
объекту.
Пример: Model-View-Controller
Protected VariationsСокрытие реализации
Защищает элементы от изменения других элементов, вынося взаимодействия в
фиксированный интерфейс.
Поведение может варьироваться лишь с помощью создания другой реализации интерфейса.
top related