FirstStep - Eine Ausbildungssprache

Inhalt

  1. Die Struktur von FirstStep
  2. Link-Definitionen
  3. Schreibweise
  4. Blöcke
  5. Definitionen
  6. Deklarationen
  7. Anweisungen
  8. Funktionen und Prozeduren
  9. Klassen
  10. Ein- und Ausgabe, Dateien und Verbindungen
  11. Syntax

    Anhang:

  1. Beispiele
  2. Module
  3. Dokumentation zu FirstStep in Word 6.0
    Dokumentation zu FirstStep in Word 7.0
    Dokumentation zu FirstStep in PostScript

zurück Index vor

9 Klassen

Klassen spezifizieren die komplexesten Objekte in FirstStep. Eine Klasse enthält Daten und Funktionen bzw. Prozeduren, die bevorzugt die jeweiligen Objekte der Klassen manipulieren.

9.1 Allgemeine Konzepte in Klassen

Klassen haben den folgenden Aufbau, wobei hier gegenüber Abschnit fünf die ;glichen Strukturen etwas genauer definiert werden:

Eine Klasse wird durch das Schlüsselwort class eingeleitet. Sie besitzt einen öffentlichen (public) Abschnitt (section) und kann zusätzlich einen privaten Abschnitt besitzen. Jeder Abschnitt enthält einen Disclose/Definitions/Deklarations-Teil sowie einen Anweisungsteil. Dem Namen im öffentlichen Abschnitt kann eine Parameterliste angefügt werden, welcher Anfangswerte bei der Instanziierung übergeben werden; die formalen Parameter sind lokale Werteparameter der Klasse. Bei der Instanziierung wird zunächst der Anweisungsteil des öffentlichen und dann des privaten Abschnitts durchlaufen. Wird Überladung verwendet, d.h. gibt es mehr als eine Instanziierungsfunktion, so kann eine weitere öffentliche Klasse mit gleichem Namen definiert werden, deren Anweisungsteil statt jenes des öffentlichen Teils ausgeführt wird; diese Instanziierungsklasse enthält allerdings keinen Disclose/Definitions/Deklarations-Teil.

Beispiel

Die Deklarationen bzw. Definitionen in einer Klasse (im öffentlichen oder privaten Abschnitt) sind innerhalb der Klasse bekannt, die privaten jedoch nicht im Anweisungsteil des öffentlichen Abschnitts.

Beispiel

Durch den disclose-Mechanismus kann eine Klasse die Namen einer Basisklasse bekannt machen bzw. zugleich eine Instanz der Basisklasse erzeugen. Ebenso können gemeinsame Basisklassen konstruiert werden. Die folgenden Beispiele zeigen dieses.

Beispiel

Vererbung von Definitionen: Einbindung der Methoden einer KlasseB in eine KlasseA

In KlasseA sind die Methoden von KlasseB bekannt, jedoch können die Objekt蜂nstanzen nicht verwendet werden, da diese nicht instanziiert sind. Es dürfen also auch keine Methoden verwendet werden, die "lokale" Variable von KlasseB verwenden.

Es werden sowohl die öffentlichen als auch die privaten Abschnitte der Basisklasse ererbt; die privaten Namen der Basisklasse sind allerdings nicht direkt referenzierbar, auch nicht in der abgeleiteten privaten Klasse.

Beispiel

Einfache Vererbung: Einbindung der Namen einer KlasseB in eine KlasseA:

In KlasseA sind die öffentlichen Namen von KlasseB bekannt und instanziiert.

Wird die Basisklasse instanziiert, so werden zunächst die Anweisungsteile der Basisklasse ausgeführt. Gibt es mehrere Basisklassen, so werden deren Anweisungsteile in der Reihenfolge ihrer Aufschreibung ausgeführt.

Beispiel

Mehrfachvererbung: Einbindung der Namen zweier Klassen in eine KlasseA:

In KlasseA sind die öffentlichen Namen von KlasseB bekannt und instanziiert.

Um mehrere gleiche Basisklassen ableiten zu können, müssen diese im Deklarationsteil instanziiert werden; ihre Anweisungsteile werden vor jenen der abgeleiteten Klasse ausgeführt.

Beispiel

Mehrfachvererbung gleicher Klassen: Zweifache Einbindung der Namen eine Klasse in eine KlasseA:

In KlasseA sind die öffentlichen Namen von KlasseB nicht bekannt, aber die Objekte zweimal instanziiert und nach Dereferenzierung zugreifbar.

Das Konzept der virtuellen Klasse wird nicht explizit unterstützt. Es muß durch entsprechende Konstruktionen nachempfunden werden:

Beispiel

Virtuelle Vererbung: Einbindung eines Objekts von KlasseA in eine KlasseB:

In KlasseA sind die öffentlichen Namen von KlasseB bekannt und instanziiert.

Eine Funktions- oder Prozedurvariable in einer Klasse kann von einer abgeleiteten Klasse verändert werden, wenn diese fest an die Basisklasse gebunden ist, d.h. diese direkt instanziiert hat und somit die Basisklasse nicht separat gelöscht werden kann. Dabei muß die neue Funktion lokal zur abgeleiteten Klasse definiert sein und darf nur die dort sichtbaren Objekte referenzieren.

Wird eine Klasseninstanz vom Typ KlasseA einer Klassenvariablen vom Typ KlasseB zugewiesen, und ist KlasseB eine Basisklasse von KlasseA, so findet eine Dereferenzierung auf die KlasseB statt. Allerdings muß diese Zuweisung eindeutig möglich sein, d.h. die KlasseB darf von KlasseA aus nur einmal sichtbar sein. Ansonsten ist eine Zuweisung nur über eine explizite Dereferenzierung auf eine Variable vom Typ KlasseB möglich.

9.2 Verwendung von Klassen

Klassen sind im einfachsten Fall Daten- und Methodenkapseln, welche zusammengehörende Begriffe zusammenfassen. Ein Zugriff auf einen Namen in einer Klasse geschieht durch die "Punktnotation", wobei keine Derefenzierung stattfindet.

Beispiel

Zugriff auf Klassennamen:

In KlasseA sind die öffentlichen Namen von KlasseB nicht bekannt, aber die Objekte zweimal instanziiert und nach Dereferenzierung zugreifbar.

Klassen sind aber nicht nur Datenspeicher und "Modelle" für abgeschlossene Systeme, sondern sie stellen zugleich auch ein erweitertes Typkonzept bereit. Das bedeutet, daß Klassen als Typen verwendet werden können, und daß die in den Klassen verwendeten Methoden als Operatoren benutzt werden können. Es sind also die folgenden Ausdrücke möglich:

Beispiel

Methoden als Operatoren:

Werden zweistellige Operatoren (hier ":=" und "+") in einer Klasse definiert, so wird der Ausdruck:

interpretiert als:

Da Überladung möglich ist, müssen die Parametertypen jeweils exakt stimmen.

Besitzen die Klassen Listen mit Formalparametern, so müssen sie bei der Instanziierung entsprechend initialisiert werden:

Beispiel

Anfangswerte für Klassen:

Besitzen die Klassen Listen mit Formalparametern, so müssen sie bei der Instanziierung entsprechend initialisiert werden:

Beispiel

Löschen von Instanzen:

Weitere Informationen zu FirstStep finden Sie in dem Buch "System, Model, Programm".

zurück Index vor