Top Banner
Code it easy with GRASP Pa terns Alex kucherenko Android Soſtware Engineer
28

Code It Easy With GRASP Patterns

Jan 16, 2016

Download

Documents

Доклад
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Code It Easy With GRASP Patterns

Code it easy with GRASP Paterns 

Alex kucherenkoAndroid Software Engineer

Page 2: Code It Easy With GRASP Patterns

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

GRASP

Page 3: Code It Easy With GRASP Patterns

GRASP stands for

eneralGesponsibilityRssignmentAoftwareSaternsP

Page 4: Code It Easy With GRASP Patterns

Paterns list Creator

Information Expert

Low Coupling

Controller

High Cohesion

Polymorphism

Pure Fabrication

Indirection

Protected Variations

Page 5: Code It Easy With GRASP Patterns

Creator

Проблема

Решение

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

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

Page 6: Code It Easy With GRASP Patterns

Creator. Пример

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

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

Page 7: Code It Easy With GRASP Patterns

Creator. Диаграмма

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

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

Page 8: Code It Easy With GRASP Patterns

Information Expert

Проблема

Решение

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

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

Page 9: Code It Easy With GRASP Patterns

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

Page 10: Code It Easy With GRASP Patterns

Low Coupling

Проблема

Решение

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

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

Page 11: Code It Easy With GRASP Patterns

Controller

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

Page 12: Code It Easy With GRASP Patterns

Controller. Диаграмма

Page 13: Code It Easy With GRASP Patterns

ControllerРешение

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

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

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

Page 14: Code It Easy With GRASP Patterns

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

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

Page 15: Code It Easy With GRASP Patterns

High Cohesion

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

Page 16: Code It Easy With GRASP Patterns

High Cohesion

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

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

Page 17: Code It Easy With GRASP Patterns

High Cohesion

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

Page 18: Code It Easy With GRASP Patterns

High Cohesion

Page 19: Code It Easy With GRASP Patterns

Polymorphism

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

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

Page 20: Code It Easy With GRASP Patterns

Polymorphism. Диаграмма

Page 21: Code It Easy With GRASP Patterns

Pure FabricationПроблема

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

Page 22: Code It Easy With GRASP Patterns

Pure Fabrication

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

Page 23: Code It Easy With GRASP Patterns

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

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

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

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

Page 24: Code It Easy With GRASP Patterns

Pure Fabrication

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

Page 25: Code It Easy With GRASP Patterns

IndirectionПроблема

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

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

Page 26: Code It Easy With GRASP Patterns

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

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

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

шаблона Pure Fabrication

Page 27: Code It Easy With GRASP Patterns

Protected VariationsПроблема

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

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

Page 28: Code It Easy With GRASP Patterns

Thank You!