Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einleitung
2 Die Basis der Objektorientierung
3 Die Prinzipien des objektorientierten Entwurfs
4 Die Struktur objektorientierter Software
5 Vererbung und Polymorphie
6 Persistenz
7 Abläufe in einem objektorientierten System
8 Module und Architektur
9 Aspekte und Objektorientierung
10 Objektorientierung am Beispiel: Eine Web-Applikation mit PHP 5 und Ajax
A Verwendete Programmiersprachen
B Literaturverzeichnis
Stichwort

Download:
- ZIP, ca. 5,2 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Objektorientierte Programmierung von Bernhard Lahres, Gregor Rayman
Das umfassende Handbuch
Buch: Objektorientierte Programmierung

Objektorientierte Programmierung
2., aktualisierte und erweiterte Auflage, geb.
656 S., 49,90 Euro
Galileo Computing
ISBN 978-3-8362-1401-8
Pfeil A Verwendete Programmiersprachen
  Pfeil A.1 C++
  Pfeil A.2 Java
  Pfeil A.3 C#
  Pfeil A.4 JavaScript
  Pfeil A.5 CLOS
  Pfeil A.6 Python
  Pfeil A.7 Ruby


Galileo Computing - Zum Seitenanfang

A.5 CLOS  topZur vorigen Überschrift

CLOS steht für Common Lisp Object System und wird meistens als C-LOS (und nicht KLOS) ausgesprochen. CLOS ist eine objektorientierte Erweiterung zu Common Lisp, einer im Kern funktionalen Programmiersprache. Ähnlich wie C++ als Zusatz zu C entwickelt wurde, übernimmt CLOS alle Sprachkonstrukte von Common Lisp und stellt zusätzliche Möglichkeiten für objektorientierte Programmierung zur Verfügung.

In der Praxis ist die Bedeutung von CLOS eher gering, die Sprache wurde vor allem im Universitäts- und Forschungsbereich angewendet. Allerdings ist in CLOS eine Reihe von innovativen Konzepten enthalten, die in andere Sprachen eingeflossen sind. Auch die Kombination mit der dynamisch typisierten Sprache Common Lisp bietet interessante Möglichkeiten.

Ergänzt wird CLOS in vielen Implementierungen durch eine Umsetzung eines Metaobjekt-Protokolls (MOP). Dieses erlaubt Anpassungen der Sprache, um diese an unterschiedliche Anforderungen anzupassen.

Struktur von CLOS

Da CLOS auf Common Lisp basiert, ist es wie dieses dynamisch typisiert.

Operationen werden über sogenannte generische Funktionen (Generic Functions) definiert. Eine Methode implementiert eine generische Funktion für eine bestimmte Menge von Parametertypen. Methoden sind also nicht genau einer Klasse zugeordnet. Vielmehr wird beim Aufruf einer generischen Funktion anhand der Werte aller übergebenen Parameter bestimmt, welche Methode verwendet wird. Da Methoden damit nicht klassengebunden sind, ist eine Erweiterung um neue Operationen und Methoden also möglich, ohne den Source-Code von existierenden Klassen anpassen zu müssen.

Mehrfachvererbung von implementierenden Klassen ist in CLOS möglich. Dabei erben die abgeleiteten Klassen die Datenelemente der Basisklassen. Wir können allerdings nicht direkt davon sprechen, dass auch die Methoden der Basisklasse erben, da diese ja nicht einer einzigen Klasse zugeordnet werden müssen.

Syntax von CLOS

(defclass NamePart 
   (...)) 
(defclass VersionNumber  (NamePart)  
    ((parts :initform nil  
            :initarg :parts 
            :accessor parts))) 
 
(defgeneric toString (printable))   
(defgeneric compareTo (comparable)) 
 
(defmethod toString ((printable VersionNumber))  
  (let ((string ""))   
    (dolist (item (parts printable))  
      (if (equal string "") 
        (setf string (format nil "~A" item)) 
        (setf string (format nil "~A.~A" string 
                     (format nil "~A" item))))) 
    string))  
 
