コンピュータサイエンスにおいて、不透明データ型とは、具体的なデータ構造がインターフェースで定義されていないデータ型のことである。その値は、不足している情報にアクセスできるサブルーチンを呼び出すことによってのみ操作できるため、情報の隠蔽が強制される。型の具体的な表現はユーザーから隠されており、目に見える実装は不完全である。表現が目に見えるデータ型は透明と呼ばれる。[1]不透明データ型は、抽象データ型を実装するために頻繁に使用される。
不透明データ型の典型的な例としては、オペレーティングシステムがアプリケーションソフトウェアに提供するリソースのハンドルが挙げられます。たとえば、スレッドのPOSIX標準では、スレッドやミューテックスや条件変数などの同期プリミティブを表すいくつかの不透明型に基づいてアプリケーションプログラミングインターフェイスを定義しています。[2]
不透明ポインタは不透明データ型の特殊なケースであり、レコードまたは何らかの未指定のデータ型のデータ構造へのポインタとして宣言されるデータ型です。たとえば、C プログラミング言語の仕様の一部を構成する標準ライブラリは、ファイル ストリームを表す「ポインタ」型の値を返したり受け取ったりするファイル入出力関数を提供します( C ファイル入出力を参照)。ただし、この型の具体的な実装は指定されていません。[3] FILEFILE
さまざまな言語での使用
Cなどの一部の言語では、サイズとフィールドがクライアントから隠されている不透明なレコード(構造体)の宣言が許可されています。クライアントがこのようなタイプのオブジェクトに対して実行できる唯一の操作は、そのメモリ アドレスを取得して不透明なポインターを生成することです。
インターフェイスによって提供される情報が型のサイズを決定するのに十分である場合、クライアントはその型の変数、フィールド、配列を宣言し、それらの値を割り当て、それらが等しいかどうかを比較することができます。これは通常、不透明ポインターの場合に当てはまります。
Javaなどの一部の言語では、提供される不透明型は不透明ポインターのみです。実際、Java (および他のいくつかの言語) では、レコードは常にポインターを通じて処理されます。
一部の言語では、部分的に不透明な型が許可されています。たとえば、すべてのクライアントが認識してアクセスできるいくつかのパブリックフィールドと、インターフェイスでは公開されないいくつかの隠しフィールドを持つレコードなどです。このような型は、オブジェクト指向プログラミングで基本的な役割を果たします。
インターフェースに欠けている情報は、その実装または別の「フレンド専用」インターフェースで宣言できます。この 2 番目のオプションにより、非表示の情報を 2 つ以上のモジュールで共有できます。
参照
参考文献
- ^ フリードマン、ダニエル・P. ;ワンド、ミッチェル; ヘインズ、クリストファー・T. (2001)。プログラミング言語の基礎(第2版)。MIT プレス。p. 42。ISBN 978-0-262-06217-6。
- ^ Butenhof, David R. (1997). POSIX スレッドによるプログラミング. Addison-Wesley. p. 31. ISBN 978-0-201-63392-4。
- ^ カーニハン、ブライアン W. ;リッチー、デニス M. (1988)。プログラミング言語 C (第 2 版)。プレンティス ホール。ISBN 0-13-110362-8。
