SlideShare a Scribd company logo
1 of 27
Design Patterns. Шаблоны
GRASP
Немчинский Сергей
2008
GRASP



Craig Larman
Книга Applying UML and Patterns, 3ed.
GRASP stands for General
Responsibility Assignment Software
Patterns.
Полный список шаблонов
GRASP










Information Expert
Creator
Controller
Low Coupling
High Cohesion
Polymorphism
Pure Fabrication
Indirection
Protected Variations
Шаблон информационный эксперт
(Information Expert)- GRASP


Проблема




Решение




В системе должна аккумулироваться, рассчитываться и т. п.
необходимая информация.

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

Рекомендации


Информационным экспертом может быть не один класс, а
несколько.
Эксперт. Пример






Необходимо рассчитать общую сумму
продажи. Имеются классы проектирования
"Продажа", "ТоварПродажа" (продажа
отдельного вида товара в рамках продажи
в целом), "ТоварСпецификация" (описание
конкретного вида товара).
Необходимо распределить обязанности по
предоставлению информации и расчету
между этими классами.
Таким образом, все три объекта являются
информационными экспертами.
Эксперт. Диаграмма классов
Создатель экземпляров
класса (Creator) - GRASP


Проблема




Решение




"Кто" должен отвечать за создание
экземпляров класса.
Назначить классу В обязанность создавать
объекты другого класса А

Рекомендации


Логично использовать паттерн если класс В
содержит, агрегирует, активно использует и т.п.
объекты класса А.
Creator. Пример.




необходимо определить, какой
объект должен отвечать за создание
экземпляра "ТоварПродажа".
Логично, чтобы это был объект
"Продажа", поскольку он содержит
(агрегирует) несколько обьектов
"ТоварПродажа".
Creator. Диаграмма
последовательности
Creator. Критика


Преимущества




Использование этого паттерна не повышает
связанности, поскольку созданный класс, как
правило, виден только для класса - создателя.

Недостатки


Если процедура создания объекта достаточно
сложная (например выполняется на основе
некоего внешнего условия), логично
использовать паттерн "Абстрактная Фабрика",,
то есть, делегировать обязанность создания
объектов специальному классу.
Контроллер (Controller) GRASP


Проблема




Решение




"Кто" должен отвечать за обработку входных системных
событий?
Обязанности по обработке системных сообщений
делегируются специальному классу. Контроллер - это объект,
который отвечает за обработку системных событий и не
относится к интерфейсу пользователя. Контроллер определяет
методы для выполнения системных операций.

Рекомендации


Для различных прецедентов логично использовать разные
контроллеры (контроллеры прецедентов) - контроллеры не
должны быть перегружены. Внешний контроллер представляет
всю систему целиком, его можно использовать, если он будет
не слишком перегруженным (то есть, если существует лишь
несколько системных событий).
Controller. Критика


Преимущества






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

Недостатки


Контроллер может оказаться перегружен.
Низкая связанность (Low
Coupling)


Проблема




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

Решение


Распределить обязанности между
объектами так, чтобы степень
связанности оставалась низкой.
Низкая связанность. Пример
Высокое зацепление (High
Cohesion) - GRASP


Проблема




Необходимо обеспечить выполнение
объектами разнородных функций.

Решение


Обеспечить распределение
обязанностей с высоким зацеплением.
Высокое зацепление.
Критика


Преимущества




Классы с высокой степенью зацепления просты
в поддержке и повторном использовании.

Недостатки


Иногда бывает неоправданно использовать
высокое зацепление для распределенных
серверных обьектов. В этом случае для
обеспечения быстродействия необходимо
создать несколько более крупных серверных
обьектов со слабым зацеплением.
Полиморфизм
(Polymorphism) - GRASP


Проблема






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

Решение




Обязанности распределяются для различных
вариантов поведения с помощью
полиморфных операций для этого класса.
Каждая внешняя система имеет свой
интерфейс.
Полиморфизм. Пример
Полиморфизм. Критика


Преимущества




Впоследствии легко расширять и
модернизировать систему.

