Непрозрачный тип данных
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
В информатике непрозрачный тип данных — это тип данных , конкретная структура данных которого не определена в интерфейсе . Это приводит к сокрытию информации , поскольку ее значениями манипулировать можно только путем вызова подпрограмм , имеющих доступ к недостающей информации. Конкретное представление типа скрыто от пользователей, а видимая реализация является неполной. Тип данных, представление которого видимо, называется прозрачным . [1] Непрозрачные типы данных часто используются для реализации абстрактных типов данных .
Типичные примеры непрозрачных типов данных включают дескрипторы ресурсов , предоставляемых операционной системой прикладному программному обеспечению . Например, стандарт POSIX для потоков определяет интерфейс прикладного программирования, основанный на ряде непрозрачных типов, которые представляют потоки или примитивы синхронизации, такие как мьютексы или переменные условия . [2]
Непрозрачный указатель — это особый случай непрозрачного типа данных, типа данных, который объявлен указателем на запись или структуру данных некоторого неопределенного типа данных. Например, стандартная библиотека , которая является частью спецификации языка программирования C, предоставляет функции для файлов ввода и вывода , которые возвращают или принимают значения типа «указатель на FILE
", которые представляют файловые потоки (см. ввод/вывод файла C ), но конкретная реализация типа FILE
не указано. [3]
Использование на разных языках
[ редактировать ]Некоторые языки, такие как C , позволяют объявлять непрозрачные записи (структуры), размер и поля которых скрыты от клиента. Единственное, что клиент может сделать с объектом такого типа, — это взять его адрес в памяти и создать непрозрачный указатель .
Если информации, предоставляемой интерфейсом, достаточно для определения размера типа, клиенты могут объявлять переменные , поля и массивы этого типа, присваивать им значения и, возможно, сравнивать их на равенство. Обычно это такдля непрозрачных указателей.
В некоторых языках, таких как Java , единственным непрозрачным типом является непрозрачный указатель. Действительно, в Java (и некоторых других языках) записи всегда обрабатываются посредством указателей.
Некоторые языки допускают частично непрозрачные типы, например запись, которая имеет некоторые общедоступные поля, известные и доступные всем клиентам, а также некоторые скрытые поля, которые не отображаются в интерфейсе. Такие типы играют фундаментальную роль в объектно-ориентированном программировании .
Информация, отсутствующая в интерфейсе, может быть объявлена в его реализации или в другом интерфейсе «только для друзей». Этот второй вариант позволяет совместно использовать скрытую информацию между двумя или более модулями.
См. также
[ редактировать ]- Абстрактный тип данных
- Черный ящик
- Прозрачные идентификаторы
- Форвардная декларация
- Скрытие информации
Ссылки
[ редактировать ]- ^ Фридман, Дэниел П .; Ванд, Митчелл ; Хейнс, Кристофер Т. (2001). Основы языков программирования (2-е изд.). МТИ Пресс. п. 42. ИСБН 978-0-262-06217-6 .
- ^ Бутенхоф, Дэвид Р. (1997). Программирование с использованием потоков POSIX . Аддисон-Уэсли. п. 31. ISBN 978-0-201-63392-4 .
- ^ Керниган, Брайан В .; Ричи, Деннис М. (1988). Язык программирования C (2-е изд.). Прентис Холл. ISBN 0-13-110362-8 .