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

[weiter]

Das Objektsystem von OCaml

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

Objective Caml ist die erste auf ML basierende Sprache, welche objektorientiertes Programmieren erlaubt. Damit wurde diese Sprache erneut durch ein mächtiges Sytem und weiterführende Konzepte erweitert.
Auffallend dabei ist der analog zum Modulsystem gestaltete Aufbau des Objekt-Layers.
Dieser besteht auch wiederum aus drei elementaren Konstrukten: dem Klassentyp, der Klasse und dem Objekt.


[weiter]

Klassentyp
  • Signatur für Klassen
  • Deklarationen
Syntax:

# class type name =
object
declarations
end;;


[weiter]

Klasse Implementation der Deklarationen

Syntax:

# class Name =
object
implementation
end;;


[weiter]

Objekt Instanz einer Klasse

Syntax:

# let obj =
new oname;;


Dem aus dem Modulsystem bekannten Konzept der Erweiterbarkeit steht das Objektorientierte Konzept der Vererbung gegenüber.
OCaml unterstützt Mehrfachvererbung von Klassen. Dabei wird die jeweils letzte Definition einer Methode beibehalten. Die erneute Definition einer Methode in einer Unterklasse überschreibt die Definition der Oberklasse.
Im Gegensatz zu anderen Objektorientierten Sprachen (C++, Eiffel) unterscheidet OCaml zwischen Subtyphierarchie und Vererbungshierarchie, d.h. Unterklassen sind von einem anderen Typ als die jeweilige Oberklasse.
Der Mechanismus der späten Bindung "Late-Binding", also dem dynamischen Binden ergänzt den parametrischen Polymorphismus. Die Sichtbarkeit von Methoden und Typen wird durch Schnittstellendefinitionen beschränkt.
Generell ist ein Zugriff auf Methoden der Klassen von außen möglich, ein Zugriff auf Attribute hingegen nicht.
Hierfür sind unweigerlich Setter und Getter-Methoden erforderlich. Ein Zugriff auf Methoden einer jeweiligen Oberklasse ist durch das Schlüsselwort super möglich, sowie eine Selbstreferenz auf Objekte durch Vereinbarung einer Variablen, die an das Objekt gebunden wird.
Abstrakte Methoden und Klassen werden deklariert durch das einleitende Schlüsselwort virtual. Eine Abstrakte Klasse ist dabei definiert als eine Klasse, die mindestens eine abstrakte Methode beinhaltet.
Durch die Instanzierung einer Klasse eingeleitet durch das Schlüsselwort new, welches zur Erstellung eines Objektes dient, wird der Klassenrumpf im gleichen Moment vollständig ausgewertet. Das ist wohl der gravierendste Unterschied zu bekannten objektorientierten Sprachen wie beispielsweise Java.



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 ] [ OO- Modulprogrammierung am Bsp. ADT ]