SlideShare une entreprise Scribd logo
1  sur  44
Архитектура информационных
систем
Принципы 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

Contenu connexe

En vedette

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

En vedette (20)

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
 
Как читать диаграммы BPMN
Как читать диаграммы BPMNКак читать диаграммы BPMN
Как читать диаграммы BPMN
 
тестирование программного обеспечения
тестирование программного обеспечениятестирование программного обеспечения
тестирование программного обеспечения
 
Полезные навыки аналитиков - как стать профессионалом
Полезные навыки аналитиков - как стать профессионаломПолезные навыки аналитиков - как стать профессионалом
Полезные навыки аналитиков - как стать профессионалом
 

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

GRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного ПроектированияGRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного ПроектированияAlexander Nemanov
 
Шаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPШаблоны разработки ПО. Шаблоны GRASP
Шаблоны разработки ПО. Шаблоны GRASPSergey Nemchinsky
 
Grasp principles
Grasp principlesGrasp principles
Grasp principlesarybik
 
SOLID & GRASP
SOLID & GRASPSOLID & GRASP
SOLID & GRASPdevel123
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.EatDog
 
C++ осень 2012 лекция 8
C++ осень 2012 лекция 8C++ осень 2012 лекция 8
C++ осень 2012 лекция 8Technopark
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОLuxoft Education Center
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
 
Cергей Константинов, Яндекс
Cергей Константинов, ЯндексCергей Константинов, Яндекс
Cергей Константинов, ЯндексOntico
 
введение в объектно ориентированный анализ
введение в объектно ориентированный анализвведение в объектно ориентированный анализ
введение в объектно ориентированный анализMaksim Nikitin
 
HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1HighLoad весна 2014 лекция 1
HighLoad весна 2014 лекция 1Technopark
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных системDima Dzuba
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.Igor Shkulipa
 

Similaire à 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