Jump to content

Принцип разделения интерфейсов

В области разработки программного обеспечения принцип разделения интерфейсов ( ISP ) гласит, что ни один код не должен зависеть от методов, которые он не использует. [1] Интернет-провайдер разбивает очень большие интерфейсы на более мелкие и более конкретные, так что клиентам нужно будет знать только о тех методах, которые их интересуют. Такие сжатые интерфейсы также называются ролевыми интерфейсами . [2] ISP предназначен для того, чтобы обеспечить развязку системы и, таким образом, упростить рефакторинг, изменение и повторное развертывание. ISP — это один из пяти принципов объектно-ориентированного проектирования SOLID , аналогичный принципу высокой сплоченности GRASP . [3] Помимо объектно-ориентированного проектирования, ISP также является ключевым принципом проектирования распределенных систем в целом и одним из шести принципов IDEALS для проектирования микросервисов . [4]

Важность в объектно-ориентированном проектировании

[ редактировать ]

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

Источник

[ редактировать ]

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

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

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

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

[ редактировать ]

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

См. также

[ редактировать ]
  • SOLID – буква «I» в слове SOLID означает принцип разделения интерфейса.
  1. ^ Jump up to: а б с Мартин, Роберт (2002). Гибкая разработка программного обеспечения: принципы, шаблоны и практики. Пирсон Образование.
  2. ^ Ролевой интерфейс
  3. ^ «Дэвид Хейден, Принцип разделения интерфейсов (ISP) — принципы объектно-ориентированного проектирования классов » . Архивировано из оригинала 20 августа 2010 г. Проверено 7 ноября 2009 г.
  4. ^ Пауло Мерсон, Принципы проектирования микросервисов: думайте ИДЕАЛЫ, а не ТВЕРДОСТЬ , выпуск InfoQ eMag № 91, февраль 2021 г.
  5. ^ «Этот принцип был впервые определен Робертом К. Мартином» .
  6. ^ Роберт К. Мартин, Принцип разделения интерфейса , отчет C++, июнь 1996 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 800117cb4a6a132a790584241c597539__1722501720
URL1:https://arc.ask3.ru/arc/aa/80/39/800117cb4a6a132a790584241c597539.html
Заголовок, (Title) документа по адресу, URL1:
Interface segregation principle - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)