next up previous contents index
Weiter: 2.2.3 Aggregate Hinauf: 2.2 Zusammengesetzte Typen Zurück: 2.2.1 Felder

2.2.2 Records

 

Gewöhnliche Records in Ada sind sehr ähnlich denen in Pascal oder Modula-2. Als Beispiel seien die folgenden Typen angegeben:

 

type Datum is
record
Tag: integer range 1 .. 31;
Monat: Monatsname;
Jahr: integer range 0 .. 4000;
end record;

type komplex is
record
re: real;
im: real;
end record;

Beispiele für Record-Variablen sind:

Geburtstag: Datum;
a,b,c: komplex;

Ada bietet zusätzlich die Möglichkeit, Records mittels sogenannter Diskriminanten  zu ,,parametrieren``. Ein wesentlicher Unterschied besteht in diesem Fall zu Pascal und Modula-2; in Ada ist nämlich die Diskriminante immer Teil des Records, in Pascal und Modula-2 muß das nicht so sein. Ein Beispiel ist:

type Quadrat(Seite: integer) is
record
Mat: Matrix(1..Seite, 1..Seite);
end record;

Man kann auch Anfangswerte für Diskriminanten definieren:

type Rechteck(Laenge: integer := 10; Breite: integer := 5) is
record
Mat: Matrix(1..Laenge, 1..Breite);
end record;

Interessant wird es, wenn man Variablen solchen Typs anlegt. So ist etwa

Q1: Quadrat;

nicht erlaubt, da die Seitenlänge nicht bekannt ist. Hingegen sind

Q2: Quadrat(5);
R1: Rechteck(11,2);
R2: Rechteck;

erlaubt. Dabei sind Q2 und R1 constrained, während R2 zwar eine Laenge von 10 und eine Breite von 5 hat, aber trotzdem unconstrained ist, d.h., man kann später Laenge und Breite von R2 verändern! Dabei ist aber gefordert, daß immer der gesamte Record einen neuen Wert erhält. Wie man das konkret bewerkstelligt, werden wir in Kapitel 2.2.3 kennenlernen.

You behandle me as the last dreck:
as hampel-man of society,
as political hans-wurst,
as complet idiot,
as religious mama-kindl and
as social soup-kasper! Always the Black
are the beshittened! And the gelackmeiered!


aus Armin Eichholz, 
,,Black and White - Nach moderner Negerlyrik``.

Diskriminierte Records,   das sind Records, die abhängig von einer Diskriminante  unterschiedliche Komponenten aufweisen, werden von Ada auch unterstützt, z.B.:

type Wochentag(T: Tag) is
record
Aufstehen: Uhrzeit;
case T is
when Samstag Sonntag =>
Freizeit: integer range 0 .. 24;
when others =>
Arbeit: integer range 8 .. 17;
end case;
end record;

Das in obigem Beispiel angeführte others darf nur als letzte Alternative in der umschließenden Case-Anweisung verwendet werden. Das |-Zeichen dient zur Aufzählung mehrerer Werte, die in einer Alternative behandelt werden sollen.

Der Zugriff auf einzelne Record-Komponenten erfolgt in Ada durch einen sogenannten Punkt-Operator, z.B.:

Geburtstag.Jahr
a.re



next up previous contents index
Weiter: 2.2.3 Aggregate Hinauf: 2.2 Zusammengesetzte Typen Zurück: 2.2.1 Felder

Johann Blieberger
Wed Feb 11 09:58:52 MET 1998