stringtranslate.com

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

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

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

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

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

Интерфейсы программного обеспечения

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

На практике

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ссылки

  1. ^ Хуквэй, Б. (2014). «Глава 1: Предмет интерфейса». Интерфейс. MIT Press. С. 1–58. ISBN 9780262525503.
  2. ^ IEEE 100 — авторитетный словарь терминов стандартов IEEE . Нью-Йорк, Нью-Йорк, США: IEEE Press. 2000. С. 574–575. ISBN 9780738126012.
  3. ^ ab Blaauw, Gerritt A.; Brooks, Jr., Frederick P. (1997), "Глава 8.6, Интерфейсы устройств", Computer Architecture-Concepts and Evolution , Addison-Wesley, стр. 489–493, ISBN 0-201-10557-8См. также: Паттерсон, Дэвид А.; Хеннесси, Джон Л. (2005), «Глава 8.5. Интерфейс устройств ввода-вывода с процессором, памятью и операционной системой», Организация и проектирование компьютеров — интерфейс оборудования и программного обеспечения, третье издание , Морган Кауфманн, стр. 588–596, ISBN 1-55860-604-1
  4. ^ Govindarajalu, B. (2008). "3.15 Периферийные интерфейсы и контроллеры - OG". IBM PC и клоны: оборудование, устранение неполадок и обслуживание . Tata McGraw-Hill Publishing Co. Ltd. стр. 142–144. ISBN 9780070483118. Получено 15 июня 2018 г.
  5. ^ Буйя, Р. (2013). Освоение облачных вычислений. Tata McGraw-Hill Education. стр. 2.13. ISBN 9781259029950.
  6. ^ Poo, D.; Kiong, D.; Ashok, S. (2008). «Глава 2: Объект, Класс, Сообщение и Метод». Объектно-ориентированное программирование и Java. Springer-Verlag. С. 7–15. ISBN 9781846289637.
  7. ^ Билл Веннерс (2005-06-06). "Leading-Edge Java: Design Principles from Design Patterns: Program to an interface, not an implementation - A Conversation with Erich Gamma, Part III". artima developer . Архивировано из оригинала 2011-08-05 . Получено 2011-08-03 . Как только вы зависите только от интерфейсов, вы отсоединяетесь от реализации. Это означает, что реализация может меняться, и это здоровая зависимость. Например, для целей тестирования вы можете заменить тяжелую реализацию базы данных на более легкую фиктивную реализацию. К счастью, с сегодняшней поддержкой рефакторинга вам больше не нужно придумывать интерфейс заранее. Вы можете извлечь интерфейс из конкретного класса, как только у вас будет полное представление о проблеме. Предполагаемый интерфейс находится всего в одном рефакторинге "извлечь интерфейс". ...
  8. ^ Паттерсон, ДА; Хеннесси, ДЖЛ (7 августа 2004 г.). Организация и проектирование компьютеров: интерфейс оборудования и программного обеспечения (3-е изд.). Elsevier. стр. 656. ISBN 9780080502571.
  9. ^ "Что такое интерфейс". Учебники Java . Oracle. Архивировано из оригинала 2012-04-12 . Получено 2012-05-01 .
  10. ^ "Интерфейсы". Учебники Java . Oracle. Архивировано из оригинала 2012-05-26 . Получено 2012-05-01 .
  11. ^ "Методы улучшения производительности в сериализации". Precise Java. Архивировано из оригинала 2011-08-24 . Получено 2011-08-04 . Сначала мы поговорим об интерфейсе Serializable. Это интерфейс маркера, не имеющий никаких методов.
  12. ^ Гамма; Хелм; Джонсон; Влиссидес (1995). Шаблоны проектирования: элементы повторно используемого объектно-ориентированного программного обеспечения . Эддисон Уэсли. стр. 17–18. ISBN 9780201633610.