code it easy with grasp patterns.pptx

28
Code it easy with GRASP Patterns Alex kucherenko Android Software Engineer

Upload: -

Post on 19-Dec-2015

11 views

Category:

Documents


0 download

TRANSCRIPT

Code it easy with GRASP Patterns

Alex kucherenkoAndroid Software Engineer

Craig Larman. Применение UML и шаблонов проектирования

GRASP

GRASP stands for

eneralGesponsibilityRssignmentAoftwareSatternsP

Patterns list Creator

Information Expert

Low Coupling

Controller

High Cohesion

Polymorphism

Pure Fabrication

Indirection

Protected Variations

Creator

Проблема

Решение

Кто отвечает за создание нового экземпляра некоторого класса А?

Назначить классу В обязанность создавать экземпляры класса А, если класс В содержит, записывает, активно использует класс А или обладает данными инициализации для объектов А

Creator. Пример

Кто создает объект Square ?

Ответ: класс Board

Creator. Диаграмма

Динамическаямодель

Статическаямодель

Information Expert

Проблема

Решение

Каков базовый принцип распределения обязанностей между объектами?

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

Information Expert. Диаграмма

Low Coupling

Проблема

Решение

Как уменьшить влияние вносимых изменений на другие объекты?

Минимизировать степень связывания объектов в процессе распределения обязанностей

Controller

ПроблемаКто должен отвечать за получение и координацию выполнения системных операций, поступающих от уровня интерфейса пользователя?

Controller. Диаграмма

ControllerРешение

Присвоить эту обязанность классу, удовлетворяющему одному из следующих условий: Класс представляет всю систему в целом,

корневой объект, устройство или важную подсистему (внешний контроллер)

Класс представляет сценарий некоторого прецедента, в рамках которого выполняется обработка этой системной операции (контроллерпрецедента или контроллер сеанса)

ControllerРекомендации

Для различных прецедентов логично использовать разные контроллеры (контроллеры прецедентов) - контроллеры не должны быть перегружены. Внешний контроллер представляет всю систему целиком, его можно использовать, если он будет не слишком перегруженным (то есть, если существует лишь несколько системных событий)

High Cohesion

ПроблемаКак обеспечить сфокусированность обязанностей объектов, их управляемость и ясность, а заодно выполнение принципа Low Coupling?

High Cohesion

Нельзя просто так взять...

...и сделать все в одном классе

High Cohesion

РешениеОбеспечивать высокий уровень зацепления в процессе распределения обязанностей. Этот принцип нужно использовать для оценки различных альтернатив

High Cohesion

Polymorphism

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

РешениеОбязанности распределяются для различных вариантов поведения с использованием полиморфных операций для этого класса

Polymorphism. Диаграмма

Pure FabricationПроблема

Какой класс должен обеспечить реализацию шаблонов High Cohesion и Low Coupling или других принципов проектирования, если шаблон Expert (например) не обеспечивает подходящего решения?

Pure Fabrication

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

Pure Fabrication. Пример Какой класс должен сохранять экземпляры

класса "Продажа" в реляционной базе данных?

Если возложить эту обязанность на класс "Продажа", то будем иметь низкую степень зацепления и высокую степень связывания (поскольку класс "Продажа" должен быть связан с интерфейсом реляционной базы данных.

Хранение объектов в реляционной базе данных - это общая задача, которую придется решать для многих классов

Pure Fabrication

РешениеСоздать класс PersistentStorage, ответственный за сохранение обьектов некоторого вида в базе данных

IndirectionПроблема

Как распределить обязанности, чтобы обеспечить отсутствие прямого связывания; снизить уровень связывания объектов, согласно шаблону Low Coupling,и сохранить высокий потенциал повторного использования?

РешениеПрисвоить обязанности по обеспечению связи между службами или компонентами промежуточному объекту

IndirectionСвязанные шаблоны и принципы

Protected variations Low Coupling Многие шаблоны GoF, в том числе Adapter,

Bridge, Observer и Mediator Различные частные случаи использования

шаблона Pure Fabrication

Protected VariationsПроблема

Как спроектировать объекты, подсистемы и систему, чтобы изменение этих элементов не оказывало нежелательного влияния на другие элементы?

РешениеИдентифицировать точки возможных вариаций или неустойчивости;распределить обязанности таким образом, чтобы обеспечить устойчивый интерфейс

Thank You!