SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
SOLID
     GRASP
основные принципы ООП
SOLID
Буква Акро-   англ.                   рус.
      ним
      SRP     Single responsibility   Принцип единственной
  S
              principle               обязанности
      OCP     Open/closed principle   Принцип
 O
                                      открытости/закрытости
      LSP     Liskov substitution     Принцип подстановки
  L
              principle               Барбары Лисков
      ISP     Interface segregation   Принцип изоляции
  I
              principle               интерфейса
      DIP     Dependency inversion Принцип инверсии
 D
              principle            зависимостей
Single responsibility principle
    Принцип единственной обязанности

На каждый объект должна быть возложена одна
         единственная обязанность.
смешенная ответственность




разделенная ответственность
Open/closed principle
      Принцип открытости/закрытости

Программные сущности должны быть открыты для
    расширения, но закрыты для изменения.
открытая "кухня"




закрытая "кухня"
Liskov substitution principle
   Принцип подстановки Барбары Лисков

 Объекты в программе могут быть заменены их
наследниками без изменения свойств программы.
кот и пес не смогут стать животными :)
треугольник может стать фигурой
Interface segregation principle
        Принцип изоляции интерфейса

Много специализированных интерфейсов лучше, чем
              один универсальный.
жирный интерфейс




набор тонких специализированных интерфейсов
Dependency inversion principle
            Принцип инверсии зависимостей

   Зависимости внутри системы строятся на основе
  абстракций. Модули верхнего уровня не зависят от
   модулей нижнего уровня. Абстракции не должны
   зависеть от деталей. Детали должны зависеть от
                     абстракций.

а) Модули более высокого уровня не должны зависеть от модулей более
  низкого уровня. И те и другие должны зависеть только от абстракций.
б) Абстракции не должны зависеть от деталей. Детали должны зависеть
                             от абстракций.
сильная зависимость




слабая зависимость
GRASP
General Responsibility Assignment Software Patterns
  №   англ.                  рус.
  1   Information Expert     Информационный эксперт
  2   Creator                Создатель
  3   Controller             Контроллер
  4   Low Coupling           Слабая связанность
  5   High Cohesion          Сильное зацепление
  6   Polymorphism           Полиморфизм
  7   Pure Fabrication       Чистая выдумка
  8   Indirection            Посредник
  9   Protected Variations   Сокрытие реализации
Information Expert
         Информационный эксперт

   обязанности должны быть назначены
  объекту, который владеет максимумом
необходимой информации для выполнения
обязанности (информационному эксперту).

      Тривиально, но очень важно!
Creator
                     Создатель

    Это применение шаблона Information
    Expert к проблеме создания объектов.

Класс B должен (может) создавать объекты
             класса A когда:
●   Класс B содержит или агрегирует объекты A.
●   Класс B записывает экземпляры объектов A.
●   Класс B активно использует объекты A
●   Класс B обладает данными инициализации для
    объектов A.
Abstract Factory
Абстрактная фабрика
Builder
Строитель
Controller
                    Контроллер

     Берет на себя ответственность за
   выполнение операций, приходящих от
              пользователя.

    Как правило, не выполняет работу
самостоятельно, а делегирует обязанности
         компетентным объектам.

Пример: Model-View-Controller
Low Coupling
                     Слабая связанность

Распределяет обязанности между
объектами таким образом, чтобы степень
связанности между системами оставалась
низкой.
Степень связанности (coupling) — это мера, определяющая, насколько
жестко один элемент связан с другими элементами, либо каким
количеством данных о других элементах он обладает.

Свойства элемента с низкой степенью связанности(слабым связыванием):
●   Малое число зависимостей между классами (подсистемами).
●   Слабая зависимость одного класса (подсистемы) от изменений в
    другом классе (подсистеме).
●   Высокая степень повторного использования подсистем.
High Cohesion
        Сильное (функциональное) зацепление

     Задает свойство сильного зацепления
             внутри подсистемы.
Зацепление (cohesion) (функциональное зацепление) — это мера
связанности и сфокусированности обязанностей класса.


Объект обладает высокой степенью зацепления, если
его обязанности тесно связаны между собой и он не
выполняет огромных объемов работы.

Antipattern: God object
Polymorphism
                  Полиморфизм

 Позволяет обрабатывать альтернативные
  варианты поведения на основе типа и
   заменять подключаемые компоненты
                системы.

Все альтернативные реализации приводятся к общему
интерфейсу.
Pure Fabrication
              Чистая выдумка

 Класс, не отражающий никакого реального
объекта предметной области, но специально
  придуманный для усиления зацепления,
  ослабления связанности или увеличения
    степени повторного использования.
Indirection
                    Посредник

  Поддерживает слабую связанность путём
 назначения обязанностей промежуточному
                 объекту.

