SlideShare a Scribd company logo
GRASP
Паттерны
Объектно-
Ориентированного
Проектирования
Обо мне
Alexander Nemanov
alexander@asoft4web.com
Skype: asoft4web
FB:
https://www.facebook.com/alexander.nemanov
Цель доклада
• Сделать краткий обзор паттернов GRASP
• Подтолкнуть Вас к их детальному изучению
и применению на практике
GRASP
Ларман Крэг
Применение UML и шаблонов проектирования
Х.., Х… - и на продакшен
Принципы ООП
• Абстракция
• Инкапсуляция
• Наследование
• Полиморфизм
Проектирование
Сначала определяются требования и создается
модель предметной области, затем добавляются
методы программных классов, описывающие
передачу сообщений между объектами для
удовлетворения требований.
GRASP - определение
General Responsibility Assignment Software Patterns
общие образцы распределения обязанностей
GRASP - паттерны, используемые в объектно-
ориентированном проектировании для решения
общих задач по назначению обязанностей
классам и объектам
GRASP
Методический подход к объектному проектированию
Паттерны
• Information Expert (Информационный эксперт)
• Creator (Создатель)
• Controller (Контроллер)
• Low Coupling (Слабая связанность)
• High Cohesion (Сильное Сцепление)
• Polymorphism (Полиморфизм)
• Pure Fabrication (Чистая выдумка)
• Indirection (Посредник)
• Protected Variations (Сокрытие реализации)
Information Expert
Информационный эксперт
Проблема: В системе должна аккумулироваться,
рассчитываться и т. п. необходимая информация.
Решение: Назначить обязанность аккумуляции
информации, расчета и т. п. некоему классу
(информационному эксперту), обладающему
необходимой информацией.
Рекомендации: Информационным экспертом
может быть не один класс, а несколько.
Information Expert
Information Expert
Преимущества
• Поддерживает инкапсуляцию, то есть объекты
используют свои собственные данные для
выполнения поставленных задач
• Поведение системы обеспечивается классами,
содержащими требуемую информацию.
Поддерживается High Cohesion
Недостатки
При проблемах со связыванием и зацеплением.
Creator
Проблема: "Кто" должен отвечать за создание
экземпляров класса ?
Решение: Назначить классу В обязанность
создавать объекты другого класса А
Рекомендации: применять паттерн если
• Класс B содержит или агрегирует объекты A.
• Класс B записывает экземпляры объектов A.
• Класс B активно использует объекты A
• Класс B обладает данными инициализации для
объектов A
Creator
Преимущества
• Использование этого паттерна не повышает
связанности, поскольку созданный класс, как
правило, виден только для класса - создателя.
Недостатки
Если процедура создания объекта достаточно
сложная (например выполняется на основе
некоего внешнего условия), логично использовать
паттерн "Абстрактная Фабрика", то есть,
делегировать обязанность создания объектов
специальному классу.
Low Coupling
Низкая связанность
Проблема: Как обеспечить низкую зависимость,
незначительное влияние изменений и повысить
возможность повторного использования?
Решение: Распределить обязанности таким
образом, чтобы степень связанности оставалась
низкой.
Low Coupling
Низкая связанность
Low Coupling
Низкая связанность
Преимущества:
• Изменение компонентов мало сказывается на других
объектах
• Принципы работы и функции классов/компонентов
можно понять, не изучая другие объекты
• Удобство повторного использования
High Cohesion
Высокое зацепление
Проблема: Как обеспечить возможность управления
сложностью?
Решение: Обеспечить распределение обязанностей с
высокой степенью зацепления
Пример: Если на класс "Регистрация" возлагать все
новые и новые системные функции, связанные с
системными операциями, то данный класс будет слишком
перегружен и будет обладать низкой степенью
зацепления.
High Cohesion
Высокое зацепление
Преимущества: Классы с высокой степенью зацепления
просты в поддержке и повторном использовании.
Недостатки: Иногда бывает неоправданно использовать
высокое зацепление для распределенных серверных
объектов. В этом случае для обеспечения быстродействия
необходимо создать несколько более крупных серверных
объектов со слабым зацеплением.
Pure Fabrication
Чистая выдумка
Проблема: Какой класс должен обеспечивать реализацию
паттернов "Высокое зацепление", и "Низкая связанность"?
Решение: Присвоить группу обязанностей с высокой
степенью зацепления классу, который не представляет
конкретного понятия из предметной области.
Пример: Какой класс должен сохранять экземпляры
класса "Продажа" в реляционной базе данных?
Pure Fabrication
Чистая выдумка
Преимущества:
Класс "ПостоянноеХранилище" будет обладать низкой
степенью связывания и высокой степенью зацепления.
Недостатки:
Данным паттерном не следует злоупотреблять иначе все
функции системы превратятся в объекты.
GRASP
Методический подход к объектному проектированию
Паттерны
• Information Expert (Информационный эксперт)
• Creator (Создатель)
• Controller (Контроллер)
• Low Coupling (Слабая связанность)
• High Cohesion (Сильное Сцепление)
• Polymorphism (Полиморфизм)
• Pure Fabrication (Чистая выдумка)
• Indirection (Посредник)
• Protected Variations (Сокрытие реализации)
?

