Skip to main content

Что такое принцип единой ответственности?

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

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

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

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

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