Пример: Model-View-Controller
Protected Variations
           Сокрытие реализации

Защищает элементы от изменения других
  элементов, вынося взаимодействия в
      фиксированный интерфейс.

Поведение может варьироваться лишь с помощью
   создания другой реализации интерфейса.
SOLID & GRASP

Mais conteúdo relacionado

Mais procurados

Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring FrameworkASG
 
Structural Design pattern - Adapter
Structural Design pattern - AdapterStructural Design pattern - Adapter
Structural Design pattern - AdapterManoj Kumar
 
Green indexes used in CAST to measure the energy consumption in code
Green indexes used in CAST to measure the energy consumption in codeGreen indexes used in CAST to measure the energy consumption in code
Green indexes used in CAST to measure the energy consumption in codeCAST
 
Chp6 - Développement iOS
Chp6 - Développement iOSChp6 - Développement iOS
Chp6 - Développement iOSLilia Sfaxi
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystémeAlgeria JUG
 
DotNet Fundamentals
DotNet FundamentalsDotNet Fundamentals
DotNet FundamentalsMajdi SAIBI
 
Java Database Connectivity (JDBC)
Java Database Connectivity (JDBC)Java Database Connectivity (JDBC)
Java Database Connectivity (JDBC)Pooja Talreja
 
Initiation à UML: Partie 1
Initiation à UML: Partie 1Initiation à UML: Partie 1
Initiation à UML: Partie 1DIALLO Boubacar
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to ReactRob Quick
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...ENSET, Université Hassan II Casablanca
 
Spring framework in depth
Spring framework in depthSpring framework in depth
Spring framework in depthVinay Kumar
 

Mais procurados (20)

Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Modele mvc
Modele mvcModele mvc
Modele mvc
 
Structural Design pattern - Adapter
Structural Design pattern - AdapterStructural Design pattern - Adapter
Structural Design pattern - Adapter
 
Green indexes used in CAST to measure the energy consumption in code
Green indexes used in CAST to measure the energy consumption in codeGreen indexes used in CAST to measure the energy consumption in code
Green indexes used in CAST to measure the energy consumption in code
 
Chp6 - Développement iOS
Chp6 - Développement iOSChp6 - Développement iOS
Chp6 - Développement iOS
 
UML Diagrammes Statiques
UML Diagrammes StatiquesUML Diagrammes Statiques
UML Diagrammes Statiques
 
Design pattern-presentation
Design pattern-presentationDesign pattern-presentation
Design pattern-presentation
 
Presentation JEE et son écossystéme
Presentation JEE et son écossystémePresentation JEE et son écossystéme
Presentation JEE et son écossystéme
 
Clean code
Clean codeClean code
Clean code
 
La plateforme JEE
La plateforme JEELa plateforme JEE
La plateforme JEE
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
DotNet Fundamentals
DotNet FundamentalsDotNet Fundamentals
DotNet Fundamentals
 
Java Database Connectivity (JDBC)
Java Database Connectivity (JDBC)Java Database Connectivity (JDBC)
Java Database Connectivity (JDBC)
 
Initiation à UML: Partie 1
Initiation à UML: Partie 1Initiation à UML: Partie 1
Initiation à UML: Partie 1
 
Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
 
Modélisation avec UML
Modélisation avec UMLModélisation avec UML
Modélisation avec UML
 
Android Basic Components
Android Basic ComponentsAndroid Basic Components
Android Basic Components
 
Spring framework in depth
Spring framework in depthSpring framework in depth
Spring framework in depth
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 

Destaque

Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DAndreyGeonya
 
Разработка под Android для устройств разных разрешений и размеров
Разработка под Android для устройств разных разрешений и размеровРазработка под Android для устройств разных разрешений и размеров
Разработка под Android для устройств разных разрешений и размеровAlexey Ustenko
 
Верстка для Андроид
Верстка для АндроидВерстка для Андроид
Верстка для АндроидAlexey Ustenko
 
Александр Садовский "Как получить больше трафика"
Александр Садовский "Как получить больше трафика"Александр Садовский "Как получить больше трафика"
Александр Садовский "Как получить больше трафика"Yandex
 
SOLID Principles in the real world
SOLID Principles in the real worldSOLID Principles in the real world
SOLID Principles in the real worldEPAM
 
7 типичных ошибок при запуске рекламной кампании во ВКонтакте
7 типичных ошибок при запуске рекламной кампании во ВКонтакте7 типичных ошибок при запуске рекламной кампании во ВКонтакте
7 типичных ошибок при запуске рекламной кампании во ВКонтактеАнна Караулова
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFSergey Nemchinsky
 
Сила букв: как текст объявления повышает CTR
Сила букв: как текст объявления повышает CTRСила букв: как текст объявления повышает CTR
Сила букв: как текст объявления повышает CTRАнна Караулова
 
