Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Аппаратные интерфейсы [ править ]

Аппаратные интерфейсы портативного компьютера: сетевой разъем Ethernet (в центре), слева часть порта VGA , справа (вверху) разъем порта дисплея , справа (внизу) разъем USB 2.0.

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

Программные интерфейсы [ править ]

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

На практике [ править ]

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

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

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

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

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

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

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

Хотя интерфейсы могут содержать множество методов, они могут содержать только один или даже не содержать ни одного. Например, язык Java определяет интерфейс Readableс единственным методом; Различные варианты выполнения используются для различных целей, в том числе , , , , и . Интерфейсы маркеров, например, не содержат методов вообще и служат для предоставления информации времени выполнения для общей обработки с использованием Reflection . [11]read()BufferedReaderFileReaderInputStreamReaderPipedReaderStringReaderSerializable

Программирование в интерфейс [ править ]

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

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

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

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

См. Также [ править ]

  • Инверсия абстракции
  • Бинарный интерфейс приложения
  • Интерфейс прикладного программирования
  • Интерфейс взаимодействия с бизнесом
  • Компьютерный автобус
  • Интерфейс жесткого диска
  • Реализация (информатика)
  • Наследование реализации
  • Семантика наследования
  • Модульное программирование
  • Программные компоненты
  • Виртуальное наследование

Ссылки [ править ]

  1. ^ Hookway, В. (2014). «Глава 1: Предмет интерфейса». Интерфейс . MIT Press. С. 1–58. ISBN 9780262525503.
  2. ^ IEEE 100 - Авторитетный словарь терминов стандартов IEEE . Нью-Йорк, Нью-Йорк, США: IEEE Press. 2000. С. 574–575. ISBN 9780738126012.
  3. ^ a b Blaauw, Gerritt A .; Брукс-младший, Фредерик П. (1997), «Глава 8.6, Интерфейсы устройств», Computer Architecture-Concepts and Evolution , Addison-Wesley, pp. 489–493, ISBN 0-201-10557-8См. Также: Patterson, David A .; Хеннесси, Джон Л. (2005), «Глава 8.5, Интерфейс устройств ввода-вывода с процессором, памятью и операционной системой», Организация и дизайн компьютера - Аппаратный / программный интерфейс, третье издание , Морган Кауфманн, стр.  588–596 , ISBN 1-55860-604-1
  4. ^ Govindarajalu, B. (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. ^ Билл Веннерс (2005-06-06). «Передовая Java: принципы проектирования от шаблонов проектирования: программа к интерфейсу, а не реализация - беседа с Эрихом Гаммой, часть III» . http://www.artima.com/index.jsp : разработчик artima. Архивировано 05 августа 2011 года . Проверено 3 августа 2011 .Как только вы зависите только от интерфейсов, вы отделяетесь от реализации. Это означает, что реализация может варьироваться, и это здоровые отношения зависимости. Например, в целях тестирования вы можете заменить тяжелую реализацию базы данных на более легкую фиктивную реализацию. К счастью, с сегодняшней поддержкой рефакторинга вам больше не нужно придумывать интерфейс заранее. Вы можете выделить интерфейс из конкретного класса, когда получите полное представление о проблеме. Предполагаемый интерфейс - это всего лишь один рефакторинг «извлечения интерфейса». ...
  8. ^ Паттерсон, DA; Хеннесси, Дж. Л. Организация и дизайн компьютеров: аппаратно-программный интерфейс (3-е изд.). Эльзевир. п. 656. ISBN. 9780080502571.
  9. ^ «Что такое интерфейс» . Учебники по Java . Oracle. Архивировано 12 апреля 2012 года . Проверено 1 мая 2012 .
  10. ^ "Интерфейсы" . Учебники по Java . Oracle. Архивировано 26 мая 2012 года . Проверено 1 мая 2012 .
  11. ^ «Методы повышения производительности в сериализации» . http://www.precisejava.com/ : точная Java. Архивировано 24 августа 2011 года . Проверено 4 августа 2011 . Сначала мы поговорим о Serializable интерфейсе. Это интерфейс маркера и не имеет никаких методов.
  12. ^ Гамма; Шлем; Джонсон; Влиссидес (1995). Шаблоны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования . Эддисон Уэсли. С.  17–18 .