SlideShare a Scribd company logo
Архитектура информационных
систем
Принципы GRASP
Проектирование на основе обязанностей
• Responsibility-driven design – это общий
подход к проектированию программных
объектов.
– Программные объекты рассматриваются как
люди, имеющие свои обязанности и
сотрудничающие с другими людьми для их
выполнения
Проектирование на основе распределение
обязанностей (GRASP)
Обязанности, относящиеся к действиям объекта
• Выполнение действий самим объектом
• Инициирование действий других объектов
• Управление действиями других объектов
Обязанности, относящиеся к знаниям объекта
• Наличие информации о закрытых инкапсулированных
данных
• Наличие информации о связанных объектах
• Наличие информации о следствиях или вычисляемых
величинах
Шаблон проектирования
• Это именованная пара «проблема-
решение», содержащая рекомендации для
применения в различных конкретных
ситуациях, которую можно использовать в
различных контекстах
Шаблоны GRASP
Creator
Information Expert
Low Coupling
Controller
High Cohesion
Polymorphism
Indirection
Creator
• Проблема: кто должен отвечать за создание нового
экземпляра некоторого класса?
• Решение: назначить классу B обязанность создавать
экземпляры класса A, если выполняется одно из условий:
– Класс В содержит или агрегирует объекты А
– Класс В записывает экземпляры объектов А
– Класс В активно использует объекты А
– Класс В обладает данными инициализации, которые будут
передаваться объектам А при их создании
Creator (пример)
Creator (особенности)
• Поддерживает принцип низкого
связывания (Low Coupling)
• Родственные шаблоны:
– Concrete Factory
– Abstract Factory
Information Expert
• Проблема: каков наиболее общий принцип
распределения обязанностей между
объектами при объектно-ориентированном
проектировании?
• Решение: назначить обязанность
информационному эксперту – классу, у
которого имеется информация, требуемая
для выполнения обязанностей
Information Expert (пример)
Information Expert (особенности)
• Поддерживает инкапсуляцию
• Поддерживает принцип низкого
связывания (Low Coupling)
• Поддерживает принцип высокого
зацепления (High Cohesion)
Low Coupling
• Проблема: как обеспечить
зависимость, незначительное влияние
изменений и повысить возможность
повторного использования?
• Решение: распределить обязанности таким
образом, чтобы степень связанности
оставалась низкой
Low Coupling (пример)
Low Coupling (особенности)
• Тесно связан с шаблонами Expert и High
Cohesion
• Изменение компонентов мало сказывается
на других объектах
• Принципы работы и функции компонентов
можно понять, не изучая другие объекты
• Удобство повторного использования
• Связан с Protected Variations
Controller
• Проблема: кто должен отвечать за получение и
координацию выполнения системных
операций, поступающих на уровне интерфейса
пользователя?
• Решение: делегирование обязанностей по обработке
системных сообщений классу, удовлетворяющему одному
из следующих условий
– Класс представляет всю систему в целом, корневой
объект, устройство или подсистему
– Класс представляет сценарий некоторого ВИ, в рамках
которого выполняется обработка всех системных событий
Controller (пример)
Хорошо
Плохо
Controller (особенности)
• Улучшение условий повторного
использования компонентов и
подключения интерфейсов
• Контроль состояний вариантов
использования
• Похожие шаблоны:
– Command
– Facade
– Layers
– Pure Fabrication
High Cohesion
• Проблема: как обеспечить
сфокусированность обязанностей
объекта, их управляемость и ясность, а
заодно выполнение принципа Low
Coupling?
• Решение: распределение
обязанностей, поддерживающее высокую
степень зацепления
High Cohesion (пример)
High Cohesion (особенности)
• Повышается ясность и простота проектных
решений
• Упрощается поддержка и доработка
• Зачастую обеспечивается слабое
связывание
• Улучшаются возможности повторного
использования
Polymorphism
• Проблема: как обрабатывать альтернативные
варианты поведения на основе типа? Как
создавать подключаемые программные
компоненты?
• Решение: если поведение объектов одного
типа (класса) может измениться, обязанности
распределяются для различных вариантов
поведения с использованием полиморфных
операций этого класса
Polymorphism (примеры)
Polymorphism (примеры)
Polymorphism (примеры)
Polymorphism (примеры)
Polymorphism (примеры)
Polymorphism (примеры)
Polymorphism (особенности)
• Позволяет легко расширять
систему, добавляя новые вариации
• Новые реализации можно вводить без
модификации клиентской части
приложения
• Связанные шаблоны:
– Protected Variations
– Adapter, Command, Composite, Proxy, State, Strat
egy …
Pure Fabrication
• Проблема: какой класс должен обеспечивать реализацию
шаблона High Cohesion и Low Coupling или других
принципов проектирования, если шаблон Expert
(например) не обеспечивает подходящего решения?
• Решение: присвоить группу обязанностей с высокой
степенью зацепления искусственному классу, не
представляющему конкретного понятия предметной
области, т.е. синтезировать искусственную сущность для
поддержки высокого зацепления, слабого связывания и
повторного использования
Pure Fabrication (примеры)
Pure Fabrication (особенности)
• Реализуется принцип высокого зацепления
• Повышается потенциал повторного
использования
• Связанные шаблоны:
– Low Coupling
– High Cohesion
– Adapter, Command, Strategy …
Indirection
• Проблема: как распределить
обязанности, чтобы обеспечить отсутствие
прямого связывания; снизить уровень
связывания объектов и сохранить высокий
потенциал повторного использования?
• Решение: присвоить обязанности
промежуточному объекту для обеспечения
связывания между другими компонентами
или службами, которые не связаны между
собой напрямую
Indirection (примеры)
Protected Variations
• Проблема: как спроектировать
объекты, подсистемы и систему, чтобы
изменение этих элементов не оказывало
нежелательное влияние на другие
элементы?
• Решение: идентифицировать точки
возможных вариаций или неустойчивости;
распределить обязанности таким
образом, чтобы обеспечить устойчивый
интерфейс
SOLID принципы проектирования
Принцип единственной ответственности (Single responsibility)
Принцип открытости/закрытости (Open-closed)
Принцип подстановки Барбары Лисков (Liskov substitution)
Принцип разделения интерфейса (Interface segregation)
Принцип инверсии зависимостей (Dependency Invertion)
Принцип единственной
ответственности
• «На каждый объект должна быть
возложена одна единственная
обязанность»
• Для этого проверяем, сколько у нас есть
причин для изменения класса — если
больше одной, то следует разбить данный
класс.
Принцип открытости/закрытости
• «Программные сущности должны быть
открыты для расширения, но закрыты
для модификации»
• Для этого представляем наш класс как
«чёрный ящик» и смотрим, можем ли в
таком случае изменить его поведение.
Принцип подстановки Барбары
Лисков
• «Объекты в программе могут быть
заменены их наследниками без изменения
свойств программы»
• Для этого проверяем, не усилили ли мы
предусловия и не ослабили ли постусловия.
Если это произошло — то принцип не
соблюдается
Принцип разделения интерфейса
• «Много специализированных интерфейсов
лучше, чем один универсальный»
• Проверяем, насколько много интерфейс
содержит методов и насколько разные
функции накладываются на эти методы, и
если необходимо — разбиваем
интерфейсы.
Принцип инверсии зависимостей
• «Зависимости должны строится
относительно абстракций, а не деталей»
• Проверяем, зависят ли классы от каких-то
других классов(непосредственно
инстанцируют объекты других классов и
т.д.) и если эта зависимость имеет
место, заменяем на зависимость от
абстракции.
Литература
• Крэг Ларман. Применение
UML 2.0 и шаблонов
проектирования. М.: ООО
«И.Д. Вильямс», 2007