Как найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететьКак найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететьSergey Nemchinsky
 
«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...
«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...
«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...Mail.ru Group
 
Android Architecture
Android ArchitectureAndroid Architecture
Android Architecturedeepakshare
 
«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru
«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru
«Coro. Intro» Евгений Вансевич, программист Почты Mail.RuMail.ru Group
 
android architecture
android architectureandroid architecture
android architectureAashita Gupta
 
GRASP Principles
GRASP PrinciplesGRASP Principles
GRASP PrinciplesRaheel Arif
 

Destaque (20)

Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.D
 
Разработка под Android для устройств разных разрешений и размеров
Разработка под Android для устройств разных разрешений и размеровРазработка под Android для устройств разных разрешений и размеров
Разработка под Android для устройств разных разрешений и размеров
 
Верстка для Андроид
Верстка для АндроидВерстка для Андроид
Верстка для Андроид
 
Design talk - GRASP Patterns
Design talk - GRASP PatternsDesign talk - GRASP Patterns
Design talk - GRASP Patterns
 
Александр Садовский "Как получить больше трафика"
Александр Садовский "Как получить больше трафика"Александр Садовский "Как получить больше трафика"
Александр Садовский "Как получить больше трафика"
 
SOLID Principles in the real world
SOLID Principles in the real worldSOLID Principles in the real world
SOLID Principles in the real world
 
7 типичных ошибок при запуске рекламной кампании во ВКонтакте
7 типичных ошибок при запуске рекламной кампании во ВКонтакте7 типичных ошибок при запуске рекламной кампании во ВКонтакте
7 типичных ошибок при запуске рекламной кампании во ВКонтакте
 
SOLID
SOLIDSOLID
SOLID
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
 
Сила букв: как текст объявления повышает CTR
Сила букв: как текст объявления повышает CTRСила букв: как текст объявления повышает CTR
Сила букв: как текст объявления повышает CTR
 
Как найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететьКак найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететь
 
Android architecture
Android architectureAndroid architecture
Android architecture
 
«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...
«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...
«Автотесты» Вадим Пуштаев, программист отдела внутренней разработки Поиска Ma...
 
Android Architecture
Android ArchitectureAndroid Architecture
Android Architecture
 
Grasp principles
Grasp principlesGrasp principles
Grasp principles
 
«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru
«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru
«Coro. Intro» Евгений Вансевич, программист Почты Mail.Ru
 
09 grasp
09 grasp09 grasp
09 grasp
 
android architecture
android architectureandroid architecture
android architecture
 
GRASP Principles
GRASP PrinciplesGRASP Principles
GRASP Principles
 
Grasp
GraspGrasp
Grasp
 

Semelhante a SOLID & GRASP

SOLID. Принципы объектно ориентированного дизайна
SOLID. Принципы объектно ориентированного дизайнаSOLID. Принципы объектно ориентированного дизайна
SOLID. Принципы объектно ориентированного дизайнаМихаил Польгун
 
07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASPEdward Galiaskarov
 
шаблоны проектирования
шаблоны проектированияшаблоны проектирования
шаблоны проектированияksmster
 
Проблемы точечной застройки в больших городах или зачем нужен Dagger
Проблемы точечной застройки в больших городах или зачем нужен DaggerПроблемы точечной застройки в больших городах или зачем нужен Dagger
Проблемы точечной застройки в больших городах или зачем нужен DaggerValeriya Atamanova
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.EatDog
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf Conference
 
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014Python Meetup
 
Инъекция зависимости и Инверсия Контроля
Инъекция зависимости и Инверсия КонтроляИнъекция зависимости и Инверсия Контроля
Инъекция зависимости и Инверсия КонтроляVladimir Ignatev
 
SOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSQALab
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОLuxoft Education Center
 
DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)Alexey Kachayev
 

Semelhante a SOLID & GRASP (20)

Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
 
SOLID
SOLIDSOLID
SOLID
 
SOLID. Принципы объектно ориентированного дизайна
SOLID. Принципы объектно ориентированного дизайнаSOLID. Принципы объектно ориентированного дизайна
SOLID. Принципы объектно ориентированного дизайна
 
SOLID && Magento2
SOLID && Magento2SOLID && Magento2
SOLID && Magento2
 
07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP
 
шаблоны проектирования
шаблоны проектированияшаблоны проектирования
шаблоны проектирования
 
Проблемы точечной застройки в больших городах или зачем нужен Dagger
Проблемы точечной застройки в больших городах или зачем нужен DaggerПроблемы точечной застройки в больших городах или зачем нужен Dagger
Проблемы точечной застройки в больших городах или зачем нужен Dagger
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
 
