Verbunde = Records


Mittels Reihungen kann man nur Datenelemente gleichen Typs zusammenfassen; will man Komponenten unterschiedlicher  Typen zu einem Verbund kombinieren, den man als Ganzes verwalten will, so bietet sich ein Verbundtyp an:
TYPE <T> = RECORD <Felder> END
Jedes der <Felder> hat die Gestalt
<Feldname> : <Feldtyp> ;
sieht also wie eine Variablenvereinbarung aus; dabei ist <Feldname> ein Bezeichner,  über den auf die Komponente des Verbundes zugegriffen werden kann, und <Feldtyp> der Typ der Komponente.

Auf die Komponenten wird durch Selektion zugegriffen: Ist <V> eine Variablenbenennung  vom Verbundtyp <T>, so benennt <V>.<N>, wenn der Selektor <N> der <Feldname> einer der Komponenten ist, eine Variable  vom zugehörigen <Feldtyp>.

Das mengentheoretische Analog dazu ist das kartesische Produkt der Feldtypen, also eine Menge von Tupeln,  und die Feldnamen vertreten die Projektionsfunktionen  auf die einzelnen Komponenten der Tupel (die merkwürdigerweise in der Mathematik keine Standard-Bezeichnung haben).

Der Gültigkeitsbereich des Feldnamens <N> in einer Selektion der Gestalt <V>.<N> ist die Selektion selbst. Der Gültigkeitsbereich kann erweitert werden durch eine WITH-Anweisung: ist <V> eine Benennung einer Verbundvariablen, so ist innerhalb  der Anweisung

WITH <V> DO ... END
der Feldname <N> mit gleicher Bedeutung wie eine Variablenbenennung  für die Komponente <V>.<N> verwendbar, und er kann auch äußere Deklarationen eines gleichnamigen Bezeichners <N> verdecken.

Leider bieten die meisten Programmiersprachen für explizite Verbundkonstanten keine bequeme Notation an; statt eines konstanten Verbundes muß man dann eine Verbundvariable verwenden, deren Komponenten man einzeln vorbesetzt.

Beispiele:

	TYPE Datum = RECORD
	                   Tag: 1 .. 31;
	                 Monat: 1 .. 12;
	                  Jahr: INTEGER;
	             END;

	TYPE Person = RECORD
	                  Name: Namenstyp;
	               geboren: datum;
	              END;

	VAR Person1: Person;

	Person1.Name := "Peter Ustinov";

	WITH Person1.geboren DO
	  Tag := 16; Monat := 4; Jahr := 1921;
	END;
	

zurück | Inhalt | Index | vor | Vorlesung

Klaus Lagally, 22. Februar 2000, 19:36