More Related Content

What's hot

천만 사용자를 위한 AWS 클라우드 아키텍쳐 진화하기- AWS Summit Seoul 2017
천만 사용자를 위한 AWS 클라우드 아키텍쳐 진화하기- AWS Summit Seoul 2017천만 사용자를 위한 AWS 클라우드 아키텍쳐 진화하기- AWS Summit Seoul 2017
천만 사용자를 위한 AWS 클라우드 아키텍쳐 진화하기- AWS Summit Seoul 2017
Amazon Web Services Korea
 
Facebook prophet
Facebook prophetFacebook prophet
Facebook prophet
Minho Lee
 
Git basic
Git basicGit basic
Git basic
Akbar Uddin
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
Terry Cho
 
Bezpieczenstwo sieci komputerowych
Bezpieczenstwo sieci komputerowychBezpieczenstwo sieci komputerowych
Bezpieczenstwo sieci komputerowych
Bpatryczek
 
Linux admin interview questions
Linux admin interview questionsLinux admin interview questions
Linux admin interview questions
Kavya Sri
 
Git vs svn
Git vs svnGit vs svn
Git vs svn
Suman Mukherjee
 
Virtualization security and threat
Virtualization security and threatVirtualization security and threat
Virtualization security and threat
Ammarit Thongthua ,CISSP CISM GXPN CSSLP CCNP
 
