Upload
arybik
View
92
Download
1
Embed Size (px)
Citation preview
GRASP PRINCIPLES By Anastasiya Rybik
ШАБЛОН ПРОЕКТИРОВАНИЯ
повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста.
WHAT IS GRASP ?General
Responsibility
Assignment
Software
Pattern
WHAT IS GRASP ?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
обязанности должны быть назначены объекту, который владеет максимумом необходимой информации для выполнения обязанности.
Customer ItemShopping
Card
getTotal
CREATOR
Проблема: Кто должен отвечать за создание нового экземпляра некоторого класса?
Решение:Класс В создает экземпляры класса А, если: Класс B содержит или агрегирует объекты A. Класс B записывает экземпляры объектов A. Класс B активно использует объекты A Класс B обладает данными инициализации для объектов A
LOW COUPLING
Проблема: Как обеспечить зависимость, незначительное влияние изменений и повысить возможность повторного использования?
Решение:Распределить обязанности таким образом, чтобы степень связанности оставалась низкой.
HIGH COHESION
Проблема: Как обеспечить возможность управления сложностью, обеспечить сфокусированность обязанностей объекта, их управляемость и ясность
Решение:Распределение обязанности поддерживающее высокую степень зацепления
CONTROLLER
Проблема: Кто должен отвечать за обработку входных системных событий?
Решение:Делегирование обязанностей по обработке входных системных сообщений компетентным классам:Внешний контроллер – класс, который представляет всю систему в целом
Класс, который представляет сценарий использования, в рамках которого выполняется обработка всех системных событий
CONTROLLER
Business Object
User Interface
Controller
CONTROLLER
Признаки плохого контроллера:1. Единственный класс контроллера в системе,
получающий все системные сообщения, которых поступает слишком много
2. Контроллер сам выполняет все задачи, не делегируя обязанности другим классам (нарушение принципов Information Expert и High Cohesion)
3. Контроллер имеет много атрибутов и содержит значительный объем информации о системе, либо дублирует информацию в других объектах
POLYMORPHISM
Проблема: Как обрабатывать альтернативные варианты поведения на основе типа?
Решение:Если поведение объектов одного типа может измениться, обязанности распределяются для различных вариантов поведения с использованием полиморфных операций этого класса. Все альтернативные реализации приводятся к общему интерфейсу
getArea()getArea()
getArea()
POLYMORPHISM
Circle
Shape
Triangle
PURE FABRICATION
Проблема: Какой класс должен обеспечивать реализацию Low Coupling и Hight Cohesion, если шаблон Information Expert (например) не обеспечивает подходящего решения?
Решение:Создать искусственный класс, не отражающий реального объекта предметной области
PURE FABRICATION
ShapeShapeReposi
tory DB
INDIRECTION
Проблема: Как распределить обязанности, чтобы обеспечить отсутствие прямого связывания и сохранить высокий потенциал повторного использования?
Решение:Присвоить обязанности промежуточному объекту для обеспечения связывания между другими компонентами или службами, которые не связаны между собой напрямую
INDIRECTION
Object1
Object2
Object3
Object4
INDIRECTION
Object1
Object2
Object3
Object4
Indirection Object
PROTECTED VARIATIONS
Проблема: Как спроектировать объекты, подсистемы и систему, чтобы изменение этих элементов не оказывало нежелательное влияние на другие элементы?
Решение:Идентифицировать точки возможных вариаций или неустойчивости; распределить обязанности таким образом, чтобы обеспечить устойчивый интерфейс
PROTECTED VARIATIONS
Shopping Card
IProduct
Electronics
Clothing
Grocery
QUESTIONS?