More Related Content

What's hot

Proxy Design Pattern
Proxy Design PatternProxy Design Pattern
Proxy Design Pattern
Anjan Kumar Bollam
 
Design Patterns - Abstract Factory Pattern
Design Patterns - Abstract Factory PatternDesign Patterns - Abstract Factory Pattern
Design Patterns - Abstract Factory Pattern
Mudasir Qazi
 
Design Pattern - Factory Method Pattern
Design Pattern - Factory Method PatternDesign Pattern - Factory Method Pattern
Design Pattern - Factory Method Pattern
Mudasir Qazi
 
Command Pattern
Command PatternCommand Pattern
Command Pattern
Geoff Burns
 
Command Design Pattern
Command Design PatternCommand Design Pattern
Command Design Pattern
Shahriar Hyder
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
Surendra Shukla
 
The SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design PatternsThe SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design Patterns
Hayim Makabee
 
Facade pattern
Facade patternFacade pattern
Facade pattern
JAINIK PATEL
 
Visitor Pattern
Visitor PatternVisitor Pattern
Visitor Pattern
Ider Zheng
 
Visitor pattern
Visitor patternVisitor pattern
Visitor pattern
Nikunj Dhameliya
 
Builder pattern
Builder patternBuilder pattern
Builder pattern
Shakil Ahmed
 
Design Patterns - General Introduction
Design Patterns - General IntroductionDesign Patterns - General Introduction
Design Patterns - General Introduction
Asma CHERIF
 
Clean code: SOLID
Clean code: SOLIDClean code: SOLID
Clean code: SOLID
Indeema Software Inc.
 
Шаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLШаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLSergey Nemchinsky
 
Azure WebApp Deployment Slots
Azure WebApp Deployment Slots Azure WebApp Deployment Slots
Azure WebApp Deployment Slots
Ebru Cucen Çüçen
 
MVVM - Model View ViewModel
MVVM - Model View ViewModelMVVM - Model View ViewModel
MVVM - Model View ViewModel
Dareen Alhiyari
 
Design patterns
Design patternsDesign patterns
Design patterns
abhisheksagi
 
Command Design Pattern
Command Design PatternCommand Design Pattern
Command Design Pattern
Rothana Choun
 
Introduction to Design Pattern
Introduction to Design  PatternIntroduction to Design  Pattern
Introduction to Design Pattern
Sanae BEKKAR
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеSergey Nemchinsky
 

What's hot (20)

Proxy Design Pattern
Proxy Design PatternProxy Design Pattern
Proxy Design Pattern
 
Design Patterns - Abstract Factory Pattern
Design Patterns - Abstract Factory PatternDesign Patterns - Abstract Factory Pattern
Design Patterns - Abstract Factory Pattern
 
Design Pattern - Factory Method Pattern
Design Pattern - Factory Method PatternDesign Pattern - Factory Method Pattern
Design Pattern - Factory Method Pattern
 
Command Pattern
Command PatternCommand Pattern
Command Pattern
 
Command Design Pattern
Command Design PatternCommand Design Pattern
Command Design Pattern
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
The SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design PatternsThe SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design Patterns
 
Facade pattern
Facade patternFacade pattern
Facade pattern
 
Visitor Pattern
Visitor PatternVisitor Pattern
Visitor Pattern
 
Visitor pattern
Visitor patternVisitor pattern
Visitor pattern
 
Builder pattern
Builder patternBuilder pattern
Builder pattern
 
