- Принцип единственной обязанности
-
В объектно-ориентированном программировании принцип единственной обязанности обозначает, что каждый объект должен иметь одну обязанность и эта обязанность должна быть полностью инкапсулирована в класс. Все его сервисы должны быть направлены исключительно на обеспечение этой обязанности.
Термин был введён Робертом С. Мартином в одноименной статье как часть его Принципов объектно-ориентированного проектирования, ставших популярными благодаря его книге Быстрая разработка программ. Принципы, примеры, практика [1]. Мартин описал её как основанную на принципе связности, сформулированном Томом ДеМарко в его книге Structured Analysis and Systems Specification[2].
Мартин определяет обязанность как причину изменения и заключает, что класс или модуль должны иметь одну и только одну причину измениться. Например, представьте себе модуль, который составляет и печатает отчёт. Такой модуль может измениться по двум причинам. Во первых, может измениться само содержимое отчёта. Во вторых, может измениться формат отчёта. Оба этих фактора изменяют модуль по разным причинам: в одном случае изменение содержательное, а во втором — косметическое. Принцип единственной обязанности говорит, что оба аспекта этой проблемы на самом деле являются двумя разными обязанностями, и в таком случае должны находиться в разных классах или модулях. Объединение двух сущностей, изменяющихся по разным причинам и в разное время, считается плохим проектным решением.
Причина, почему нужно сохранять направленность класса на единственную цель в том, что это делает класс более здоровым. Что касается приведённого выше примера, если произошло изменение в процессе составления отчёта — есть большая вероятность, что в негодность придёт код, отвечающий за печать, если он является частью того же класса.
Принцип единственной обязанности используется в методологиях проектирования «от обязанности», таких как RDD и URDAD
Использование
SOLID — буква «S» в аббревиатуре обозначает Принцип единственной обязанности (англ. Single responsibility principle)
Источники
- ↑ Мартин, Роберт. Быстрая разработка программ. Принципы, примеры, практика. — Вильямс, 2004. — ISBN 5845905583
- ↑ DeMarco, Tom. Structured Analysis and System Specification. — Prentice Hall, 1979. — ISBN 0138543801
Ссылки
Категории:- Разработка программного обеспечения
- Объектно-ориентированное программирование
- Проектирование программного обеспечения
- Принципы программирования
Wikimedia Foundation. 2010.