code it easy with grasp patterns
DESCRIPTION
ДокладTRANSCRIPT
![Page 1: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/1.jpg)
Code it easy with GRASP Paterns
Alex kucherenkoAndroid Software Engineer
![Page 2: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/2.jpg)
Craig Larman. Применение UML и шаблонов проектирования
GRASP
![Page 3: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/3.jpg)
GRASP stands for
eneralGesponsibilityRssignmentAoftwareSaternsP
![Page 4: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/4.jpg)
Paterns list Creator
Information Expert
Low Coupling
Controller
High Cohesion
Polymorphism
Pure Fabrication
Indirection
Protected Variations
![Page 5: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/5.jpg)
Creator
Проблема
Решение
Кто отвечает за создание нового экземпляра некоторого класса А?
Назначить классу В обязанность создавать экземпляры класса А, если класс В содержит, записывает, активно использует класс А или обладает данными инициализации для объектов А
![Page 6: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/6.jpg)
Creator. Пример
Кто создает объект Square ?
Ответ: класс Board
![Page 7: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/7.jpg)
Creator. Диаграмма
Динамическаямодель
Статическаямодель
![Page 8: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/8.jpg)
Information Expert
Проблема
Решение
Каков базовый принцип распределения обязанностей между объектами?
Назначить эту обязанность тому классу, который обладает достаточнойинформацией для ее выполнения
![Page 9: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/9.jpg)
Information Expert. Диаграмма
![Page 10: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/10.jpg)
Low Coupling
Проблема
Решение
Как уменьшить влияние вносимых изменений на другие объекты?
Минимизировать степень связывания объектов в процессе распределения обязанностей
![Page 11: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/11.jpg)
Controller
ПроблемаКто должен отвечать за получение и координацию выполнения системных операций, поступающих от уровня интерфейса пользователя?
![Page 12: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/12.jpg)
Controller. Диаграмма
![Page 13: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/13.jpg)
ControllerРешение
Присвоить эту обязанность классу, удовлетворяющему одному из следующих условий: Класс представляет всю систему в целом,
корневой объект, устройство или важную подсистему (внешний контроллер)
Класс представляет сценарий некоторого прецедента, в рамках которого выполняется обработка этой системной операции (контроллерпрецедента или контроллер сеанса)
![Page 14: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/14.jpg)
ControllerРекомендации
Для различных прецедентов логично использовать разные контроллеры (контроллеры прецедентов) - контроллеры не должны быть перегружены. Внешний контроллер представляет всю систему целиком, его можно использовать, если он будет не слишком перегруженным (то есть, если существует лишь несколько системных событий)
![Page 15: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/15.jpg)
High Cohesion
ПроблемаКак обеспечить сфокусированность обязанностей объектов, их управляемость и ясность, а заодно выполнение принципа Low Coupling?
![Page 16: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/16.jpg)
High Cohesion
Нельзя просто так взять...
...и сделать все в одном классе
![Page 17: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/17.jpg)
High Cohesion
РешениеОбеспечивать высокий уровень зацепления в процессе распределения обязанностей. Этот принцип нужно использовать для оценки различных альтернатив
![Page 18: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/18.jpg)
High Cohesion
![Page 19: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/19.jpg)
Polymorphism
ПроблемаКак обрабатывать альтернативные варианты поведения на основетипа? Как создавать подключаемые программные компоненты?
РешениеОбязанности распределяются для различных вариантов поведения с использованием полиморфных операций для этого класса
![Page 20: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/20.jpg)
Polymorphism. Диаграмма
![Page 21: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/21.jpg)
Pure FabricationПроблема
Какой класс должен обеспечить реализацию шаблонов High Cohesion и Low Coupling или других принципов проектирования, если шаблон Expert (например) не обеспечивает подходящего решения?
![Page 22: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/22.jpg)
Pure Fabrication
РешениеПрисвоить группу обязанностей с высокой степенью зацепления искусственному классу, не представляющему конкретного понятия предметной области,т.е. синтезировать искусственную сущность для поддержки высокого зацепления, слабого связывания и повторного использования
![Page 23: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/23.jpg)
Pure Fabrication. Пример Какой класс должен сохранять экземпляры
класса "Продажа" в реляционной базе данных?
Если возложить эту обязанность на класс "Продажа", то будем иметь низкую степень зацепления и высокую степень связывания (поскольку класс "Продажа" должен быть связан с интерфейсом реляционной базы данных.
Хранение объектов в реляционной базе данных - это общая задача, которую придется решать для многих классов
![Page 24: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/24.jpg)
Pure Fabrication
РешениеСоздать класс PersistentStorage, ответственный за сохранение обьектов некоторого вида в базе данных
![Page 25: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/25.jpg)
IndirectionПроблема
Как распределить обязанности, чтобы обеспечить отсутствие прямого связывания; снизить уровень связывания объектов, согласно шаблону Low Coupling,и сохранить высокий потенциал повторного использования?
РешениеПрисвоить обязанности по обеспечению связи между службами или компонентами промежуточному объекту
![Page 26: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/26.jpg)
IndirectionСвязанные шаблоны и принципы
Protected variations Low Coupling Многие шаблоны GoF, в том числе Adapter,
Bridge, Observer и Mediator Различные частные случаи использования
шаблона Pure Fabrication
![Page 27: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/27.jpg)
Protected VariationsПроблема
Как спроектировать объекты, подсистемы и систему, чтобы изменение этих элементов не оказывало нежелательного влияния на другие элементы?
РешениеИдентифицировать точки возможных вариаций или неустойчивости;распределить обязанности таким образом, чтобы обеспечить устойчивый интерфейс
![Page 28: Code It Easy With GRASP Patterns](https://reader034.vdocuments.us/reader034/viewer/2022052401/55cf8ef0550346703b9734dc/html5/thumbnails/28.jpg)
Thank You!