Принцип единой ответственности (single responsibility principle)

Принцип единой ответственности (single responsibility principle) - это принцип компьютерного программирования, который гласит, что каждый модуль, класс или функция должны нести ответственность за одну часть функциональности, предоставляемой программным обеспечением, и эта ответственность должна быть полностью заключена в класс, модуль или функцию. Все его услуги должны быть тесно связаны с этой ответственностью. Роберт К. Мартин выражает принцип следующим образом: "У класса должна быть только одна причина для изменения".

История

Термин был введен Робертом К. Мартином в одноименной статье, являющейся частью его "Принципов объектно-ориентированного проектирования", ставшую популярной благодаря его книге "Гибкая разработка программного обеспечения, принципы, шаблоны и практики". Мартин описал его как основанный на принципе сплоченности, как описано Томом ДеМарко в его книге "Структурный анализ и спецификация системы", и Мейлиром Пейдж-Джонсом в "Практическом руководстве по проектированию структурированных систем".

Пример

Мартин определяет ответственность как причину для изменения и приходит к выводу, что у класса или модуля должна быть только одна причина быть измененным (то есть переписанным). В качестве примера рассмотрим модуль, который компилирует и печатает отчет. Представьте, что такой модуль можно изменить по двум причинам. Во-первых, содержание отчета может измениться. Во-вторых, формат отчета может измениться. Эти две вещи меняются по разным причинам; одна основная и одна косметическая. Принцип единой ответственности говорит о том, что эти два аспекта проблемы на самом деле являются двумя отдельными обязанностями и поэтому должны быть в отдельных классах или модулях. Было бы плохим решением соединить две вещи, которые меняются по разным причинам в разное время.

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


Читайте также:

Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Нормальные формы, пример нормализации в базе данных

Хэш-таблица: разрешение коллизий