Service: Visual-Basic 6.0 Tipps:

'Konstruktur'-Problem bei objektorientierter Programmierung


In den bisherigen Versionen von VB fehlen uns leider viele Merkmale, die eine 'richtige' objektorientierte Programmierung erst möglich machen. Eines davon ist sicherlich die fehlende Möglichkeit, Konstruktoren zu Klassen zu definieren.

Wenn Sie bisher nur mit VB programmiert haben, ist Ihnen diese Einschränkung vielleicht noch nie aufgefallen. Deshalb zunächst einmal: was ist ein Konstruktor? Stellen Sie sich vor, Sie definieren die Klasse CPerson. Wenn Sie nun ein Objekt dieser Klasse erzeugen, werden Sie das tun, weil Sie damit die Daten einer konkreten Person verwalten möchten. In VB werden Sie die Klasse so anlegen, dass Sie diese wie folgt verwenden können.

Dim Person As CPerson Set Person = New CPerson Person.Vorname = "Rudi" Person.Nachname = "Carell" Person.Geburtsdatum = CLng(DateValue("07.02.1862")) Debug.Print Person.Vorname & " " & _ Person.Nachname & " _ geb. am " & Format$(Person.Geburtsdatum, "Date General")

Das ist zwar ganz nett, das Problem ist nur, wenn Sie vergessen, 'Vorname', 'Nachname' und 'Geburtsdatum' mit Werten zu belegen, haben Sie zwar ein Objekt vom Typ Person, dieses Objekt repräsentiert aber gar keine Person. Wenn Sie mit objektorientierter Programmierung bisher wenig zu tun hatten, erscheint Ihnen das vielleicht nicht als ein schwerwiegendes Problem, aber bitte glauben Sie es: so etwas kann ein ziemliches Problem werden.

Was wir uns wünschen würden, wäre eine Klasse, die so angelegt ist, dass man sie wie folgt verwenden kann:

Dim Person As CPerson Set Person = New CPerson "Rudi", "Carell", CLng(DateValue("07.02.1862")) Debug.Print Person.Vorname & " " & _ Person.Nachname & " _ geb. am " & Format$(Person.Geburtsdatum, "Date General")

Das ist ein Wunschtraum, der mit VB.Net zwar in Erfüllung gegangen ist. Nur leider ist ja VB.Net eine völlig andere Programmiersprache .... Solange Sie VB 6.0 verwenden, müssen Sie sich anders helfen. Viele tun das, indem sie ihre Klassen mit einer Create- oder Konstruktor-Methode ausstatten. Die Klasse wird dann wie folgt verwendet:

Dim Person As CPerson Set Person = New CPerson Person.Create "Rudi", "Carell", CLng(DateValue("07.02.1862")) Debug.Print Person.Vorname & " " & _ Person.Nachname & " _ geb. am " & Format$(Person.Geburtsdatum, "Date General")

Das hilft aber nur bedingt weiter, denn wenn vergessen wird, die Create-Methode auszuführen, sind wir genau so angeschmiert wie vorher. Die Sicherheit kann aber durch die interne Implementierung der Klasse erhöht werden. Sehen Sie sich die Implementierung an:

Option Explicit Private sVorname As String Private sNachname As String Private iGeburtsdatum As Long Private fCreateDone As Boolean Public Sub Create(sVornameA As String, sNachnameA As String, iGeburtsdatumA As Long) sVorname = sVornameA sNachname = sNachnameA iGeburtsdatum = iGeburtsdatumA fCreateDone = True End Sub Public Property Get Vorname() As String Debug.Assert fCreateDone Vorname = sVorname End Property Public Property Get Nachname() As String Debug.Assert fCreateDone Nachname = sNachname End Property Public Property Get Geburtsdatum() As Long Debug.Assert fCreateDone Geburtsdatum = iGeburtsdatum End Property

Was ist damit gewonnen? Achten Sie bitte auf die Variable 'fCreateDone' in der Beispiel-Implementierung. Nur wenn die Create-Methode ausgeführt wurde und damit alle erforderlichen Daten gesetzt sind, wird die Variable auf 'True' gesetzt. In den Property-Prozeduren wird der Status der Variablen mit dem 'Debug.Assert'-Aufruf geprüft. Auf diese Weise ist mit einiger Sicherheit gewährleistet, dass Sie die Klasse nicht verwenden, ohne sie vorher wie gewünscht zu initialisieren. Nähere Information zu der Verwendung von 'Debug.Assert' finden Sie im Abschnitt Assertionen verwenden.

Seitenanfang

Kontaktaufnahme- und Terminvereinbarung:

Bei Fragen und für Terminvereinbarungen erreichen Sie uns unter:

0 63 49 99 07 38

0 151 51 95 34 00

Oder nutzen Sie das Kontaktformular




Ihr Ansprechpartner:


Hier sollte das Fahnungsfoto zu sehen sein.

Ralf Kunsmann

Spezialist für VBA-Programmierung
(alle Office-Anwendungen)
Entwickler der
VBA-Extension-Tools