Design Patterns - General Introduction
Design Patterns - General IntroductionDesign Patterns - General Introduction
Design Patterns - General Introduction
 
Clean code: SOLID
Clean code: SOLIDClean code: SOLID
Clean code: SOLID
 
Шаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UMLШаблоны разработки ПО. Часть 2. ООП и UML
Шаблоны разработки ПО. Часть 2. ООП и UML
 
Azure WebApp Deployment Slots
Azure WebApp Deployment Slots Azure WebApp Deployment Slots
Azure WebApp Deployment Slots
 
MVVM - Model View ViewModel
MVVM - Model View ViewModelMVVM - Model View ViewModel
MVVM - Model View ViewModel
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Command Design Pattern
Command Design PatternCommand Design Pattern
Command Design Pattern
 
Introduction to Design Pattern
Introduction to Design  PatternIntroduction to Design  Pattern
Introduction to Design Pattern
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. Введние
 

Similar to GRASP – паттерны Объектно-Ориентированного Проектирования

07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASPEdward Galiaskarov
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
Sergey Nemchinsky
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Luxoft Education Center
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
Evgeniy Krivosheev
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
Alexander Gornik
 
Тимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОYandex
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
Igor Shkulipa
 
C++ осень 2012 лекция 8
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8Technopark
 
Grasp principles
Grasp principlesGrasp principles
Grasp principles
arybik
 
Grasp principles
Grasp principlesGrasp principles
Grasp principles
Christina Rybik
 
HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1Technopark
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
EatDog
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
Образовательные мероприятия "Netpeak Talks"
 
Как сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с AgileКак сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с Agile
Alexey Krivitsky
 
Infostart 2023 Business Analysis Core Concept Model.pptx
Infostart 2023 Business Analysis Core Concept Model.pptxInfostart 2023 Business Analysis Core Concept Model.pptx
Infostart 2023 Business Analysis Core Concept Model.pptx
ssuser6d9135
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
Igor Shkulipa
 
Практическая верификация и командная работа
Практическая верификация и командная работаПрактическая верификация и командная работа
Практическая верификация и командная работа
MATLAB
 
Александр Калугин - Простота тестирования маленького системного ПО
Александр Калугин - Простота тестирования маленького системного ПОАлександр Калугин - Простота тестирования маленького системного ПО
Александр Калугин - Простота тестирования маленького системного ПО
SQALab
 

Similar to GRASP – паттерны Объектно-Ориентированного Проектирования (20)

07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP
 
Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"Конспект лекций по курсу "Шаблоны разработки ПО"
Конспект лекций по курсу "Шаблоны разработки ПО"
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
лек11 7
лек11 7лек11 7
лек11 7
 
лек11 7
лек11 7лек11 7
лек11 7
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
Тимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПО
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
C++ осень 2012 лекция 8
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8
 
Grasp principles
Grasp principlesGrasp principles
Grasp principles
 
Grasp principles
Grasp principlesGrasp principles
Grasp principles
 
HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
 
Как сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с AgileКак сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с Agile
 
Infostart 2023 Business Analysis Core Concept Model.pptx
Infostart 2023 Business Analysis Core Concept Model.pptxInfostart 2023 Business Analysis Core Concept Model.pptx
Infostart 2023 Business Analysis Core Concept Model.pptx
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
Практическая верификация и командная работа
Практическая верификация и командная работаПрактическая верификация и командная работа
Практическая верификация и командная работа
 
Александр Калугин - Простота тестирования маленького системного ПО
Александр Калугин - Простота тестирования маленького системного ПОАлександр Калугин - Простота тестирования маленького системного ПО
Александр Калугин - Простота тестирования маленького системного ПО
 

