solid & grasp

36
SOLID GRASP основные принципы ООП

Upload: devel123

Post on 07-Dec-2014

4.982 views

Category:

Documents


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: SOLID & GRASP

SOLIDGRASP

основные принципы ООП

Page 2: SOLID & GRASP
Page 3: SOLID & GRASP

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

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

Page 4: SOLID & GRASP
Page 5: SOLID & GRASP

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

На каждый объект должна быть возложена одна единственная обязанность.

Page 6: SOLID & GRASP

смешенная ответственность

разделенная ответственность

Page 7: SOLID & GRASP
Page 8: SOLID & GRASP

Open/closed principleПринцип открытости/закрытости

Программные сущности должны быть открыты для расширения, но закрыты для изменения.

Page 9: SOLID & GRASP

открытая "кухня"

закрытая "кухня"

Page 10: SOLID & GRASP
Page 11: SOLID & GRASP

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

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

Page 12: SOLID & GRASP

кот и пес не смогут стать животными :)

Page 13: SOLID & GRASP

треугольник может стать фигурой

Page 14: SOLID & GRASP
Page 15: SOLID & GRASP

Interface segregation principleПринцип изоляции интерфейса

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

Page 16: SOLID & GRASP

жирный интерфейс

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

Page 17: SOLID & GRASP
Page 18: SOLID & GRASP

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

Зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от

абстракций.

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

б) Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Page 19: SOLID & GRASP

сильная зависимость

слабая зависимость

Page 20: SOLID & GRASP

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 Сокрытие реализации

Page 21: SOLID & GRASP

Information ExpertИнформационный эксперт

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

необходимой информации для выполнения обязанности (информационному эксперту).

Тривиально, но очень важно!

Page 22: SOLID & GRASP
Page 23: SOLID & GRASP

CreatorСоздатель

Это применение шаблона Information Expert к проблеме создания объектов.

Класс B должен (может) создавать объекты

класса A когда:● Класс B содержит или агрегирует объекты A.● Класс B записывает экземпляры объектов A.● Класс B активно использует объекты A● Класс B обладает данными инициализации для

объектов A.

Page 24: SOLID & GRASP

Abstract FactoryАбстрактная фабрика

Page 25: SOLID & GRASP

BuilderСтроитель

Page 26: SOLID & GRASP

ControllerКонтроллер

Берет на себя ответственность за выполнение операций, приходящих от

пользователя.

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

компетентным объектам.

Пример: Model-View-Controller

Page 27: SOLID & GRASP
Page 28: SOLID & GRASP

Low CouplingСлабая связанность

Распределяет обязанности между объектами таким образом, чтобы степень связанности между системами оставалась низкой.Степень связанности (coupling) — это мера, определяющая, насколько жестко один элемент связан с другими элементами, либо каким количеством данных о других элементах он обладает. Свойства элемента с низкой степенью связанности(слабым связыванием):● Малое число зависимостей между классами (подсистемами).● Слабая зависимость одного класса (подсистемы) от изменений в

другом классе (подсистеме).● Высокая степень повторного использования подсистем.

Page 29: SOLID & GRASP

High CohesionСильное (функциональное) зацепление

Задает свойство сильного зацепления внутри подсистемы.

Зацепление (cohesion) (функциональное зацепление) — это мера связанности и сфокусированности обязанностей класса.

Объект обладает высокой степенью зацепления, если его обязанности тесно связаны между собой и он не выполняет огромных объемов работы. Antipattern: God object

Page 30: SOLID & GRASP

PolymorphismПолиморфизм

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

системы. Все альтернативные реализации приводятся к общему интерфейсу.

Page 31: SOLID & GRASP
Page 32: SOLID & GRASP

Pure FabricationЧистая выдумка

Класс, не отражающий никакого реального объекта предметной области, но специально

придуманный для усиления зацепления, ослабления связанности или увеличения

степени повторного использования.

Page 33: SOLID & GRASP
Page 34: SOLID & GRASP

IndirectionПосредник

Поддерживает слабую связанность путём назначения обязанностей промежуточному

объекту.

Пример: Model-View-Controller

Page 35: SOLID & GRASP

Protected VariationsСокрытие реализации

Защищает элементы от изменения других элементов, вынося взаимодействия в

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

Поведение может варьироваться лишь с помощью создания другой реализации интерфейса.

Page 36: SOLID & GRASP