Слой абстракции
В вычислениях уровень абстракции или уровень абстракции — это способ скрыть рабочие детали подсистемы. Примеры моделей программного обеспечения, использующих уровни абстракции, включают модель OSI для сетевых протоколов , OpenGL и другие графические библиотеки , которые позволяют разделить задачи для облегчения взаимодействия и независимости платформы .
В информатике уровень абстракции — это обобщение концептуальной модели или алгоритма без какой-либо конкретной реализации. Эти обобщения возникают из широких сходств, которые лучше всего инкапсулируются моделями, выражающими сходства, присутствующие в различных конкретных реализациях. Упрощение, обеспечиваемое хорошим уровнем абстракции, позволяет легко использовать повторно, выделяя полезную концепцию или шаблон проектирования , чтобы можно было быстро распознать ситуации, в которых ее можно точно применить. Простое объединение элементов более низкого уровня в конструкцию не считается уровнем абстракции, если только оно не защищает пользователей от лежащей в его основе сложности. [1]
Слой считается находящимся поверх другого, если он от него зависит . Каждый уровень может существовать без слоев выше него и требует, чтобы уровни ниже него функционировали. Часто уровни абстракции можно объединить в иерархию уровней абстракции. Модель OSI состоит из семи уровней абстракции. Каждый уровень модели инкапсулирует и удовлетворяет различные потребности цифровых коммуникаций, тем самым снижая сложность соответствующих инженерных решений.
Знаменитый афоризм гласит Дэвида Уиллера : «Все проблемы в информатике можно решить, используя другой уровень косвенности ». [2] Это часто намеренно неверно цитируют, заменяя «косвенность» «абстракцией». [ нужна ссылка ] Его также иногда ошибочно приписывают Батлеру Лэмпсону . Следствием этого, по мнению Кевлина Хенни , является следующее: «...за исключением проблемы слишком большого количества слоев косвенности». [3]
Архитектура компьютера [ править ]
В компьютерной архитектуре компьютерная система обычно представляется состоящей из нескольких уровней абстракции, таких как:
Программируемую логику часто считают частью аппаратного обеспечения, тогда как логические определения также иногда рассматриваются как часть программного обеспечения или встроенного ПО устройства. Прошивка может включать только низкоуровневое программное обеспечение, но также может включать все программное обеспечение, включая операционную систему и приложения. Уровни программного обеспечения можно далее разделить на уровни абстракции оборудования, драйверы физических и логических устройств, репозитории, такие как файловые системы, ядра операционной системы, промежуточное программное обеспечение, приложения и другие. Также можно провести различие между языками программирования низкого уровня, такими как VHDL , машинный язык , язык ассемблера, и компилируемым языком , интерпретатором и языком сценариев . [4]
Ввод и вывод [ править ]
В операционной системе Unix большинство типов операций ввода и вывода считаются потоками байтов, считываемых с устройства или записываемых на устройство. Эта модель потока байтов используется для файлового ввода-вывода, сокетного ввода-вывода и терминального ввода-вывода, чтобы обеспечить независимость устройства. Чтобы читать и писать на устройстве на уровне приложения, программа вызывает функцию, открывающую устройство, которое может быть реальным устройством, например терминалом, или виртуальным устройством, например сетевым портом или файлом в файловой системе. . Физические характеристики устройства определяются операционной системой, которая, в свою очередь, представляет собой абстрактный интерфейс, позволяющий программисту читать и записывать байты с/на устройство. Затем операционная система выполняет фактическое преобразование, необходимое для чтения и записи потока байтов на устройство.
Графика [ править ]
Большинство графических библиотек, таких как OpenGL, предоставляют в качестве интерфейса абстрактную модель графического устройства. Библиотека отвечает за преобразование команд, предоставляемых программистом, в конкретные команды устройства, необходимые для рисования графических элементов и объектов. Конкретные команды устройства для плоттера отличаются от команд устройства для ЭЛТ- монитора , но графическая библиотека скрывает реализацию и детали, зависящие от устройства, предоставляя абстрактный интерфейс, который предоставляет набор примитивов , которые обычно полезны для рисования графических объектов.
См. также [ править ]
- Интерфейс прикладного программирования (API)
- Бинарный интерфейс приложения (ABI)
- Компилятор , инструмент для абстракции между исходным кодом и машинным кодом.
- Аппаратная абстракция
- Скрытие информации
- Слой (объектно-ориентированный дизайн)
- Нарушение пространства имен
- Защитное кольцо
- Операционная система , уровень абстракции между программой и компьютерным оборудованием.
- Программная инженерия
Ссылки [ править ]
- ^ Хохпе, Грегор (9 марта 2012 г.). Шаблоны корпоративной интеграции: проектирование, создание и развертывание решений для обмена сообщениями (серия Addison-Wesley Signature (Fowler)) . Аддисон-Уэсли Профессионал. ISBN 978-0321200686 .
- ^ Спинеллис, Диомидис (2007). «Глава 17. Еще один уровень косвенности» . Красивый код: ведущие программисты объясняют, как они думают . Севастополь, Калифорния: О'Рейли и партнеры. стр. 279–291. Архивировано из оригинала 6 марта 2024 года.
- ^ Хенни, Кевлин [@kevlinhenney] (3 сентября 2012 г.). «@drunkcod Да, это мой вывод :^)» ( твит ). Архивировано из оригинала 29 марта 2022 г. — через Twitter .
- ^ Таненбаум, Эндрю С. (1979). Структурированная компьютерная организация . Энглвуд Клиффс, Нью-Джерси : Прентис-Холл. ISBN 0-13-148521-0 .