Интерфейс (вычисления) - Interface (computing)

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

Аппаратные интерфейсы

Аппаратные интерфейсы присутствуют во многих компонентах, таких как различные Автобусы, устройства хранения данных, Другой Ввод / вывод устройства и т. д. Аппаратный интерфейс описывается механическими, электрическими и логическими сигналами на интерфейсе и протоколом их упорядочения (иногда называемым сигнализацией).[3] Стандартный интерфейс, например SCSI, отделяет дизайн и внедрение вычислительного оборудования, такого как Ввод / вывод устройств, начиная с разработки и внедрения других компонентов вычислительной системы, тем самым предоставляя пользователям и производителям большую гибкость при реализации вычислительных систем.[3] Аппаратные интерфейсы могут быть параллельно с несколькими электрическими соединениями, передающими части данных одновременно, или серийный куда данные отправляются немного вовремя.[4]

Программные интерфейсы

Программный интерфейс может относиться к широкому спектру различных типов интерфейса на разных «уровнях»: операционная система может взаимодействовать с частями оборудования. Приложения или программы в операционной системе может потребоваться взаимодействие через данные потоки, фильтры и трубопроводы;[5] И в объектно-ориентированные программы, объектам в приложении может потребоваться взаимодействие через методы.[6]

На практике

Ключевой принцип дизайна - запретить доступ ко всем ресурсам по умолчанию, разрешив доступ только через четко определенные точки входа, то есть интерфейсы.[7] Программные интерфейсы обеспечивают доступ к компьютерным ресурсам (таким как память, ЦП, хранилище и т. Д.) Базовой компьютерной системы; Прямой доступ (т. е. не через хорошо продуманные интерфейсы) к таким ресурсам со стороны программного обеспечения может иметь серьезные последствия - иногда катастрофические - для функциональности и стабильности.[нужна цитата ]

Интерфейсы между программными компонентами могут обеспечить константы, типы данных, типы процедуры, исключение спецификации и сигнатуры методов. Иногда публичные переменные также определены как часть интерфейса.[8]

Интерфейс программного модуля А сознательно определяется отдельно от реализация этого модуля. Последний содержит фактический код процедур и методов, описанных в интерфейсе, а также другие «частные» переменные, процедуры и т. Д. Другой программный модуль B, например клиент к А, который взаимодействует с А вынужден делать это только через опубликованный интерфейс. Одним из практических преимуществ такой схемы является то, что замена реализации А с другой реализацией того же интерфейса не должно вызывать B потерпеть неудачу - как А внутренне соответствует требованиям интерфейса не имеет отношения к B, который касается только со спецификациями интерфейса. (Смотрите также Принцип подстановки Лискова.)[нужна цитата ]

В объектно-ориентированных языках

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

Таким образом, интерфейс - это тип определение; везде, где можно обменять объект (например, в функция или метод звоните) тип обмениваемого объекта можно определить в терминах одного из реализованных интерфейсs или базовые классы вместо того, чтобы указывать конкретные класс. Этот подход означает, что можно использовать любой класс, реализующий этот интерфейс.[нужна цитата ] Например, фиктивная реализация может использоваться, чтобы позволить развитию развиваться до того, как будет доступна окончательная реализация. В другом случае подделка или насмешка реализация может быть заменена во время тестирования. Такие заглушка реализации заменяются реальным кодом позже в процессе разработки.

Обычно метод, определенный в интерфейсе, не содержит кода и поэтому не может быть вызван; он должен быть реализован неабстрактным кодом для запуска при его вызове.[нужна цитата ] Интерфейс под названием "Стек"может определять два метода: От себя() и поп (). Реализовать это можно по-разному, например, FastStack и GenericStack- первое работает быстро, работает со структурой данных фиксированного размера, а второе - со структурой данных, размер которой можно изменять, но за счет несколько меньшей скорости.

Хотя интерфейсы могут содержать много методов, они могут содержать только один или даже не содержать ни одного. Например, Ява язык определяет интерфейс Удобочитаемый это сингл читать() метод; различные реализации используются для разных целей, в том числе BufferedReader, FileReader, InputStreamReader, PipedReader, и StringReader. Маркер интерфейсы любить Сериализуемый не содержат вообще никаких методов и служат для предоставления информации времени выполнения для общей обработки с использованием Отражение.[11]

