# 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.

## 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.
Im Gegensatz dazu steht ein Datentyp, dessen Darstellung sichtbar wird. Dieser Datentyp wird wiederum als „transparent“ bezeichnet.

### Verwendung opaker Datentypen (Beispiel)
#### 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)
#### 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).