stringtranslate.com

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

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

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

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

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

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

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

На практике

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рекомендации

  1. ^ Хукуэй, Б. (2014). «Глава 1: Предмет интерфейса». Интерфейс. МТИ Пресс. стр. 1–58. ISBN 9780262525503.
  2. ^ IEEE 100 — Авторитетный словарь терминов стандартов IEEE . Нью-Йорк, Нью-Йорк, США: IEEE Press. 2000. стр. 574–575. ISBN 9780738126012.
  3. ^ аб Блаау, Геррит А.; Брукс-младший, Фредерик П. (1997), «Глава 8.6, Интерфейсы устройств», Концепции компьютерной архитектуры и эволюция , Аддисон-Уэсли, стр. 489–493, ISBN 0-201-10557-8См. также: Паттерсон, Дэвид А.; Хеннесси, Джон Л. (2005), «Глава 8.5, Взаимодействие устройств ввода-вывода с процессором, памятью и операционной системой», Организация и проектирование компьютера - интерфейс аппаратного и программного обеспечения, третье издание , Морган Кауфманн, стр. 588–596. , ISBN 1-55860-604-1
  4. ^ Говиндараджалу, Б. (2008). «3.15 Периферийные интерфейсы и контроллеры — OG». IBM PC и клоны: оборудование, устранение неполадок и обслуживание . Tata McGraw-Hill Publishing Co. Ltd., стр. 142–144. ISBN 9780070483118. Проверено 15 июня 2018 г.
  5. ^ Буя, Р. (2013). Освоение облачных вычислений. Тата МакГроу-Хилл Образование. п. 2.13. ISBN 9781259029950.
  6. ^ Пу, Д.; Кионг, Д.; Ашок, С. (2008). «Глава 2: Объект, класс, сообщение и метод». Объектно-ориентированное программирование и Java. Спрингер-Верлаг. стр. 7–15. ISBN 9781846289637.
  7. ^ Билл Веннерс (6 июня 2005 г.). «Передовой Java: принципы проектирования из шаблонов проектирования: от программы к интерфейсу, а не к реализации - разговор с Эрихом Гаммой, часть III». разработчик артима . Архивировано из оригинала 5 августа 2011 г. Проверено 3 августа 2011 г. Если вы зависите только от интерфейсов, вы отделяетесь от реализации. Это означает, что реализация может различаться, и это здоровые отношения зависимости. Например, в целях тестирования вы можете заменить тяжелую реализацию базы данных более легкой фиктивной реализацией. К счастью, благодаря сегодняшней поддержке рефакторинга вам больше не нужно заранее придумывать интерфейс. Вы можете выделить интерфейс из конкретного класса, как только получите полное представление о проблеме. Предполагаемый интерфейс находится всего в одном рефакторинге «извлечения интерфейса». ...
  8. ^ Паттерсон, Д.А.; Хеннесси, JL (7 августа 2004 г.). Компьютерная организация и дизайн: аппаратно-программный интерфейс (3-е изд.). Эльзевир. п. 656. ИСБН 9780080502571.
  9. ^ «Что такое интерфейс» . Учебники по Java . Оракул. Архивировано из оригинала 12 апреля 2012 г. Проверено 1 мая 2012 г.
  10. ^ «Интерфейсы». Учебники по Java . Оракул. Архивировано из оригинала 26 мая 2012 г. Проверено 1 мая 2012 г.
  11. ^ «Методы повышения производительности при сериализации». Точная Ява. Архивировано из оригинала 24 августа 2011 г. Проверено 4 августа 2011 г. Сначала мы поговорим о сериализуемом интерфейсе. Это интерфейс маркера, не имеющий никаких методов.
  12. ^ Гамма; Шлем; Джонсон; Влиссидес (1995). Шаблоны проектирования: элементы объектно-ориентированного программного обеспечения многократного использования . Эддисон Уэсли. стр. 17–18. ISBN 9780201633610.