Программирование в интерфейс

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

Доводя эту идею до крайности, инверсия контроля оставляет контекст чтобы ввести код с конкретными реализациями интерфейса, который будет использоваться для выполнения работы.

Пользовательские интерфейсы

А пользовательский интерфейс точка взаимодействия компьютера и человека; он включает любое количество модальности из взаимодействие (например, графика, звук, положение, движение и т. д.), где данные передаются между пользователем и компьютерной системой.

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

использованная литература

  1. ^ Hookway, Б. (2014). «Глава 1: Предмет интерфейса». Интерфейс. MIT Press. С. 1–58. ISBN  9780262525503.
  2. ^ IEEE 100 - авторитетный словарь терминов стандартов IEEE. Нью-Йорк, Нью-Йорк, США: IEEE Press. 2000. С. 574–575. ISBN  9780738126012.
  3. ^ а б Blaauw, Gerritt A .; Брукс-младший, Фредерик П. (1997), «Глава 8.6, Интерфейсы устройств», Компьютерная архитектура - концепции и эволюция, Addison-Wesley, pp. 489–493, ISBN  0-201-10557-8Смотрите также:Паттерсон, Дэвид А .; Хеннесси, Джон Л. (2005), «Глава 8.5, Интерфейс устройств ввода-вывода с процессором, памятью и операционной системой», Организация и дизайн компьютера - аппаратно-программный интерфейс, третье издание, Морган Кауфманн, стр.588–596, ISBN  1-55860-604-1
  4. ^ Говиндараджалу, Б. (2008). «3.15 Периферийные интерфейсы и контроллеры - OG». IBM PC и клоны: оборудование, устранение неполадок и обслуживание. Тата МакГроу-Хилл Паблишинг Ко. Лтд., Стр. 142–144. ISBN  9780070483118. Получено 15 июн 2018.
  5. ^ Буйя, Р. (2013). Освоение облачных вычислений. Тата Макгроу-Хилл Образование. п. 2.13. ISBN  9781259029950.
  6. ^ Пу, Д .; Kiong, D .; Ашок, С. (2008). «Глава 2: Объект, класс, сообщение и метод». Объектно-ориентированное программирование и Java. Springer-Verlag. С. 7–15. ISBN  9781846289637.
  7. ^ Билл Веннерс (06.06.2005). «Передовая Java: принципы проектирования на основе шаблонов проектирования: программа для интерфейса, а не реализация - беседа с Эрихом Гаммой, часть III». http://www.artima.com/index.jsp: artima разработчик. В архиве из оригинала от 05.08.2011. Получено 2011-08-03. Когда вы зависите только от интерфейсов, вы отделяетесь от реализации. Это означает, что реализация может варьироваться, и это здоровые отношения зависимости. Например, в целях тестирования вы можете заменить тяжелую реализацию базы данных на более легкую фиктивную реализацию. К счастью, с сегодняшней поддержкой рефакторинга вам больше не нужно придумывать интерфейс заранее. Вы можете выделить интерфейс из конкретного класса, как только получите полное представление о проблеме. Предполагаемый интерфейс - это всего лишь один рефакторинг «извлечения интерфейса». ...
  8. ^ Patterson, D.A .; Хеннесси, Дж. Организация и дизайн компьютера: аппаратно-программный интерфейс (3-е изд.). Эльзевир. п. 656. ISBN  9780080502571.
  9. ^ "Что такое интерфейс". Учебники по Java. Oracle. В архиве из оригинала от 12.04.2012. Получено 2012-05-01.
  10. ^ «Интерфейсы». Учебники по Java. Oracle. В архиве из оригинала от 26.05.2012. Получено 2012-05-01.
  11. ^ «Методы повышения производительности при сериализации». http://www.precisejava.com/: Точная Java. В архиве из оригинала 2011-08-24. Получено 2011-08-04. Сначала мы поговорим о Serializable интерфейсе. Это интерфейс маркера и не имеет никаких методов.
  12. ^ Гамма; Шлем; Джонсон; Влиссидес (1995). Паттерны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования. Эддисон Уэсли. стр.17–18.