SOLID & GRASP

Post on 07-Dec-2014

4.975 views 2 download

description

 

Transcript of SOLID & GRASP

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

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

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

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