GRASP – паттерны Объектно-Ориентированного Проектирования

  • 2. Обо мне Alexander Nemanov alexander@asoft4web.com Skype: asoft4web FB: https://www.facebook.com/alexander.nemanov
  • 3. Цель доклада • Сделать краткий обзор паттернов GRASP • Подтолкнуть Вас к их детальному изучению и применению на практике
  • 4. GRASP Ларман Крэг Применение UML и шаблонов проектирования
  • 5. Х.., Х… - и на продакшен Принципы ООП • Абстракция • Инкапсуляция • Наследование • Полиморфизм Проектирование Сначала определяются требования и создается модель предметной области, затем добавляются методы программных классов, описывающие передачу сообщений между объектами для удовлетворения требований.
  • 6. GRASP - определение General Responsibility Assignment Software Patterns общие образцы распределения обязанностей GRASP - паттерны, используемые в объектно- ориентированном проектировании для решения общих задач по назначению обязанностей классам и объектам
  • 7. GRASP Методический подход к объектному проектированию Паттерны • Information Expert (Информационный эксперт) • Creator (Создатель) • Controller (Контроллер) • Low Coupling (Слабая связанность) • High Cohesion (Сильное Сцепление) • Polymorphism (Полиморфизм) • Pure Fabrication (Чистая выдумка) • Indirection (Посредник) • Protected Variations (Сокрытие реализации)
  • 8. Information Expert Информационный эксперт Проблема: В системе должна аккумулироваться, рассчитываться и т. п. необходимая информация. Решение: Назначить обязанность аккумуляции информации, расчета и т. п. некоему классу (информационному эксперту), обладающему необходимой информацией. Рекомендации: Информационным экспертом может быть не один класс, а несколько.
  • 10. Information Expert Преимущества • Поддерживает инкапсуляцию, то есть объекты используют свои собственные данные для выполнения поставленных задач • Поведение системы обеспечивается классами, содержащими требуемую информацию. Поддерживается High Cohesion Недостатки При проблемах со связыванием и зацеплением.
  • 11. Creator Проблема: "Кто" должен отвечать за создание экземпляров класса ? Решение: Назначить классу В обязанность создавать объекты другого класса А Рекомендации: применять паттерн если • Класс B содержит или агрегирует объекты A. • Класс B записывает экземпляры объектов A. • Класс B активно использует объекты A • Класс B обладает данными инициализации для объектов A
  • 12. Creator Преимущества • Использование этого паттерна не повышает связанности, поскольку созданный класс, как правило, виден только для класса - создателя. Недостатки Если процедура создания объекта достаточно сложная (например выполняется на основе некоего внешнего условия), логично использовать паттерн "Абстрактная Фабрика", то есть, делегировать обязанность создания объектов специальному классу.
  • 13. Low Coupling Низкая связанность Проблема: Как обеспечить низкую зависимость, незначительное влияние изменений и повысить возможность повторного использования? Решение: Распределить обязанности таким образом, чтобы степень связанности оставалась низкой.
  • 15. Low Coupling Низкая связанность Преимущества: • Изменение компонентов мало сказывается на других объектах • Принципы работы и функции классов/компонентов можно понять, не изучая другие объекты • Удобство повторного использования
  • 16. High Cohesion Высокое зацепление Проблема: Как обеспечить возможность управления сложностью? Решение: Обеспечить распределение обязанностей с высокой степенью зацепления Пример: Если на класс "Регистрация" возлагать все новые и новые системные функции, связанные с системными операциями, то данный класс будет слишком перегружен и будет обладать низкой степенью зацепления.
  • 17. High Cohesion Высокое зацепление Преимущества: Классы с высокой степенью зацепления просты в поддержке и повторном использовании. Недостатки: Иногда бывает неоправданно использовать высокое зацепление для распределенных серверных объектов. В этом случае для обеспечения быстродействия необходимо создать несколько более крупных серверных объектов со слабым зацеплением.
  • 18. Pure Fabrication Чистая выдумка Проблема: Какой класс должен обеспечивать реализацию паттернов "Высокое зацепление", и "Низкая связанность"? Решение: Присвоить группу обязанностей с высокой степенью зацепления классу, который не представляет конкретного понятия из предметной области. Пример: Какой класс должен сохранять экземпляры класса "Продажа" в реляционной базе данных?
  • 19. Pure Fabrication Чистая выдумка Преимущества: Класс "ПостоянноеХранилище" будет обладать низкой степенью связывания и высокой степенью зацепления. Недостатки: Данным паттерном не следует злоупотреблять иначе все функции системы превратятся в объекты.
  • 20. GRASP Методический подход к объектному проектированию Паттерны • Information Expert (Информационный эксперт) • Creator (Создатель) • Controller (Контроллер) • Low Coupling (Слабая связанность) • High Cohesion (Сильное Сцепление) • Polymorphism (Полиморфизм) • Pure Fabrication (Чистая выдумка) • Indirection (Посредник) • Protected Variations (Сокрытие реализации)
  • 21. ?