В информатике непрозрачный тип данных — это тип данных , конкретная структура данных которого не определена в интерфейсе . Это обеспечивает сокрытие информации , поскольку его значения могут быть изменены только путем вызова подпрограмм , имеющих доступ к отсутствующей информации. Конкретное представление типа скрыто от его пользователей, а видимая реализация является неполной. Тип данных, представление которого видимо, называется прозрачным . [1] Непрозрачные типы данных часто используются для реализации абстрактных типов данных .
Типичные примеры непрозрачных типов данных включают дескрипторы ресурсов , предоставляемых операционной системой прикладному программному обеспечению . Например, стандарт POSIX для потоков определяет интерфейс прикладного программирования на основе ряда непрозрачных типов, которые представляют потоки или примитивы синхронизации, такие как мьютексы или условные переменные . [2]
Непрозрачный указатель — это особый случай непрозрачного типа данных, типа данных, который объявлен указателем на запись или структуру данных некоторого неопределенного типа данных. Например, стандартная библиотека , которая является частью спецификации языка программирования C, предоставляет функции для ввода и вывода файлов , которые возвращают или принимают значения типа «указатель на », представляющие потоки файлов (см. Ввод/вывод файлов C ), но конкретная реализация типа не указана. [3]FILE
FILE
Некоторые языки, такие как C , позволяют объявлять непрозрачные записи (структуры), размер и поля которых скрыты от клиента. Единственное, что клиент может сделать с объектом такого типа, — это взять его адрес памяти , чтобы создать непрозрачный указатель .
Если информация, предоставляемая интерфейсом, достаточна для определения размера типа, то клиенты могут объявлять переменные , поля и массивы этого типа, присваивать им значения и, возможно, сравнивать их на предмет равенства. Это обычно касается непрозрачных указателей.
В некоторых языках, таких как Java , единственным видом непрозрачного типа является непрозрачный указатель. Действительно, в Java (и нескольких других языках) записи всегда обрабатываются через указатели.
Некоторые языки допускают частично непрозрачные типы, например запись, которая имеет некоторые публичные поля, известные и доступные всем клиентам, и некоторые скрытые поля, которые не показаны в интерфейсе. Такие типы играют фундаментальную роль в объектно-ориентированном программировании .
Информация, которая отсутствует в интерфейсе, может быть объявлена в его реализации или в другом интерфейсе "только для друзей". Этот второй вариант позволяет двум или более модулям совместно использовать скрытую информацию.