Недостатки


Не следует злоупотреблять
добавлением интерфейсов с
применением принципа полиморфизма с
целью обеспечения дееспособности
системы в неизвестных заранее новых
ситуациях.
Искусственный (Pure
Fabrication) - GRASP


Проблема




Какой класс должен обеспечивать реализацию
паттернов "Высокое зацепление", и "Низкая
связанность"?

Решение


Присвоить группу обязанностей с высокой
степенью зацепления классу, который не
представляет конкретного понятия из
предметной области (синтезировать
искусственную сущность для обеспечения
высокого зацепления и слабого связывания).
Искусственный. Пример






Какой класс должен сохранять экземпляры класса
"Продажа" в реляционной базе данных?
Если возложить эту обязанность на класс
"Продажа", то будем иметь низкую степень
зацепления и высокую степень связывания
(поскольку класс "Продажа" должен быть связан с
интерфейсом реляционной базы данных.
Хранение объектов в реляционной базе данных это общая задача, которую придется решать для
многих классов.
Искусственный. Пример


Решением данной проблемы будет создание
нового класса "ПостоянноеХранилище",
ответственного за сохранение обьектов
некоторого вида в базе данных.
Искуственный. Критика


Преимущества




Класс "ПостоянноеХранилище" будет
обладать низкой степенью связывания и
высокой степенью зацепления.

Недостатки


Данным паттерном не следует
злоупотреблять иначе все функции
системы превратятся в объекты.
Перенаправление
(Indirection) - GRASP


Проблема




Решение




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

Пример


См. пример к паттерну "Искусственный". Класс
"Хранилище" выступает в роли промежуточного звена
между классом "Продажа" и базой данных.
Устойчивый к изменениям
(Protected Variations) GRASP


Проблема




Как спроектировать систему так, чтобы
изменение одних ее элементов не влияло на
другие?

Решение


Идентифицировать точки возможных
изменений или неустойчивости и распределить
обязанности таким образом, чтобы обеспечить
устойчивую работу системы.
Устойчивый к изменениям.
Пример
Итоги


Паттерны GRASP:










Information Expert
Creator
Controller
Low Coupling
High Cohesion
Polymorphism
Pure Fabrication
Indirection
Protected Variations

More Related Content

What's hot

SOLID & GRASP
SOLID & GRASPSOLID & GRASP
SOLID & GRASP
devel123
 

What's hot (20)

Object oriented programming interview questions
Object oriented programming interview questionsObject oriented programming interview questions
Object oriented programming interview questions
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design Pattern For C# Part 1
Design Pattern For C# Part 1Design Pattern For C# Part 1
Design Pattern For C# Part 1
 
SOLID & GRASP
SOLID & GRASPSOLID & GRASP
SOLID & GRASP
 
Facade Design Pattern
Facade Design PatternFacade Design Pattern
Facade Design Pattern
 
Class diagram
Class diagramClass diagram
Class diagram
 
Design Patterns - 01 Introduction and Decorator Pattern
Design Patterns - 01 Introduction and Decorator PatternDesign Patterns - 01 Introduction and Decorator Pattern
Design Patterns - 01 Introduction and Decorator Pattern
 
OOP - Understanding association, aggregation, composition and dependency
OOP - Understanding association, aggregation, composition and dependencyOOP - Understanding association, aggregation, composition and dependency
OOP - Understanding association, aggregation, composition and dependency
 
Design Pattern - Singleton Pattern
Design Pattern - Singleton PatternDesign Pattern - Singleton Pattern
Design Pattern - Singleton Pattern
 
Introduction to fragments in android
Introduction to fragments in androidIntroduction to fragments in android
Introduction to fragments in android
 
Hibernate
HibernateHibernate
Hibernate
 
Android Fragment
Android FragmentAndroid Fragment
Android Fragment
 
The Singleton Pattern Presentation
The Singleton Pattern PresentationThe Singleton Pattern Presentation
The Singleton Pattern Presentation
 
Object Modeling Techniques
Object Modeling TechniquesObject Modeling Techniques
Object Modeling Techniques
 
Facade pattern
Facade patternFacade pattern
Facade pattern
 
Prototype pattern
Prototype patternPrototype pattern
Prototype pattern
 
SE_Lec 09_ UML Behaviour Diagrams
SE_Lec 09_ UML Behaviour DiagramsSE_Lec 09_ UML Behaviour Diagrams
SE_Lec 09_ UML Behaviour Diagrams
 
Difference between association, aggregation and composition
Difference between association, aggregation and compositionDifference between association, aggregation and composition
Difference between association, aggregation and composition
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Java Course 11: Design Patterns
Java Course 11: Design PatternsJava Course 11: Design Patterns
Java Course 11: Design Patterns
 

Similar to Шаблоны разработки ПО. Шаблоны GRASP

GRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного ПроектированияGRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного Проектирования
Alexander Nemanov
 
07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP
Edward Galiaskarov
 
Role based access-control
Role based access-controlRole based access-control
Role based access-control
Alex Frolov
 
Web20 from zero
Web20 from zeroWeb20 from zero
Web20 from zero
qweasdrty
 
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Ontico
 
Александр Гладыш — Visual editor for business logic in Lua and JS
Александр Гладыш — Visual editor for business logic in Lua and JSАлександр Гладыш — Visual editor for business logic in Lua and JS
Александр Гладыш — Visual editor for business logic in Lua and JS
Yury Yurevich
 

Similar to Шаблоны разработки ПО. Шаблоны GRASP (20)

Grasp principles
Grasp principlesGrasp principles
Grasp principles
 
Grasp principles
Grasp principlesGrasp principles
Grasp principles
 
GRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного ПроектированияGRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного Проектирования
 
07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP07 Архитектура информационных систем. Принципы GRASP
07 Архитектура информационных систем. Принципы GRASP
 
лек11 7
лек11 7лек11 7
лек11 7
 
лек11 7
лек11 7лек11 7
лек11 7
 
Введение в машинное обучение
Введение в машинное обучениеВведение в машинное обучение
Введение в машинное обучение
 
Role based access-control
Role based access-controlRole based access-control
Role based access-control
 
Java 9 - кратко о новом
Java 9 -  кратко о новомJava 9 -  кратко о новом
Java 9 - кратко о новом
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Web20 from zero
Web20 from zeroWeb20 from zero
Web20 from zero
 
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
 
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
 
Uml
UmlUml
Uml
 
Александр Гладыш — Visual editor for business logic in Lua and JS
Александр Гладыш — Visual editor for business logic in Lua and JSАлександр Гладыш — Visual editor for business logic in Lua and JS
Александр Гладыш — Visual editor for business logic in Lua and JS
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
АРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxАРК-ПЗ-1.pptx
АРК-ПЗ-1.pptx
 
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нёмFrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
 

More from Sergey Nemchinsky

Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
Sergey Nemchinsky
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. Введние
Sergey Nemchinsky
 

More from Sergey Nemchinsky (18)

Как найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететьКак найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететь
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклы
 
Как пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системыКак пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системы
 
Как найти первую работу и не вылететь с нее
Как найти первую работу  и не вылететь с нееКак найти первую работу  и не вылететь с нее
Как найти первую работу и не вылететь с нее
 
Быть разработчиком: вызовы, ожидания, перестроение мозгов
Быть разработчиком: вызовы, ожидания, перестроение мозговБыть разработчиком: вызовы, ожидания, перестроение мозгов
Быть разработчиком: вызовы, ожидания, перестроение мозгов
 
Service oriented architecture, Oracle Service Bus
Service oriented architecture, Oracle Service BusService oriented architecture, Oracle Service Bus
Service oriented architecture, Oracle Service Bus
 
Java enterprise: обучение, работа, перспективы
Java enterprise: обучение, работа, перспективыJava enterprise: обучение, работа, перспективы
Java enterprise: обучение, работа, перспективы
 
Enterprise или на чем стоит мир
Enterprise или на чем стоит мирEnterprise или на чем стоит мир
Enterprise или на чем стоит мир
 
Java enterprise: Обучение, работа, перспективы
Java enterprise: Обучение, работа, перспективыJava enterprise: Обучение, работа, перспективы
Java enterprise: Обучение, работа, перспективы
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. Databases
 
Основы Java. 4. Web
Основы Java. 4. WebОсновы Java. 4. Web
Основы Java. 4. Web
 
Основы Java. 4. Collection Framework
Основы Java. 4. Collection FrameworkОсновы Java. 4. Collection Framework
Основы Java. 4. Collection Framework
 
Основы Java. 3. Конструкторы, уровни доступа, статика
Основы Java. 3. Конструкторы, уровни доступа, статикаОсновы Java. 3. Конструкторы, уровни доступа, статика
Основы Java. 3. Конструкторы, уровни доступа, статика
 
Основы Java. 2. JVM
Основы Java. 2. JVMОсновы Java. 2. JVM
Основы Java. 2. JVM
 
Основы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыОсновы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсы
 
Щаблоны разработки ПО. Антипаттерны
Щаблоны разработки ПО. АнтипаттерныЩаблоны разработки ПО. Антипаттерны
Щаблоны разработки ПО. Антипаттерны
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
 
Шаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. ВведниеШаблоны разработки ПО. Часть 1. Введние
Шаблоны разработки ПО. Часть 1. Введние
 

Шаблоны разработки ПО. Шаблоны GRASP

  • 2. GRASP   Craig Larman Книга Applying UML and Patterns, 3ed. GRASP stands for General Responsibility Assignment Software Patterns.
  • 3. Полный список шаблонов GRASP          Information Expert Creator Controller Low Coupling High Cohesion Polymorphism Pure Fabrication Indirection Protected Variations
  • 4. Шаблон информационный эксперт (Information Expert)- GRASP  Проблема   Решение   В системе должна аккумулироваться, рассчитываться и т. п. необходимая информация. Назначить обязанность аккумуляции информации, расчета и т. п. некоему классу (информационному эксперту), обладающему необходимой информацией. Рекомендации  Информационным экспертом может быть не один класс, а несколько.
  • 5. Эксперт. Пример    Необходимо рассчитать общую сумму продажи. Имеются классы проектирования "Продажа", "ТоварПродажа" (продажа отдельного вида товара в рамках продажи в целом), "ТоварСпецификация" (описание конкретного вида товара). Необходимо распределить обязанности по предоставлению информации и расчету между этими классами. Таким образом, все три объекта являются информационными экспертами.
  • 7. Создатель экземпляров класса (Creator) - GRASP  Проблема   Решение   "Кто" должен отвечать за создание экземпляров класса. Назначить классу В обязанность создавать объекты другого класса А Рекомендации  Логично использовать паттерн если класс В содержит, агрегирует, активно использует и т.п. объекты класса А.
  • 8. Creator. Пример.   необходимо определить, какой объект должен отвечать за создание экземпляра "ТоварПродажа". Логично, чтобы это был объект "Продажа", поскольку он содержит (агрегирует) несколько обьектов "ТоварПродажа".
  • 10. Creator. Критика  Преимущества   Использование этого паттерна не повышает связанности, поскольку созданный класс, как правило, виден только для класса - создателя. Недостатки  Если процедура создания объекта достаточно сложная (например выполняется на основе некоего внешнего условия), логично использовать паттерн "Абстрактная Фабрика",, то есть, делегировать обязанность создания объектов специальному классу.
  • 11. Контроллер (Controller) GRASP  Проблема   Решение   "Кто" должен отвечать за обработку входных системных событий? Обязанности по обработке системных сообщений делегируются специальному классу. Контроллер - это объект, который отвечает за обработку системных событий и не относится к интерфейсу пользователя. Контроллер определяет методы для выполнения системных операций. Рекомендации  Для различных прецедентов логично использовать разные контроллеры (контроллеры прецедентов) - контроллеры не должны быть перегружены. Внешний контроллер представляет всю систему целиком, его можно использовать, если он будет не слишком перегруженным (то есть, если существует лишь несколько системных событий).
  • 12. Controller. Критика  Преимущества    Удобно накапливать информацию о системных событиях (в случае, если системные операции выполняются в некоторой определенной последовательности). Улучшаются условия для повторного использования компонентов (системные события обрабатываются Контроллером а не элементами интерфейса пользователя). Недостатки  Контроллер может оказаться перегружен.
  • 13. Низкая связанность (Low Coupling)  Проблема   Обеспечить низкую связанность при создании экземпляра класса и связывании его с другим классом. Решение  Распределить обязанности между объектами так, чтобы степень связанности оставалась низкой.
  • 15. Высокое зацепление (High Cohesion) - GRASP  Проблема   Необходимо обеспечить выполнение объектами разнородных функций. Решение  Обеспечить распределение обязанностей с высоким зацеплением.
  • 16. Высокое зацепление. Критика  Преимущества   Классы с высокой степенью зацепления просты в поддержке и повторном использовании. Недостатки  Иногда бывает неоправданно использовать высокое зацепление для распределенных серверных обьектов. В этом случае для обеспечения быстродействия необходимо создать несколько более крупных серверных обьектов со слабым зацеплением.
  • 17. Полиморфизм (Polymorphism) - GRASP  Проблема    Как обрабатывать альтернативные варианты поведения на основе типа? Как заменять подключаемые компоненты системы? Решение   Обязанности распределяются для различных вариантов поведения с помощью полиморфных операций для этого класса. Каждая внешняя система имеет свой интерфейс.
  • 19. Полиморфизм. Критика  Преимущества   Впоследствии легко расширять и модернизировать систему. Недостатки  Не следует злоупотреблять добавлением интерфейсов с применением принципа полиморфизма с целью обеспечения дееспособности системы в неизвестных заранее новых ситуациях.
  • 20. Искусственный (Pure Fabrication) - GRASP  Проблема   Какой класс должен обеспечивать реализацию паттернов "Высокое зацепление", и "Низкая связанность"? Решение  Присвоить группу обязанностей с высокой степенью зацепления классу, который не представляет конкретного понятия из предметной области (синтезировать искусственную сущность для обеспечения высокого зацепления и слабого связывания).
  • 21. Искусственный. Пример    Какой класс должен сохранять экземпляры класса "Продажа" в реляционной базе данных? Если возложить эту обязанность на класс "Продажа", то будем иметь низкую степень зацепления и высокую степень связывания (поскольку класс "Продажа" должен быть связан с интерфейсом реляционной базы данных. Хранение объектов в реляционной базе данных это общая задача, которую придется решать для многих классов.
  • 22. Искусственный. Пример  Решением данной проблемы будет создание нового класса "ПостоянноеХранилище", ответственного за сохранение обьектов некоторого вида в базе данных.
  • 23. Искуственный. Критика  Преимущества   Класс "ПостоянноеХранилище" будет обладать низкой степенью связывания и высокой степенью зацепления. Недостатки  Данным паттерном не следует злоупотреблять иначе все функции системы превратятся в объекты.
  • 24. Перенаправление (Indirection) - GRASP  Проблема   Решение   Как перераспределить обязанности обьектов, чтобы обеспечить отсутствие прямого связывания? Присвоить обязанности по обеспечению связи между службами или компонентами промежуточному объекту. Пример  См. пример к паттерну "Искусственный". Класс "Хранилище" выступает в роли промежуточного звена между классом "Продажа" и базой данных.
  • 25. Устойчивый к изменениям (Protected Variations) GRASP  Проблема   Как спроектировать систему так, чтобы изменение одних ее элементов не влияло на другие? Решение  Идентифицировать точки возможных изменений или неустойчивости и распределить обязанности таким образом, чтобы обеспечить устойчивую работу системы.
  • 27. Итоги  Паттерны GRASP:          Information Expert Creator Controller Low Coupling High Cohesion Polymorphism Pure Fabrication Indirection Protected Variations