12. Benutzerdefinierte Datentypen L1 Aufzählungstyp

Eigenschaften und Methoden
VISUAL BASIC
12. Benutzerdefinierte Datentypen
Lerninhalte
? Aufzählungstyp (Enumerationstyp)
? Verbundtyp (Record, Struktur)
? With .. End With
Lerninhalte
Einführungsbeispiel:
In einem Programm sollen die Farben einer Ampel oder Wochentage verarbeitet werden.
Eine mögliche Deklaration:
Dim AmpelFarbe As Long 'rot=0, gelb=1, gruen=2
Dim Wochentag As Long 'Sonntag=0, Montag=1,...
.
.
.
If AmpelFarbe = 2 ... 'Welche Farbe ist das denn?
If AmpelFarbe = 5 ... 'Wert nicht definiert
? ? Ein solches Programm ist schlecht lesbar
? ? Es passieren leicht Programmierfehler
L1
Aufzählungstyp (Enumerationstyp)
Man kann für Variablen wie AmpelFarbe oder Wochentag, die einen begrenzten abzählbaren
Wertebereich haben (rot, gelb, gruen bzw. Sonntag, Montag, ...) einen eigenen Datentyp definieren,
einen sogenannten Aufzählungstyp oder Enumerationstyp.
In Visual Basic legt man einen benutzerdefinierten Datentyp in einem Modul an:
Enum TFarbe
rot
gelb
gruen
End Enum
Enum definiert einen Aufzählungs-Datentyp (Enumerationstyp).
Der selbstdefinierte Datentyp Farbe kann leicht mit einer Variablen verwechselt werden, daher kann
man vereinbaren, daß man einem Typbezeichner ein "T" voranstellt (für "Typ"), also TFarbe.
VISUAL BASIC
Eigenschaften und Methoden
Im Visual Basic-Proramm kann man diesen selbstdefinierten Datentyp benutzen wie andere
Datentypen auch, ja er taucht sogar augenblicklich in der Eingabehilfe auf:
Der Zugriff auf die Elemente des Typs erfolgt wie gewohnt:
Dim AmpelFarbe As TFarbe
.
.
AmpelFarbe = gelb
.
.
If Ampelfarbe = rot then ...
Achtung! Die Werte werden nicht in Anführungszeichen gesetzt; es handelt sich nicht um Strings!
Vielmehr werden die Werte intern als Long-Werte abgebildet.
Übung 1
Erläutere die Syntax der Deklaration eines Aufzählungstypen unter Verwendung der Visual BasicHilfe!
Syntax:
[Private] Enum Typname
Listenelement1 [= Konstante]
Listenelement2 [= Konstante]
.
.
.
End Enum
Zusammenfassung:
? ? Benutzerdefinierte Typen werden ausschließlich in Modulen deklariert
? ? Sie sind standardmäßig "Public" im Projekt; Ausnahme:
"Private"-Deklaration ? Typ ist nur innerhalb des Moduls verfügbar
? ? Dem Namen kann man zur Unterscheidung von anderen VB-Schlüsselwörtern ein "T"
voranstellen
Eigenschaften und Methoden
VISUAL BASIC
Aufgaben
1. Deklariere einen benutzerdefinierten Datentyp "TWochentag" mit den Elementen
Montag=1, Dienstag=2, ..., Sonntag=0!
Schreibe ein Programm, das dem Benutzer gestattet, einen Tag auszuwählen (Combobox),
der dann anschließend angezeigt wird.
2. Deklariere einen benutzerdefinierten Datentyp "TJahreszeit"!
Schreibe ein Programm, das dem Benutzer gestattet, eine Jahreszeit auszuwählen.
Abhängig von der gewählten Jahreszeit soll in einem Bildfeld jeweils ein passendes Bild
angezeigt werden.
3. Auf welche Werte werden die Elemente rot, gelb, gruen intern abgebildet?
Enum TFarbe
rot
gelb = 5
gruen
End Enum
4. Welche der folgenden Anweisungen ist erlaubt? (Begründung!)
a) a = rot + gelb
b) if b > gelb then b = gruen
c) Dim x As TFarbe, y As TFarbe, z As TFarbe
x = "rot"
y=4
z=6
d) rot = 3
5. Schreibe ein Programm, das einen Aufzählungstypen mit allen Ampelphasen enthält.
Diese sollen in einer verschachtelten Schleife dreimal der Reihe nach ausgegeben werden.
VISUAL BASIC
L2
Eigenschaften und Methoden
Verbunddatentyp (Record, Struktur)
(in Pascal/Delphi heißt ein Verbund Record, in C/C++ Struktur)
Manche Dinge gehören einfach zusammen:
? ? Name, Vorname, Alter, Geschlecht
? ? Zähler und Nenner
? ? Name, Vorname, Straße, Hausnummer, PLZ, Wohnort
? ? Artikelnummer, ArtikelBezeichnung, Regalnummer, Warengruppe
Dinge, die sinnvoll unter einem Oberbegriff zusammengefaßt werden können, z.B. Personendaten,
Brüche, Adressen, Artikeldaten, ... werden in Visual Basic realisiert durch den strukturierten
Datentyp Verbund.
Die Definition erfolgt wiederum in einem Visual Basic-Modul:
Type TPerson
Name as String
Vorname As String
Alter As Long
Geschlecht As TGeschlecht
End Type
Type definiert einen Verbund-Datentyp (Record, Struktur).
Wie bei Aufzählungstypen kann man auch hier dem Typbezeichner ein "T" voranstellen, also
TPerson.
Im Gegensatz zum Aufzählungstyp stellen die Typelemente keine Aufzählung dar, sondern Attribute
wie in einer Datenbank-Tabelle. Folglich hat jedes Attribut seinen eigenen Datentyp.
(Dieser kann nun auch wieder ein Aufzählungstyp oder ein weiterer Verbundtyp sein - siehe
weiterführende Beispiele)
Eigenschaften und Methoden
VISUAL BASIC
Die Deklaration im Visual Basic-Programm erfolgt wie bei den anderen Typen. Auch hier wird der
neue Typ sofort in die Hilfefunktion übernommen.
Die Variable Lehrer heißt Verbundvariable oder Strukturvariable; sie besteht aus mehreren
Elementen oder Attributen.
Die Elemente des Verbunds werden über den Punktoperator oder Qualifizierer "." angesprochen; der
Vorgang heißt dementsprechend Qualifizierung.
Auch hier steht die Online-Hilfe zur Verfügung:
Beachte:
Die Variable Lehrer repräsentiert einen Verbund mit allen seinen Komponenten, dagegen wird mit
Lehrer.Alter nur auf eine Komponente des Verbunds zugegriffen!
Die Zuweisung Nachbar = Lehrer kopiert also den gesamten Verbund Lehrer einschließlich aller
Komponenten in die Variable Nachbar (die natürlich vom gleichen (Verbund-) Typ sein muß wie
Lehrer)