JoeCaml OCaml Konzepte: Weiterführende Konzepte - Das Modulsystem von OCaml

[weiter]

Das Modulsystem von OCaml

Konzept
  • Kapselung von Informationen und Operationen
  • Information Hiding
  • Wiederverwendbarkeit
Komponenten

OCaml stellt ein mächtiges System zur Strukturierung und einfachen Wiederverwendbarkeit von Programcode zur Verfügung.
Dieses System besteht aus den drei Komponenten Signatur, als Konzept der Bereitstellung von aussagekräftigen Schnittstellen, Strukturen zur Kapselung von einzelnen, elementaren Programmteilen, und Funktoren, welche Module auf andere Module abbilden und das Konzept der Parametrisierung auf Programmteile ausweitet.

Man erkennt hierbei gewisse Ähnlichkeiten bzw. Gemeinsamkeiten zu objektorientierten Designkonzepten, die OCaml ebenfals dem Nutzer bereitstellt.


[weiter]

Signatur Deklaration von Typen und Funktionen

Syntax:

# module type SigName =
sig
signature
end;;


[weiter]

Struktur Implementation der Deklarationen

Syntax:

# module Name =
struct
implementation
end;;


[weiter]

Funktor
  • Funktion auf Modulen
  • parametrisierte Struktur
Syntax:

# module FName (ArgName : ArgSig) =
struct
implementation
end;;


Module sind das grundlegende Strukturierungsmittel für größere Programme und beschreiben seperat kompilierbare Einheiten.
Standard ML war die erste Sprache, für die ein theoretisch fundiertes, parametrisches Modulsystem entworfen wurde.
Die Zuordnung einer Signatur zu einer Struktur beschränkt den Zugriff von außen auf die deklarierten Typen und Methoden (Sichtbarkeit). Eine Modulsignatur fungiert somit als Schnittstelle für Module und kann als Interface für solche betrachtet werden.
Module können geschachtelt werden und Module können in andere Module eingebunden werden (Erweiterbarkeit).
Es besteht dabei zum einen die Möglichkeit den Namensbereich einer Schnittstelle bzw. eines Moduls zu öffnen (eingeleitet durch das Schlüsselwort open), zum anderen kann der Inhalt einer anderen Schnittstelle bzw. eines Moduls inkludiert werden (eingeleitet durch das Schlüsselwort include).
Die grundlegende Idee, Module mit Hilfe von abhängigen Typen (dependent types) zu typisieren spiegelt sich im Konzept eines Funktors wieder, der Module auf Module abbildet. Die Anwendung eines Funktors ist generativ, was bedeutet, dass seine Anwendung jeweils neue Typen erzeugt.



Hinweis:

"#" kennzeichnet Eingaben im OCaml Interpreter,
"val" bzw "- :" das Ergebnis der Auswertung und automatischen Typanalyse inkl. der vom System inferierten Typen.



[ Seminar "Programmierkonzepte und Programmiersprachen" ] [ Gliederung ] [ Weiterführende Konzepte ] [ Das Objektsystem von OCaml ]