Verbunddatentypen Die bisher besprochenen Datenstrukturen Array

Werbung
Verbunddatentypen
Die bisher besprochenen Datenstrukturen Array, Liste und Baum dienen zur Verwaltung größerer
Mengen gleichartiger Daten. Nun werden wir die Speicherung von zusammengehörigen,
verschiedenartigen Daten behandeln.
Beispiel: Adressdaten einer Person bestehen aus:
 Vorname (Zeichenkette)
 Nachname (Zeichenkette)
 PLZ (Integer oder Zeichenkette)
 Ort (Zeichenkette)
 Straße (Zeichenkette)
Wenn wir also von einer Adresse sprechen, setzen wir die oben gelisteten Detaildaten voraus.
In der Programmierung haben wir bisher Variablen als Speicherstellen kennen gelernt. Der Datentyp
der Variable bestimmt die Größe des reservierten Speichers und ermöglicht den Compiler
Überprüfung und Optimierungen.
Grundlegende (elementare) Datentypen, die in vielen Programmiersprachen verfügbar sind, lauten:
 Zeichen (Character, Char)
 Zeichenketten (String)
 Ganzzahl (Byte, Integer, Long)
 Fließkommazahl (Float, Double)
 Wahrheitswerte (Boolean)
 Datum und Zeit
Ziel ist es nun, Variablen zu verwenden, die (wie im Adressbeispiel) mehrere zusammengehörige
Werte speichern. Grundlage dafür ist die Definition neuer Datentypen, die mehrere Speicherstellen
umfassen.
Dies erfolgt durch die Benennung der Speicherstellen und der Vereinbarung des Datentyps. Ein
derart definierter Datentyp wird dann als Verbunddatentyp bezeichnet. Dieser kann dann bei der
Deklaration einer Variablen (Verbundvariable) wie gewohnt verwendet werden.
In Java gibt es keine eigenständigen Verbunddatentypen, stattdessen werden Klassen verwendet,
welche neben Daten auch Methoden beinhalten können. In C werden diese als Structures bezeichnet
(in Pascal als Record).
Beispiel: Definition des Verbunddatentyps adresse
Name des Verbunddatentyps
Java
C / C++
class Adresse {
String vorname;
String nachname;
int plz;
String ort;
String strasse;
}
struct adresse {
string vorname;
string nachname;
int plz;
string ort;
string strasse;
};
Speicherstelle vom Typ string mit
Bezeichner strasse
Beispiel: Deklaration einer Variablen vom Typ adresse
Java
C / C++
Adresse name;
adresse name;
name= new Adresse();
Der Speicher wird erst beim Erstellen des
Objektes (new) reserviert. Die Variable
enthält nur einen Verweis auf den
Speicherbereich.
name
Bei der Deklaration wird automatisch der
Speicher für den gesamten Verbunddatentyp
reserviert.
reserviert Speicher für
alle Speicherstellen
Der „Wert“ einer Verbundvariable setzt sich aus den Werten zusammen, die den einzelnen
Speicherstellen zugewiesen werden ist. Um einen einzelnen Wert abzufragen, bzw. zu setzen ist der
Name der Verbundvariable und der Bezeichner der Speicherstelle anzugeben.
Beispiel: Setzen Sie den Vornamen und den Ort für die Variable „name“!
neuner.plz = 6460;
Die Verbunddatentypen können wie elementare Datentypen auch in:
 Deklaration von Arrays

Definition neuer Verbunddatentypen
verwendet werden.
Beispiel: Array mit 5 Adressen in Java
Adresse[] kartei = new Adresse[5];
// Erzeugen des kartei-Arrays
kartei[2] = new Adresse();
// Erzeugen einer Adresse im kartei-Array
Damit kann der Vorname der dritten Adresse in kartei ausgegeben werden durch:
System.out.println(kartei[2].vorname);
Variante:
dritte Adresse
Adresse a;
a = kartei[2];
System.out.println(a.vorname);
davon der
Vorname
Beispiel: Verbunddatentyp „Schueler“, der den Verbunddatentyp „Adresse“ verwendet.
Java
C / C++
class Schueler {
Adresse person;
String klasse;
}
struct schueler {
adresse person;
string klasse;
};
Der Speicher wird hier erst wieder beim
Erstellen des Objektes (new) reserviert. Die
Variable enthält nur einen Verweis auf den
Speicherbereich. Dasselbe gilt für die
Variable person.
Bei der Deklaration wird automatisch der
Speicher für den gesamten Verbunddatentyp
reserviert.
Schueler name = new Schueler();
name.klasse = „Klasse“;
schueler name;
name.klasse = „Klasse“;
name.person = new Adresse();
name.person.vorname = „Name“;
name.person.vorname = „Name“;
Übungen
1. Erstellen Sie einen Verbunddatentyp (Klasse) „Koordinate“ mit X- und Y-Integer-Werten.
 Implementieren Sie einen Kontruktor Koordinate(int x, int y), eine toString()- und
jeweils Getter- und Setter-Methoden.
2. Erstellen Sie einen Verbunddatentyp (Klasse) „Rechteck“ mit zwei Koordinaten (linksOben,
rechtsUnten) und einem String farbe.
 Implementieren Sie einen Konstruktor Rechteck(Koordinate linksOben, Koordinate
rechtUnten), eine String toString()- und eine verschiebeX(int x, int y)-Methode
welche das Rechteck um x/y verschiebt.
3. Erstellen und befüllen Sie ein Array mit drei Rechtecken.
Herunterladen