HPE Data Protector Best Practice Guide
HPE Data Protector Best Practice GuideHPE Data Protector Best Practice Guide
HPE Data Protector Best Practice Guide
Andrey Karpov
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a git
Keopx
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
YoungSu Son
 
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
Amazon Web Services Korea
 
Version control system and Git
Version control system and GitVersion control system and Git
Version control system and Git
ramubonkuri
 
Linux presentation
Linux presentationLinux presentation
Linux presentation
Nikhil Jain
 
Exokernel operating systems
Exokernel operating systemsExokernel operating systems
Exokernel operating systems
Gaurav Dalvi
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
Hyojun Jeon
 
Version control
Version controlVersion control
Version control
visual28
 
Introduction to Linux Kernel by Quontra Solutions
Introduction to Linux Kernel by Quontra SolutionsIntroduction to Linux Kernel by Quontra Solutions
Introduction to Linux Kernel by Quontra Solutions
QUONTRASOLUTIONS
 
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10![웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
Open Source Consulting
 
DAT316_Report from the field on Aurora PostgreSQL Performance
DAT316_Report from the field on Aurora PostgreSQL PerformanceDAT316_Report from the field on Aurora PostgreSQL Performance
DAT316_Report from the field on Aurora PostgreSQL Performance
Amazon Web Services
 

What's hot (20)

천만 사용자를 위한 AWS 클라우드 아키텍쳐 진화하기- AWS Summit Seoul 2017
천만 사용자를 위한 AWS 클라우드 아키텍쳐 진화하기- AWS Summit Seoul 2017천만 사용자를 위한 AWS 클라우드 아키텍쳐 진화하기- AWS Summit Seoul 2017
천만 사용자를 위한 AWS 클라우드 아키텍쳐 진화하기- AWS Summit Seoul 2017
 
Facebook prophet
Facebook prophetFacebook prophet
Facebook prophet
 
Git basic
Git basicGit basic
Git basic
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
Bezpieczenstwo sieci komputerowych
Bezpieczenstwo sieci komputerowychBezpieczenstwo sieci komputerowych
Bezpieczenstwo sieci komputerowych
 
Linux admin interview questions
Linux admin interview questionsLinux admin interview questions
Linux admin interview questions
 
Git vs svn
Git vs svnGit vs svn
Git vs svn
 
Virtualization security and threat
Virtualization security and threatVirtualization security and threat
Virtualization security and threat
 
HPE Data Protector Best Practice Guide
HPE Data Protector Best Practice GuideHPE Data Protector Best Practice Guide
HPE Data Protector Best Practice Guide
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a git
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
 
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
 
Version control system and Git
Version control system and GitVersion control system and Git
Version control system and Git
 
Linux presentation
Linux presentationLinux presentation
Linux presentation
 
Exokernel operating systems
Exokernel operating systemsExokernel operating systems
Exokernel operating systems
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
 
Version control
Version controlVersion control
Version control
 
Introduction to Linux Kernel by Quontra Solutions
Introduction to Linux Kernel by Quontra SolutionsIntroduction to Linux Kernel by Quontra Solutions
Introduction to Linux Kernel by Quontra Solutions
 
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10![웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
 
DAT316_Report from the field on Aurora PostgreSQL Performance
DAT316_Report from the field on Aurora PostgreSQL PerformanceDAT316_Report from the field on Aurora PostgreSQL Performance
DAT316_Report from the field on Aurora PostgreSQL Performance
 

Viewers also liked

02 Архитектура информационных систем. Основы
02 Архитектура информационных систем. Основы02 Архитектура информационных систем. Основы
02 Архитектура информационных систем. ОсновыEdward Galiaskarov
 
03 Архитектура информационных систем. Принципы проектирования архитектуры
03 Архитектура информационных систем. Принципы проектирования архитектуры03 Архитектура информационных систем. Принципы проектирования архитектуры
03 Архитектура информационных систем. Принципы проектирования архитектурыEdward Galiaskarov
 
06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворки06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворкиEdward Galiaskarov
 
04 Архитектура информационных систем. Архитектурные модели и стили
04 Архитектура информационных систем. Архитектурные модели и стили04 Архитектура информационных систем. Архитектурные модели и стили
04 Архитектура информационных систем. Архитектурные модели и стилиEdward Galiaskarov
 
01 Архитектура информационных систем. Общие понятия
01 Архитектура информационных систем. Общие понятия01 Архитектура информационных систем. Общие понятия
01 Архитектура информационных систем. Общие понятия
Edward Galiaskarov
 
05 Архитектура информационных систем. Атрибуты качества. Метод ADD
05 Архитектура информационных систем. Атрибуты качества. Метод ADD05 Архитектура информационных систем. Атрибуты качества. Метод ADD
05 Архитектура информационных систем. Атрибуты качества. Метод ADDEdward Galiaskarov
 
Архитектурные стили и шаблоны
Архитектурные стили и шаблоныАрхитектурные стили и шаблоны
Архитектурные стили и шаблоныVlad Andrusenko
 
Краткая характеристика основных архитектурных стилей
Краткая характеристика основных архитектурных стилейКраткая характеристика основных архитектурных стилей
Краткая характеристика основных архитектурных стилейинна ветрова
 
Спецификация на примерах или как научить людей общаться
Спецификация на примерах или как научить людей общатьсяСпецификация на примерах или как научить людей общаться
Спецификация на примерах или как научить людей общаться
SQALab
 
Software documentation
Software documentationSoftware documentation
Software documentation
gourav kottawar
 
Системное мышление
Системное мышлениеСистемное мышление
Системное мышлениеJaneKozmina
 
Плохой против хорошего консультанта
Плохой против хорошего консультантаПлохой против хорошего консультанта
Плохой против хорошего консультантаJaneKozmina
 
Требования к по
Требования к поТребования к по
Требования к поJaneKozmina
 
Нотации оформления требований
Нотации оформления требованийНотации оформления требований
Нотации оформления требованийJaneKozmina
 
Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...
Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...
Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...
Mikhail Payson
 
Методологии разработки по
Методологии разработки поМетодологии разработки по
Методологии разработки поJaneKozmina
 
Шаблоны оформления требований
Шаблоны оформления требованийШаблоны оформления требований
Шаблоны оформления требованийJaneKozmina
 

Viewers also liked (20)

02 Архитектура информационных систем. Основы
02 Архитектура информационных систем. Основы02 Архитектура информационных систем. Основы
02 Архитектура информационных систем. Основы
 
03 Архитектура информационных систем. Принципы проектирования архитектуры
03 Архитектура информационных систем. Принципы проектирования архитектуры03 Архитектура информационных систем. Принципы проектирования архитектуры
03 Архитектура информационных систем. Принципы проектирования архитектуры
 
06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворки06 Архитектура информационных систем. Паттерны и фреймворки
06 Архитектура информационных систем. Паттерны и фреймворки
 
04 Архитектура информационных систем. Архитектурные модели и стили
04 Архитектура информационных систем. Архитектурные модели и стили04 Архитектура информационных систем. Архитектурные модели и стили
04 Архитектура информационных систем. Архитектурные модели и стили
 
01 Архитектура информационных систем. Общие понятия
01 Архитектура информационных систем. Общие понятия01 Архитектура информационных систем. Общие понятия
01 Архитектура информационных систем. Общие понятия
 
05 Архитектура информационных систем. Атрибуты качества. Метод ADD
05 Архитектура информационных систем. Атрибуты качества. Метод ADD05 Архитектура информационных систем. Атрибуты качества. Метод ADD
05 Архитектура информационных систем. Атрибуты качества. Метод ADD
 
Архитектурные стили и шаблоны
Архитектурные стили и шаблоныАрхитектурные стили и шаблоны
Архитектурные стили и шаблоны
 
Краткая характеристика основных архитектурных стилей
Краткая характеристика основных архитектурных стилейКраткая характеристика основных архитектурных стилей
Краткая характеристика основных архитектурных стилей
 
Спецификация на примерах или как научить людей общаться
Спецификация на примерах или как научить людей общатьсяСпецификация на примерах или как научить людей общаться
Спецификация на примерах или как научить людей общаться
 
Software documentation
Software documentationSoftware documentation
Software documentation
 
Системное мышление
Системное мышлениеСистемное мышление
Системное мышление
 
Плохой против хорошего консультанта
Плохой против хорошего консультантаПлохой против хорошего консультанта
Плохой против хорошего консультанта
 
Требования к по
Требования к поТребования к по
Требования к по
 
Нотации оформления требований
Нотации оформления требованийНотации оформления требований
Нотации оформления требований
 
Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...
Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...
Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...
 
Методологии разработки по
Методологии разработки поМетодологии разработки по
Методологии разработки по
 
Шаблоны оформления требований
Шаблоны оформления требованийШаблоны оформления требований
Шаблоны оформления требований
 
Dump nzh 02
Dump nzh 02Dump nzh 02
Dump nzh 02
 
UML (basics of)
UML (basics of)UML (basics of)
UML (basics of)
 
IDEF - basics of
IDEF - basics ofIDEF - basics of
IDEF - basics of
 

Similar to 07 Архитектура информационных систем. Принципы GRASP

GRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного ПроектированияGRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного ПроектированияAlexander Nemanov
 
Шаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPШаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPSergey Nemchinsky
 
Grasp principles
Grasp principlesGrasp principles
Grasp principles
arybik
 
Grasp principles
Grasp principlesGrasp principles
Grasp principles
Christina Rybik
 
SOLID & GRASP
SOLID & GRASPSOLID & GRASP
SOLID & GRASPdevel123
 
SOLID
SOLIDSOLID
SOLID
DelphiCon
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
EatDog
 
C++ осень 2012 лекция 8
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8Technopark
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
Igor Shkulipa
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Luxoft Education Center
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
Evgeniy Krivosheev
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
Anton Loginov
 
Cергей Константинов, Яндекс
Cергей Константинов, ЯндексCергей Константинов, Яндекс
Cергей Константинов, Яндекс
Ontico
 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
Serhiy Kalinets
 
введение в объектно ориентированный анализ
введение в объектно ориентированный анализвведение в объектно ориентированный анализ
введение в объектно ориентированный анализ
Maksim Nikitin
 
HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1Technopark
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
Unguryan Vitaliy
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
Dima Dzuba
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
Igor Shkulipa
 

Similar to 07 Архитектура информационных систем. Принципы GRASP (20)

GRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного ПроектированияGRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного Проектирования
 
Шаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPШаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASP
 
Grasp principles
Grasp principlesGrasp principles
Grasp principles
 
Grasp principles
Grasp principlesGrasp principles
Grasp principles
 
SOLID & GRASP
SOLID & GRASPSOLID & GRASP
SOLID & GRASP
 
SOLID
SOLIDSOLID
SOLID
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
 
C++ осень 2012 лекция 8
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8
 
Design principles
Design principles Design principles
Design principles
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
 
Cергей Константинов, Яндекс
Cергей Константинов, ЯндексCергей Константинов, Яндекс
Cергей Константинов, Яндекс
 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
 
введение в объектно ориентированный анализ
введение в объектно ориентированный анализвведение в объектно ориентированный анализ
введение в объектно ориентированный анализ
 
HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 

07 Архитектура информационных систем. Принципы GRASP

  • 2. Проектирование на основе обязанностей • Responsibility-driven design – это общий подход к проектированию программных объектов. – Программные объекты рассматриваются как люди, имеющие свои обязанности и сотрудничающие с другими людьми для их выполнения
  • 3. Проектирование на основе распределение обязанностей (GRASP) Обязанности, относящиеся к действиям объекта • Выполнение действий самим объектом • Инициирование действий других объектов • Управление действиями других объектов Обязанности, относящиеся к знаниям объекта • Наличие информации о закрытых инкапсулированных данных • Наличие информации о связанных объектах • Наличие информации о следствиях или вычисляемых величинах
  • 4. Шаблон проектирования • Это именованная пара «проблема- решение», содержащая рекомендации для применения в различных конкретных ситуациях, которую можно использовать в различных контекстах
  • 5. Шаблоны GRASP Creator Information Expert Low Coupling Controller High Cohesion Polymorphism Indirection
  • 6. Creator • Проблема: кто должен отвечать за создание нового экземпляра некоторого класса? • Решение: назначить классу B обязанность создавать экземпляры класса A, если выполняется одно из условий: – Класс В содержит или агрегирует объекты А – Класс В записывает экземпляры объектов А – Класс В активно использует объекты А – Класс В обладает данными инициализации, которые будут передаваться объектам А при их создании
  • 8. Creator (особенности) • Поддерживает принцип низкого связывания (Low Coupling) • Родственные шаблоны: – Concrete Factory – Abstract Factory
  • 9. Information Expert • Проблема: каков наиболее общий принцип распределения обязанностей между объектами при объектно-ориентированном проектировании? • Решение: назначить обязанность информационному эксперту – классу, у которого имеется информация, требуемая для выполнения обязанностей
  • 11. Information Expert (особенности) • Поддерживает инкапсуляцию • Поддерживает принцип низкого связывания (Low Coupling) • Поддерживает принцип высокого зацепления (High Cohesion)
  • 12. Low Coupling • Проблема: как обеспечить зависимость, незначительное влияние изменений и повысить возможность повторного использования? • Решение: распределить обязанности таким образом, чтобы степень связанности оставалась низкой
  • 14. Low Coupling (особенности) • Тесно связан с шаблонами Expert и High Cohesion • Изменение компонентов мало сказывается на других объектах • Принципы работы и функции компонентов можно понять, не изучая другие объекты • Удобство повторного использования • Связан с Protected Variations
  • 15. Controller • Проблема: кто должен отвечать за получение и координацию выполнения системных операций, поступающих на уровне интерфейса пользователя? • Решение: делегирование обязанностей по обработке системных сообщений классу, удовлетворяющему одному из следующих условий – Класс представляет всю систему в целом, корневой объект, устройство или подсистему – Класс представляет сценарий некоторого ВИ, в рамках которого выполняется обработка всех системных событий
  • 17.
  • 20. Controller (особенности) • Улучшение условий повторного использования компонентов и подключения интерфейсов • Контроль состояний вариантов использования • Похожие шаблоны: – Command – Facade – Layers – Pure Fabrication
  • 21. High Cohesion • Проблема: как обеспечить сфокусированность обязанностей объекта, их управляемость и ясность, а заодно выполнение принципа Low Coupling? • Решение: распределение обязанностей, поддерживающее высокую степень зацепления
  • 23. High Cohesion (особенности) • Повышается ясность и простота проектных решений • Упрощается поддержка и доработка • Зачастую обеспечивается слабое связывание • Улучшаются возможности повторного использования
  • 24. Polymorphism • Проблема: как обрабатывать альтернативные варианты поведения на основе типа? Как создавать подключаемые программные компоненты? • Решение: если поведение объектов одного типа (класса) может измениться, обязанности распределяются для различных вариантов поведения с использованием полиморфных операций этого класса
  • 31. Polymorphism (особенности) • Позволяет легко расширять систему, добавляя новые вариации • Новые реализации можно вводить без модификации клиентской части приложения • Связанные шаблоны: – Protected Variations – Adapter, Command, Composite, Proxy, State, Strat egy …
  • 32. Pure Fabrication • Проблема: какой класс должен обеспечивать реализацию шаблона High Cohesion и Low Coupling или других принципов проектирования, если шаблон Expert (например) не обеспечивает подходящего решения? • Решение: присвоить группу обязанностей с высокой степенью зацепления искусственному классу, не представляющему конкретного понятия предметной области, т.е. синтезировать искусственную сущность для поддержки высокого зацепления, слабого связывания и повторного использования
  • 34. Pure Fabrication (особенности) • Реализуется принцип высокого зацепления • Повышается потенциал повторного использования • Связанные шаблоны: – Low Coupling – High Cohesion – Adapter, Command, Strategy …
  • 35. Indirection • Проблема: как распределить обязанности, чтобы обеспечить отсутствие прямого связывания; снизить уровень связывания объектов и сохранить высокий потенциал повторного использования? • Решение: присвоить обязанности промежуточному объекту для обеспечения связывания между другими компонентами или службами, которые не связаны между собой напрямую
  • 37. Protected Variations • Проблема: как спроектировать объекты, подсистемы и систему, чтобы изменение этих элементов не оказывало нежелательное влияние на другие элементы? • Решение: идентифицировать точки возможных вариаций или неустойчивости; распределить обязанности таким образом, чтобы обеспечить устойчивый интерфейс
  • 38. SOLID принципы проектирования Принцип единственной ответственности (Single responsibility) Принцип открытости/закрытости (Open-closed) Принцип подстановки Барбары Лисков (Liskov substitution) Принцип разделения интерфейса (Interface segregation) Принцип инверсии зависимостей (Dependency Invertion)
  • 39. Принцип единственной ответственности • «На каждый объект должна быть возложена одна единственная обязанность» • Для этого проверяем, сколько у нас есть причин для изменения класса — если больше одной, то следует разбить данный класс.
  • 40. Принцип открытости/закрытости • «Программные сущности должны быть открыты для расширения, но закрыты для модификации» • Для этого представляем наш класс как «чёрный ящик» и смотрим, можем ли в таком случае изменить его поведение.
  • 41. Принцип подстановки Барбары Лисков • «Объекты в программе могут быть заменены их наследниками без изменения свойств программы» • Для этого проверяем, не усилили ли мы предусловия и не ослабили ли постусловия. Если это произошло — то принцип не соблюдается
  • 42. Принцип разделения интерфейса • «Много специализированных интерфейсов лучше, чем один универсальный» • Проверяем, насколько много интерфейс содержит методов и насколько разные функции накладываются на эти методы, и если необходимо — разбиваем интерфейсы.
  • 43. Принцип инверсии зависимостей • «Зависимости должны строится относительно абстракций, а не деталей» • Проверяем, зависят ли классы от каких-то других классов(непосредственно инстанцируют объекты других классов и т.д.) и если эта зависимость имеет место, заменяем на зависимость от абстракции.
  • 44. Литература • Крэг Ларман. Применение UML 2.0 и шаблонов проектирования. М.: ООО «И.Д. Вильямс», 2007