07 Архитектура информационных систем. Принципы grasp
TRANSCRIPT
![Page 1: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/1.jpg)
Архитектура информационных систем
Принципы GRASP
![Page 2: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/2.jpg)
Проектирование на основе обязанностей
• Responsibility-driven design – это общий подход к проектированию программных объектов. – Программные объекты рассматриваются как
люди, имеющие свои обязанности и сотрудничающие с другими людьми для их выполнения
![Page 3: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/3.jpg)
Проектирование на основе распределение обязанностей (GRASP)
Обязанности, относящиеся к действиям объекта• Выполнение действий самим объектом• Инициирование действий других объектов• Управление действиями других объектов
Обязанности, относящиеся к знаниям объекта• Наличие информации о закрытых инкапсулированных
данных• Наличие информации о связанных объектах• Наличие информации о следствиях или вычисляемых
величинах
![Page 4: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/4.jpg)
Шаблон проектирования
• Это именованная пара «проблема-решение», содержащая рекомендации для применения в различных конкретных ситуациях, которую можно использовать в различных контекстах
![Page 5: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/5.jpg)
Шаблоны GRASP
Creator
Information Expert
Low Coupling
Controller
High Cohesion
Polymorphism
Indirection
![Page 6: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/6.jpg)
Creator• Проблема: кто должен отвечать за создание нового
экземпляра некоторого класса?• Решение: назначить классу B обязанность создавать
экземпляры класса A, если выполняется одно из условий:– Класс В содержит или агрегирует объекты А– Класс В записывает экземпляры объектов А– Класс В активно использует объекты А– Класс В обладает данными инициализации, которые будут
передаваться объектам А при их создании
![Page 7: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/7.jpg)
Creator (пример)
![Page 8: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/8.jpg)
Creator (особенности)
• Поддерживает принцип низкого связывания (Low Coupling)
• Родственные шаблоны:– Concrete Factory– Abstract Factory
![Page 9: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/9.jpg)
Information Expert
• Проблема: каков наиболее общий принцип распределения обязанностей между объектами при объектно-ориентированном проектировании?
• Решение: назначить обязанность информационному эксперту – классу, у которого имеется информация, требуемая для выполнения обязанностей
![Page 10: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/10.jpg)
Information Expert (пример)
![Page 11: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/11.jpg)
Information Expert (особенности)
• Поддерживает инкапсуляцию• Поддерживает принцип низкого
связывания (Low Coupling)• Поддерживает принцип высокого
зацепления (High Cohesion)
![Page 12: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/12.jpg)
Low Coupling
• Проблема: как обеспечить зависимость, незначительное влияние изменений и повысить возможность повторного использования?
• Решение: распределить обязанности таким образом, чтобы степень связанности оставалась низкой
![Page 13: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/13.jpg)
Low Coupling (пример)
![Page 14: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/14.jpg)
Low Coupling (особенности)
• Тесно связан с шаблонами Expert и High Cohesion
• Изменение компонентов мало сказывается на других объектах
• Принципы работы и функции компонентов можно понять, не изучая другие объекты
• Удобство повторного использования• Связан с Protected Variations
![Page 15: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/15.jpg)
Controller• Проблема: кто должен отвечать за получение и
координацию выполнения системных операций, поступающих на уровне интерфейса пользователя?
• Решение: делегирование обязанностей по обработке системных сообщений классу, удовлетворяющему одному из следующих условий– Класс представляет всю систему в целом, корневой объект,
устройство или подсистему– Класс представляет сценарий некоторого ВИ, в рамках
которого выполняется обработка всех системных событий
![Page 16: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/16.jpg)
Controller (пример)
![Page 17: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/17.jpg)
![Page 18: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/18.jpg)
Хоро
шо
![Page 19: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/19.jpg)
Пло
хо
![Page 20: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/20.jpg)
Controller (особенности)
• Улучшение условий повторного использования компонентов и подключения интерфейсов
• Контроль состояний вариантов использования
• Похожие шаблоны:– Command– Facade– Layers– Pure Fabrication
![Page 21: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/21.jpg)
High Cohesion
• Проблема: как обеспечить сфокусированность обязанностей объекта, их управляемость и ясность, а заодно выполнение принципа Low Coupling?
• Решение: распределение обязанностей, поддерживающее высокую степень зацепления
![Page 22: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/22.jpg)
High Cohesion (пример)
![Page 23: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/23.jpg)
High Cohesion (особенности)
• Повышается ясность и простота проектных решений
• Упрощается поддержка и доработка• Зачастую обеспечивается слабое
связывание• Улучшаются возможности повторного
использования
![Page 24: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/24.jpg)
Polymorphism
• Проблема: как обрабатывать альтернативные варианты поведения на основе типа? Как создавать подключаемые программные компоненты?
• Решение: если поведение объектов одного типа (класса) может измениться, обязанности распределяются для различных вариантов поведения с использованием полиморфных операций этого класса
![Page 25: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/25.jpg)
Polymorphism (примеры)
![Page 26: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/26.jpg)
Polymorphism (примеры)
![Page 27: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/27.jpg)
Polymorphism (примеры)
![Page 28: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/28.jpg)
Polymorphism (примеры)
![Page 29: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/29.jpg)
Polymorphism (примеры)
![Page 30: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/30.jpg)
Polymorphism (примеры)
![Page 31: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/31.jpg)
Polymorphism (особенности)
• Позволяет легко расширять систему, добавляя новые вариации
• Новые реализации можно вводить без модификации клиентской части приложения
• Связанные шаблоны:– Protected Variations– Adapter, Command, Composite, Proxy, State,
Strategy …
![Page 32: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/32.jpg)
Pure Fabrication• Проблема: какой класс должен обеспечивать реализацию
шаблона High Cohesion и Low Coupling или других принципов проектирования, если шаблон Expert (например) не обеспечивает подходящего решения?
• Решение: присвоить группу обязанностей с высокой степенью зацепления искусственному классу, не представляющему конкретного понятия предметной области, т.е. синтезировать искусственную сущность для поддержки высокого зацепления, слабого связывания и повторного использования
![Page 33: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/33.jpg)
Pure Fabrication (примеры)
![Page 34: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/34.jpg)
Pure Fabrication (особенности)
• Реализуется принцип высокого зацепления• Повышается потенциал повторного
использования• Связанные шаблоны:– Low Coupling– High Cohesion– Adapter, Command, Strategy …
![Page 35: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/35.jpg)
Indirection
• Проблема: как распределить обязанности, чтобы обеспечить отсутствие прямого связывания; снизить уровень связывания объектов и сохранить высокий потенциал повторного использования?
• Решение: присвоить обязанности промежуточному объекту для обеспечения связывания между другими компонентами или службами, которые не связаны между собой напрямую
![Page 36: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/36.jpg)
Indirection (примеры)
![Page 37: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/37.jpg)
Protected Variations
• Проблема: как спроектировать объекты, подсистемы и систему, чтобы изменение этих элементов не оказывало нежелательное влияние на другие элементы?
• Решение: идентифицировать точки возможных вариаций или неустойчивости; распределить обязанности таким образом, чтобы обеспечить устойчивый интерфейс
![Page 38: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/38.jpg)
SOLID принципы проектирования
Принцип единственной ответственности (Single responsibility)
Принцип открытости/закрытости (Open-closed)
Принцип подстановки Барбары Лисков (Liskov substitution)
Принцип разделения интерфейса (Interface segregation)
Принцип инверсии зависимостей (Dependency Invertion)
![Page 39: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/39.jpg)
Принцип единственной ответственности
• «На каждый объект должна быть возложена одна единственная обязанность»
• Для этого проверяем, сколько у нас есть причин для изменения класса — если больше одной, то следует разбить данный класс.
![Page 40: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/40.jpg)
Принцип открытости/закрытости
• «Программные сущности должны быть открыты для расширения, но закрыты для модификации»
• Для этого представляем наш класс как «чёрный ящик» и смотрим, можем ли в таком случае изменить его поведение.
![Page 41: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/41.jpg)
Принцип подстановки Барбары Лисков
• «Объекты в программе могут быть заменены их наследниками без изменения свойств программы»
• Для этого проверяем, не усилили ли мы предусловия и не ослабили ли постусловия. Если это произошло — то принцип не соблюдается
![Page 42: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/42.jpg)
Принцип разделения интерфейса
• «Много специализированных интерфейсов лучше, чем один универсальный»
• Проверяем, насколько много интерфейс содержит методов и насколько разные функции накладываются на эти методы, и если необходимо — разбиваем интерфейсы.
![Page 43: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/43.jpg)
Принцип инверсии зависимостей
• «Зависимости должны строится относительно абстракций, а не деталей»
• Проверяем, зависят ли классы от каких-то других классов(непосредственно инстанцируют объекты других классов и т.д.) и если эта зависимость имеет место, заменяем на зависимость от абстракции.
![Page 44: 07 Архитектура информационных систем. Принципы GRASP](https://reader030.vdocuments.site/reader030/viewer/2022020716/557ed89cd8b42a331d8b4611/html5/thumbnails/44.jpg)
Литература
• Крэг Ларман. Применение UML 2.0 и шаблонов проектирования. М.: ООО «И.Д. Вильямс», 2007