Opaker Datentyp

Als opaker (aus lat. opacus = schattig/dunkel) Datentyp bezeichnet man auf dem Gebiet der Informatik einen Datentyp, dessen physikalische Darstellung (Repräsentation) entweder unbekannt oder irrelevant ist. Die Datenstruktur eines opaken Datentyps ist nicht alleine auf einen Grenzbereich definiert. Die konkrete Darstellungsart bleibt für den Benutzer undurchsichtig (verborgen) und die sichtbare Umsetzung ist unvollständig.

Opake Datentypen, also undurchsichtige Datentypen, werden häufig benutzt, um abstrakte Datentypen zu implementieren.[1]

Anwendungen

Typische Beispiele für diese undurchsichtigen Datentypen sind etwa die umfassenden Ressourcen eines Betriebssystems, welche mit Hilfe von Softwareanwendungen dem Benutzer zur Verfügung gestellt werden. Dabei wird der Datentyp vor dem Anwender versteckt, da er nur für das Betriebssystem von Bedeutung ist. Es besteht ebenso die Möglichkeit, diesen Datentyp betriebssystemseitig zu ändern, ohne dass der Quellcode der Applikationsprogramme angepasst werden muss.

Es handelt sich dabei etwa um das Portable Operating System Interface (POSIX), eine Anwendungsprogrammschnittstelle, welche eine Schnittstelle zwischen Anwendungssoftware und dem Betriebssystem darstellt.

Definition in modularen Programmiersprachen

Opake Datentypen werden auch in modularen Programmiersprachen wie Modula-2, eine Fortentwicklung von Pascal, verwendet. Eine Realisierung bzw. Umsetzung erfolgt dabei mit Hilfe sogenannter Module. Alle separat vom Hauptprogramm übersetzten Teile werden in zwei Dateien aufgespalten, ein Definitionsmodul (Definition Module) sowie ein Implementationsmodul (Implementation Module).

Im Definitionsmodul werden lediglich der Typ-Name und die Schnittstelle angegeben. Die Typangabe selbst wird nicht angeführt, womit die Struktur des Datentyps verborgen bleibt. Diese muss daher im Implementationsmodul beschrieben werden. Somit handelt es sich um einen opaken (undurchsichtigen) Datentyp.[2]

Im Gegensatz dazu steht ein Datentyp, dessen Darstellung sichtbar wird. Dieser Datentyp wird wiederum als „transparent“ bezeichnet.

Verwendung opaker Datentypen (Beispiel)

var stack: TStack; // (1)
if stack.Count() > 0 then // (2)
    stack.Pop();
else
    ...
end;

Beschreibung

Bei einem opaken Datentyp ist die Strukturbeschreibung der zugehörigen opaken Datenobjekte an anderer Stelle definiert und dem Verwender des Datentyps nicht zugänglich. Er verwendet nur den Namen des opaken Datentyps TStack, um opake Datenobjekte zu deklarieren (1). Der Zugriff erfolgt nun nicht dadurch, dass man Objekte direkt verändert oder liest, indem man die Kenntnis ihrer Detailstruktur benutzt, sondern ausschließlich Zugriffsoperationen benutzt (2).

Verwendung transparenter Datentypen (Beispiel)

type TSpace = array[1..n] of TItem; // (3)
var space: TSpace; // (4)
if ... then
    space[index] := x;
else
    ...
end; // (5)

Beschreibung

Ein normaler Datentyp wird durch eine Typendeklaration eingeführt (3), die den Namen des Typs festlegt, in diesem Beispiel TSpace, und die in der anschließenden Typendefinition seine Struktur angibt, hier ein n-elementiges Feld irgendeines Datentyps. Diese Struktur wird als offengelegt betrachtet, weshalb ein normaler Datentyp auch transparenter Datentyp genannt wird. Mit Hilfe des Typbezeichners der die Strukturbeschreibung repräsentiert, kann nun in einer Datenobjektdeklaration (4) ein Datenobjekt dieses Typs deklariert werden. Da dessen Detailstruktur bekannt ist, kann bei der Manipulation dieses Datenobjekts darauf Bezug genommen werden (5).

Siehe auch

Einzelnachweise

  1. Daniel P. Friedman and Mitchell Wand: Essentials of Programming Languages. Third Edition. (PDF; 3,41 MB), 30. Oktober 2015.
  2. Jörg Puchan, Wolffried Stucky, Jürgen Frhr. Wolff von Gudenberg: Programmieren mit Modula-2. Teubner, 1994, ISBN 3-519-12934-5.

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.