SOLID
SOLIDSOLID
SOLID
 
Design principles
Design principles Design principles
Design principles
 
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014
 
Инъекция зависимости и Инверсия Контроля
Инъекция зависимости и Инверсия КонтроляИнъекция зависимости и Инверсия Контроля
Инъекция зависимости и Инверсия Контроля
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!
 
SOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработка
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)
 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
 

SOLID & GRASP

  • 1. SOLID GRASP основные принципы ООП
  • 2.
  • 3. SOLID Буква Акро- англ. рус. ним SRP Single responsibility Принцип единственной S principle обязанности OCP Open/closed principle Принцип O открытости/закрытости LSP Liskov substitution Принцип подстановки L principle Барбары Лисков ISP Interface segregation Принцип изоляции I principle интерфейса DIP Dependency inversion Принцип инверсии D principle зависимостей
  • 4.
  • 5. Single responsibility principle Принцип единственной обязанности На каждый объект должна быть возложена одна единственная обязанность.
  • 7.
  • 8. Open/closed principle Принцип открытости/закрытости Программные сущности должны быть открыты для расширения, но закрыты для изменения.
  • 10.
  • 11. Liskov substitution principle Принцип подстановки Барбары Лисков Объекты в программе могут быть заменены их наследниками без изменения свойств программы.
  • 12. кот и пес не смогут стать животными :)
  • 14.
  • 15. Interface segregation principle Принцип изоляции интерфейса Много специализированных интерфейсов лучше, чем один универсальный.
  • 16. жирный интерфейс набор тонких специализированных интерфейсов
  • 17.
  • 18. Dependency inversion principle Принцип инверсии зависимостей Зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций. а) Модули более высокого уровня не должны зависеть от модулей более низкого уровня. И те и другие должны зависеть только от абстракций. б) Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
  • 20. GRASP General Responsibility Assignment Software Patterns № англ. рус. 1 Information Expert Информационный эксперт 2 Creator Создатель 3 Controller Контроллер 4 Low Coupling Слабая связанность 5 High Cohesion Сильное зацепление 6 Polymorphism Полиморфизм 7 Pure Fabrication Чистая выдумка 8 Indirection Посредник 9 Protected Variations Сокрытие реализации
  • 21. Information Expert Информационный эксперт обязанности должны быть назначены объекту, который владеет максимумом необходимой информации для выполнения обязанности (информационному эксперту). Тривиально, но очень важно!
  • 22.
  • 23. Creator Создатель Это применение шаблона Information Expert к проблеме создания объектов. Класс B должен (может) создавать объекты класса A когда: ● Класс B содержит или агрегирует объекты A. ● Класс B записывает экземпляры объектов A. ● Класс B активно использует объекты A ● Класс B обладает данными инициализации для объектов A.
  • 26. Controller Контроллер Берет на себя ответственность за выполнение операций, приходящих от пользователя. Как правило, не выполняет работу самостоятельно, а делегирует обязанности компетентным объектам. Пример: Model-View-Controller
  • 27.
  • 28. Low Coupling Слабая связанность Распределяет обязанности между объектами таким образом, чтобы степень связанности между системами оставалась низкой. Степень связанности (coupling) — это мера, определяющая, насколько жестко один элемент связан с другими элементами, либо каким количеством данных о других элементах он обладает. Свойства элемента с низкой степенью связанности(слабым связыванием): ● Малое число зависимостей между классами (подсистемами). ● Слабая зависимость одного класса (подсистемы) от изменений в другом классе (подсистеме). ● Высокая степень повторного использования подсистем.
  • 29. High Cohesion Сильное (функциональное) зацепление Задает свойство сильного зацепления внутри подсистемы. Зацепление (cohesion) (функциональное зацепление) — это мера связанности и сфокусированности обязанностей класса. Объект обладает высокой степенью зацепления, если его обязанности тесно связаны между собой и он не выполняет огромных объемов работы. Antipattern: God object
  • 30. Polymorphism Полиморфизм Позволяет обрабатывать альтернативные варианты поведения на основе типа и заменять подключаемые компоненты системы. Все альтернативные реализации приводятся к общему интерфейсу.
  • 31.
  • 32. Pure Fabrication Чистая выдумка Класс, не отражающий никакого реального объекта предметной области, но специально придуманный для усиления зацепления, ослабления связанности или увеличения степени повторного использования.
  • 33.
  • 34. Indirection Посредник Поддерживает слабую связанность путём назначения обязанностей промежуточному объекту. Пример: Model-View-Controller
  • 35. Protected Variations Сокрытие реализации Защищает элементы от изменения других элементов, вынося взаимодействия в фиксированный интерфейс. Поведение может варьироваться лишь с помощью создания другой реализации интерфейса.