Принцип разделения интерфейса - Interface segregation principle

В области программная инженерия, то принцип разделения интерфейса (Интернет-провайдер) заявляет, что ни один клиент не должен зависеть от методов, которые он не использует.[1] Интернет-провайдер разделяет очень большие интерфейсы на более мелкие и более конкретные, так что клиентам нужно будет знать только о методах, которые их интересуют. Такие сжатые интерфейсы еще называют ролевой интерфейсс.[2] ISP предназначен для того, чтобы система оставалась изолированной, и, таким образом, ее было легче реорганизовать, изменить и повторно развернуть. ISP является одним из пяти ТВЕРДЫЙ принципы объектно-ориентированного дизайна, аналогичные принципу высокой сплоченности ПОНЯТЬ.[3]

Важность объектно-ориентированного дизайна

В объектно-ориентированный дизайн, интерфейсы обеспечивают уровни абстракции, которые упрощают код и создают барьер, предотвращающий связь с зависимости.

По мнению многих экспертов по программному обеспечению, подписавших Манифест о Мастерство программного обеспечения, написание хорошо продуманного и понятного программного обеспечения почти так же важно, как написание рабочего программного обеспечения.[4] Использование интерфейсов для дальнейшего описания цели программного обеспечения часто является хорошей идеей.

Система может стать настолько связанной на нескольких уровнях, что больше невозможно будет вносить изменения в одном месте без необходимости множества дополнительных изменений.[1] Используя интерфейс или абстрактный класс может предотвратить этот побочный эффект.

Источник

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

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

В решении, предложенном Мартином, использовалось то, что сегодня называется принципом разделения интерфейсов. Применительно к программному обеспечению Xerox уровень интерфейса между классом Job и его клиентами был добавлен с помощью Принцип инверсии зависимостей. Вместо одного большого класса Job был создан интерфейс Staple Job или интерфейс Print Job, который будет использоваться классами Staple или Print соответственно, вызывая методы класса Job. Поэтому для каждого типа задания был создан один интерфейс, который был реализован классом Job.

Типичное нарушение

Типичное нарушение принципа разделения интерфейсов приведено в книге «Гибкая разработка программного обеспечения: принципы, шаблоны и практики».[1] в «Пример транзакции через банкомат» и в статье, также написанной Роберт С. Мартин конкретно про провайдера.[5] В этом примере обсуждается пользовательский интерфейс для банкомата, который обрабатывает все запросы, такие как запрос депозита или запрос на снятие средств, и то, как этот интерфейс должен быть разделен на отдельные и более конкретные интерфейсы.

Смотрите также

  • ТВЕРДЫЙ - «I» в SOLID означает принцип разделения интерфейса.

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

  1. ^ а б c Мартин, Роберт (2002). Гибкая разработка программного обеспечения: принципы, шаблоны и практики. Pearson Education.
  2. ^ Ролевой интерфейс
  3. ^ "Дэвид Хайден, Принцип разделения интерфейса (ISP) - Принципы объектно-ориентированного проектирования классов". Архивировано из оригинал на 2010-08-20. Получено 2009-11-07.
  4. ^ Манифест мастерства разработки программного обеспечения
  5. ^ Роберт С. Мартин,Принцип разделения интерфейса, Отчет C ++, июнь 1996 г.

внешняя ссылка

  • Принципы OOD - Описание и ссылки на подробные статьи о SOLID.