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