Программирование на основе интерфейсов , также известное как архитектура на основе интерфейсов , представляет собой архитектурный шаблон для реализации модульного программирования на уровне компонентов на объектно-ориентированном языке программирования , не имеющем модульной системы. Примером такого языка является Java , которая (по состоянию на 2015 год [Обновить]) не имеет модульной системы на уровне компонентов. Java имеет систему пакетов , но программные компоненты Java обычно состоят из нескольких пакетов Java. - и в любом случае программирование интерфейса может дать преимущества перед простым использованием пакетов Java, даже если компонент состоит только из одного пакета Java.
Программирование на основе интерфейса определяет приложение как набор компонентов, в котором вызовы интерфейса прикладного программирования (API) между компонентами могут выполняться только через абстрактные интерфейсы, а не через конкретные классы. Экземпляры классов обычно получают через другие интерфейсы с использованием таких методов, как шаблон Factory .
Утверждается, что это увеличивает модульность приложения и, следовательно, его ремонтопригодность . Однако следует соблюдать некоторую осторожность - простое разделение приложения на произвольные компоненты, взаимодействующие через интерфейсы, само по себе не гарантирует низкую связь или высокую согласованность - два других атрибута, которые обычно считаются ключевыми для ремонтопригодности.
Архитектура на основе интерфейса может использоваться, когда третьи стороны - или отдельные группы в рамках одной организации - разрабатывают дополнительные компоненты или плагины для установленной системы. Кодовая база Eclipse IDE является примером программирования на основе интерфейса. Поставщикам подключаемых модулей Eclipse просто нужно разработать компоненты, удовлетворяющие интерфейсу, указанному поставщиком родительского приложения, Eclipse Foundation. Действительно, в Eclipse даже оригинальные компоненты, такие как Java Development Tools, сами по себе являются плагинами. Это отчасти похоже на то, как производитель мобильных телефонов указывает интерфейс мобильного зарядного устройства (расположение контактов, ожидаемое напряжение постоянного тока и т. Д.), А производитель и третьи стороны создают свои собственные зарядные устройства для мобильных телефонов, соответствующие этой стандартной спецификации интерфейса.
Эволюция программного обеспечения в программировании на основе интерфейсов
Использование интерфейсов для совместной работы разрозненных команд поднимает вопрос о том, как происходят изменения интерфейса в программировании на основе интерфейсов. Проблема в том, что если интерфейс изменяется, например, путем добавления нового метода, старый код, написанный для реализации интерфейса, больше не будет компилироваться - а в случае динамически загружаемых или связанных подключаемых модулей он либо не сможет загрузить, либо связать, либо сбой во время выполнения. Есть два основных подхода к решению этой проблемы:
- новый интерфейс может быть разработан с дополнительными функциями, которые могут унаследовать от старого интерфейса
- версии программного обеспечения политика , такие как семантический версий 2.0 , может быть передана интерфейсом реализаторов, чтобы вперед несовместимыми, или даже назад несовместимым, изменения в будущих «основных» версиях платформы
Оба этих подхода использовались в платформе Java.
Дизайн по контракту
Издатель интерфейсов обычно обещает, что они не будут изменять интерфейс в новых «минорных» версиях программного обеспечения, а разработчик, реализуя интерфейс, подразумевает, что они реализовали по крайней мере необходимые части интерфейса без каких-либо отклонений. Таким образом, интерфейс можно рассматривать как «договорное соглашение» между поставщиком и потребителем интерфейса. Если этот контракт оформлен более формально как спецификация программного обеспечения, это пример проектирования по контракту . Однако разработка по контракту сама по себе не требует использования интерфейсов для всех компонентов.
Смотрите также
- Микросервисы
- Актерская модель
- CORBA , более старая компонентная система для объектно-ориентированного программного обеспечения, которая сейчас редко используется по разным причинам.
Рекомендации
- Разработка на основе интерфейса C # , c-sharpcorner.com
- Разработка на основе интерфейса - унифицированный язык моделирования (UML) , devmentor.org
- Создание большого приложения с архитектурой на основе интерфейса , rhyous.com, 18 октября 2011 г.
- Understanding Interface-based Programming , Microsoft Developers Network , по состоянию на 16 сентября 2016 г.