(defmethod compareTo ((comparable VersionNumber)) 
  ;; Hier erfolgt die Implementierung von compareTo 
) 
 
(defun ausgabe()  
  (let* ((num (make-instance 'VersionNumber  
                             :parts '(6 0 2800 1106)))) 
        (toString num))) 
 
[2]> (ausgabe) 
"6.0.2800.1106" 
[3]>
  • Wir deklarieren eine Klasse VersionNumber.
  • Sie erbt von der Klasse NamePart.
  • Jedes Exemplar dieser Klasse enthält eine Variable mit dem Namen parts. Der Datentyp ist nicht festgelegt. Die Angabe von initform legt fest, dass diese Variable standardmäßig mit dem Wert nil vorbelegt wird. Die Angabe von :initarg legt fest, dass bei der Konstruktion auch ein anderer Wert angegeben werden kann. Der Name des betreffenden Parameters ist dann :parts. Der Zugriff auf die Variable erfolgt über den sogenannten Accessor, der ebenfalls parts heißt.
  • toString und compareTo werden als Operationen (generische Funktionen) deklariert. Dadurch können Methoden zur Umsetzung der Operationen implementiert werden, deren Aufruf über den Mechanismus der Polymorphie gesteuert wird.
  • Die Methode toString implementiert die Operation toString für Exemplare der Klasse VersionNumber.
  • Über (let ((string "")) wird eine lokale Variable string deklariert und mit dem Leerstring vorbelegt. Der Sichtbarkeitsbereich ist durch die umgebenden Klammern festgelegt.
  • dolist führt eine angegebene Funktion für alle Elemente einer Liste aus. In diesem Fall erfolgt eine Ausgabe des Listenelements item für alle Elemente der Liste, die über den Accessor-Aufruf (parts printable) geliefert wird.
  • Die Methode toString liefert den Wert der lokalen Variablen string als Ergebnis zurück.
  • Über defun wird eine Funktion definiert, in diesem Fall eine einfache Funktion, die eine Versionsnummer konstruiert und ausgibt.
  • Über make-instance wird ein Exemplar von VersionNumber konstruiert, mit den Bestandteilen für eine Versionsnummer initialisiert und der Variablen num zugewiesen. Über den Zugriff mit toString wird das Exemplar dann als String formatiert und dieser String als Ergebnis der Funktion zurückgegeben.

Ressourcen

Eine freie Implementierung von Common Lisp ist das unter http://clisp.cons.org/ verfügbare CLISP. CLISP ist für eine Reihe von Plattformen, darunter auch Microsoft Windows, verfügbar.

Eine sehr gute Übersicht über Common Lisp bietet Common LISP: The Language von Guy L. Steele [Steele 1990]. Eine Online-Version ist verfügbar unter http://www.supelec.fr/docs/cltl/clm/clm.html. Eine Beschreibung von CLOS und dem Metaobjekt-Protokoll findet sich in The Art of the Metaobject Protocol von Gregor Kiczales, Jim des Rivières und Daniel Bobrow. [Kiczales 1991]



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  Zum Katalog
Zum Katalog: Objektorientierte Programmierung






Objektorientierte Programmierung
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Tipp
Zum Katalog: Coding for Fun







 Coding for Fun


 Buchempfehlungen
Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Java ist auch eine Insel






 Java ist auch
 eine Insel


Zum Katalog: Visual Basic 2008






 Visual Basic 2008


Zum Katalog: Visual C# 2008






 Visual C# 2008


Zum Katalog: C/C++






 C/C++


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


Zum Katalog: PHP 5.3 und MySQL 5.1






 PHP 5.3 und
 MySQL 5.1


Zum Katalog: Python 3






 Python 3


Zum Katalog: Besser PHP programmieren






 Besser PHP
 programmieren


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de