CLOS (common LISP object system)

Das Common LISP Object System (CLOS) ist eine Erweiterung von Common Lisp, welches auf einer der ältesten Programmiersprachen - Lisp - basiert. Mit CLOS ist die Umsetzung objektorientierter Konzepte zusammen mit den funktionalen Eigenschaften von Lisp möglich.

Durch die Verbindung mit den funktionalen Eigenschaften von Lisp ist CLOS - und andere Sprachen dieser Art - gut für die Verarbeitung von Strukturmustern geeignet, wie sie auch in Anwendungen der Künstlichen Intelligenz (KI) genutzt werden. Damit werden auch die objektorientierten Konzepte mit den Vorteilen von Lisp ( Daten sind Anweisungen, d.h. Möglichkeit zur Selbstmodifizierung von Programmen) verbunden.

CLOS als Erweiterungen von Lisp

CLOS ist genau genommen eine Erweiterung zweier objektorientierter Erweiterungen von Lisp: New Flovors von Symbolics und Common Loops von Xerox. Die Erweiterungen zu Lisp umfassen neben dem Flavor-System (die Einbettung von Klassendefinitionen usw.) die Mehrfachvererbung, deklarative Methodenkombination, ein Meta-Objekt Protokoll und Generizität bei Methoden.

Es gibt keinen statischen Typtest, aber es gibt ein Typsystem und Typprädikate. Jede Klasse in CLOS definiert einen Common Lisp-Typen. Jeder Wert ist Element mindestens einer CLOS-Klasse, die zur Laufzeit ermittelt werden kann. Einige Mechanismen der statischen Typisierung können damit durch den Programmier nachgebildet werden.

Attribute ( Slots) besitzen Slot-Optionen für die unterschiedliche Verarbeitungsregeln gelten. Die Vererbung von Methoden hängt von ihrer Rolle ab. Von den :primary-Methoden wird genau eine, die spezifischste ererbt. Weitere Methoden können in bestimmten Rollen damit verbunden werden (:before-, :after- und :around-Methoden in einer Kombination). Merkmale von Basisklassen werden alle geerbt, aber im Fall von Namenskonflikten nicht gleichberechtigt. Methoden werden in depth-first Reihenfolge der Basisklassenvereinbarung entsprechend der class-precedence-list ererbt. Der Wertebereich von gleich-benannten Attributen ist der spezialisierteste gemein-same Obertyp der ererbten Attribute.

Die generischen Funktionen von CLOS

Als Besonderheit gibt es generische Funktionen. Die Auswahl der Implementierung einer solchen Funktion hängt von den Typen aller Argumente ab (nicht nur des Empfänger-Arguments). Methoden können daher nicht mehr einzelnen Klassen zugeordnet werden.

Der Designmechanismus der abstrakten Klasse ist nicht möglich. Jede Klasse ist instanziierbar. Als Programmierkonvention gibt es allerdings die Verwendung von sogenannten " mixins" zum Zweck der einheitlichen Protokoll-Vereinbarung. Es gibt jedoch keine generischen Klassen. Es werden Metaklassen und Klassenobjekte unterstützt. Es gibt ein ausgefeiltes Meta-Objekt Protokoll, über das die Semantik von CLOS operational beschrieben ist. Es steht dem Programmierer zur Verfügung, um Klassen mit anderem Verhalten zu definieren (z.B. Bearbeitung von Nachrichten, Konstruktion von Instanzen etc.).

CLOS stellt Sprachkonzepte zur Verfügung, die den Zugriff auf Attribute einschränken. Allerdings gibt es Möglichkeiten, diese Mechanismen zu übergehen. Ein Modulkonzept wird durch sogenannte " Packages" realisiert.

CLOS wurde von der ANSI als Teil von Common Lisp standardisiert.

Informationen zum Artikel
Deutsch:
Englisch: common LISP object system - CLOS
Veröffentlicht: 04.11.2013
Wörter: 440
Tags: Sonstige Progr.
Links: Abstrakte Klasse, ANSI (American national standards institute), Anweisung, Attribut, Daten