Man stelle sich vor man hat eine Klasse namens „Fahrzeug“, abgeleitet von dem Interface im Artikel zuvor, und Sie möchten neue Objekt erstellen. Üblicherweise geschieht das in folgender Weise:
Dim car1 As Fahrzeug
Set car1 = New Fahrzeug
With car1
.iFahrzeug_Farbe = 255
.iFahrzeug_Geschwindigkeit = 100
.iFahrzeug_Richtung = "Gerade aus"
.iFahrzeug_Fahren
End With
Mit der Anweisung Set car1 = New Fahrzeug wird das Objekt „car1“ zwar erstellt, das Objekt ist aber komplett ‚leer‘. Erst in den nachfolgenden Zeilen wird das Objekt mit Daten belegt. D.H. zum Erstellungszeitpunkt des Objektes stehen alle Eigenschaften auf 0 bzw. auf vbNullString.
Wäre es nicht Cool wenn man, um beim obigen Beispiel zu bleiben, das Objekt so erstellen könnte:
Dim car1 As Fahrzeug
Set car1 = New Fahrzeug(255,100,"Gerade aus")
Diese Möglichkeit gibt es in VBA leider nicht, aber wir können uns behelfen mit einer sogenannten Factory.
Zuerst benötigen wir in der Klasse „Fahrzeug“ einen Ersatz für den Standard-Konstruktor. Dazu erstellen wir eine öffentliche Prozedur, welche alle beim Start benötigten Werte als Parameter verlangt. Diese Parameter-Werte werden in dieser Prozedur einfach den Privaten Variablen zugewiesen. Und so sieht diese Prozedur für obiges Beispiel aus:
Read more »
Access SQL, ActiveX Controls, Allgemein, API Calls, Bericht, Berichtdesign, Datenbankdesign, Events und Trainings, Formulardesign, Linktipps, Meinung, MS SQL Server, Software, Softwareentwurf, VBA Code, Visual Basic
|
Factory, Interface, Klassen
Dass man mit Access auch objektorientiert entwickeln kann – wenn auch nicht völlig – dürfte hinlänglich bekannt sein. Klassenmodul erstellen, Methoden und Eigenschaften in als Prozeduren und Properties definieren, alles längst bekannt. Weniger bekannt aber ist die Verwendung von Interfaces bzw. Interface-Klassen.
Man stelle sich vor, man hat eine Klasse Auto, eine Klasse Motorrad und eine Klasse Fahrrad. 3 verschiedene Klassen, und doch werden die Methoden und Eigenschaften dieser Klassen in vielen Punkten identisch sein. Die Objekte aller 3 Klassen haben sicherlich die gemeinsamen Methoden „Fahren“, „Bremsen“ und „Lenken“. Außerdem die gemeinsamen Eigenschaften „Geschwindigkeit“, „Richtung“ und „Farbe“, um ein paar Beispiele zu nennen.
Diese Zusammenhänge lassen sich durch ein Interface abbilden, und das geschieht einfacher als man denkt. Ein Interface ist zuerst einmal nichts anderes als ein Klassenmodul, das man speziell benennt. Eingebürgert hat sich, dass man vor den Interface-Namen ein „i“ setzt. Wir erstellen also ein Klassenmodul, und benennen es „iFahrzeug“. Um jetzt die Struktur für Fahrzeuge in diesem Interface abzubilden erstellen wir darin alle Properties und Prozeduren wie oben benannt, aber ohne weiteren Code. Unser Interface sieht jetzt wie folgt aus:
Option Explicit
Property Get Geschwindigkeit() As Long
End Property
Property Let Geschwindigkeit(ByVal lSpeed As Long)
End Property
Property Get Richtung() As String
End Property
Property Let Richtung(ByVal cRichtung As String)
End Property
Property Get Farbe() As Long
End Property
Property Let Farbe(ByVal lColor As Long)
End Property
Sub Fahren()
End Sub
Sub Bremsen()
End Sub
Sub Lenken()
End Sub
Read more »
Access SQL, ActiveX Controls, Allgemein, API Calls, Bericht, Berichtdesign, Datenbankdesign, Events und Trainings, Formulardesign, Linktipps, Meinung, MS SQL Server, Software, Softwareentwurf, VBA Code, Visual Basic
|
Implements, Interface, OOP