Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

14.7.1 Werkzeug für Performance-Tests selbst gebaut

15 Objektorientierte Programmierung

Wenn Sie im Internet nach Informationen über den Einsatz objektorientierter Programmierung in Zusammenhang mit Microsoft Access suchen, müssen Sie eine Menge Geduld mitbringen. Das macht sich erst recht bemerkbar, wenn Sie erstmal diejenigen Seiten oder Newsgroup-Beiträge herausfiltern müssen, in denen Entwickler über die Vor- und Nachteile der objektorientierten Entwicklung unter Access beziehungsweise VB/VBA diskutieren oder beleuchten, ob sich VB/VBA überhaupt »objektorientiert« nennen darf.

Warum geht dieses Buch also so ausführlich auf objektorientierte Techniken ein, wenn dieses Thema selbst in Entwicklerkreisen anscheinend umstritten ist und sich nur wenige Entwickler diesem Thema widmen? Die Antwort ist einfach:

Erstens arbeiten Sie, wenn Sie mit VBA entwickeln, ohnehin schon mehr oder weniger bewusst mit Objekten. Beispiele dafür sind Formulare, Berichte, Steuerelemente, Recordsets oder andere Anwendungen wie Word oder Excel. Dabei greifen Sie beim Programmieren wie selbstverständlich auf die per IntelliSense komfortabel einsetzbaren Methoden und Eigenschaften der Objekte zu. Den Umgang mit Objekten sind Sie also gewohnt - warum sollten Sie nicht von benutzerdefinierten Klassen profitieren?

Und zweitens werden Sie, selbst wenn Sie nur kleine Häppchen Objektorientierung in Form des einen oder anderen Klassenmoduls zum Kapseln einer bestimmten Funktionalität in Ihre Anwendungen einbauen, davon profitieren und möglicherweise schnell mehr davon verwenden wollen.

Beispiel für den Einsatz einer benutzerdefinierten Klasse

Ein gutes Beispiel ist die Klasse CTimer, die zusammen mit einem weiteren Modul Funktionen bereitstellt, um einen oder mehrere Timer zu betreiben. Die Aufgabe eines Timers ist dabei, in zuvor festgelegten Intervallen oder zu festgelegten Zeitpunkten Ereignisse auszulösen und damit dafür vorgesehene Routinen zu starten. Damit lässt sich etwa die Anzeige von Daten in einem Formular in festen Intervallen aktualisieren oder das Blinken von Steuerelementen steuern (nur ein Scherz!).

Das Wichtige hierbei ist, dass Sie, wenn Sie auf herkömmlichem Wege einen Timer einsetzen wollten, dazu ein Formular und dessen Ereigniseigenschaft Bei Zeitgeber dazu missbrauchen würden - und das selbst dann, wenn der Zweck des Zeitgebers gar nichts mit dem Formular selbst zu tun hat. Außerdem können Sie mit einem Formular nur ein einziges Intervall definieren, und wenn man mal mehrere braucht ...

Also programmiert man sich vielleicht selbst eine passende rudimentäre Funktionalität (es soll ja schnell gehen), die möglicherweise die Intervalle fest im Code verdrahtet. Dabei kann man einen solchen Zeitgeber immer wieder brauchen, warum also nichts Wiederverwendbares schaffen? Etwas, das noch dazu einfach zu handhaben ist? Ohne, dass man sich erst die Namen der Funktionsaufrufe heraussuchen muss? Werfen Sie also einen Blick auf die fertige Klasse CTimer. Welche Vorteile bietet diese und wie arbeitet man überhaupt damit? Um diese Klasse einzusetzen, müssen Sie einfach nur das Klassenmodul CTimer und das dazugehörende Standardmodul mdlTimer in die Zieldatenbank kopieren. Wenn Sie es dann in einem Formularmodul oder einem weiteren Klassenmodul mit dem Schlüsselwort WithEvents (dazu später mehr) deklarieren, können Sie für diese Klasse nicht nur Eigenschaften festlegen, sondern auch noch auf Ereignisse reagieren - was ja bei einem Timer ganz sinnvoll ist:

Dim WithEvents objTimer1 As CTimer

Nehmen wir an, Sie möchten ein Steuerelement eines Formulars alle paar Sekunden aktualisieren - etwa, um darin die Uhrzeit anzuzeigen - und dafür nicht die eingebaute Eigenschaft Bei Zeitgeber verwenden (weil Sie diesen möglicherweise für einen anderen Zweck benötigen). In dem Fall gehen Sie folgendermaßen vor: Fügen Sie einem neuen Formular ein Bezeichnungsfeld namens lblUhrzeit hinzu und speichern Sie das Formular unter dem Namen frmUhrzeit. Legen Sie für die Ereigniseigenschaft Beim Laden des Formulars die folgende Routine an:

Private Sub Form_Load()
    Me!lblUhrzeit.Caption = Time
    Set objTimer1 = New CTimer
    With objTimer1
        .TimerID = 1
        .Interval = 1000
        .Repeated = True
    End With
End Sub

Listing 15.1: Instanzieren und einstellen der Timer-Klasse

Beachten Sie, dass Sie die Eigenschaften von objTimer1 mit IntelliSense-Unterstützung eingeben können. TimerID ist die Nummer des Timers (falls Sie mal mehrere benötigen, verwenden Sie etwa eine fortlaufende Nummerierung), Intervall gibt die Zeit bis zum nächsten Auslösen in Millisekunden an, und Repeated legt fest, ob ein Ereignis wiederholt ausgelöst werden soll. Damit der Timer beim Schließen des Formulars seinen Dienst beendet, legen Sie auch eine Prozedur an, die das Formular beim Entladen aufruft:

Private Sub Form_Unload(Cancel As Integer)
    Set objTimer1 = Nothing
End Sub

Listing 15.2: Freigeben der Objektvariablen

Und jetzt kommt der Clou: Irgendwie müssen Sie ja noch festlegen, was eigentlich in Intervallen von x Millisekunden passieren soll. Dazu bietet das Objekt ein Ereignis an, für das Sie eine Ereignisprozedur anlegen können! Wählen Sie einfach aus dem rechten Kombinationsfeld im oberen Teil des Codefensters den Eintrag objTimer1 aus und Access legt automatisch den Rumpf der Prozedur objTimer_Plop an. Hier müssen Sie nur noch eintragen, dass Access dem vorhin erstellten Bezeichnungsfeld als Beschriftung die aktuelle Uhrzeit zuweist:

Private Sub objTimer_Plop(dtDateTime As Date, ATag As Variant)
    Me!lblUhrzeit.Caption = Time
End Sub

Listing 15.3: Ereignis zur richtigen Zeit

Vorteile von Klassen

Dieses Beispiel zeigt bereits einige Vorteile der Verwendung von Klassen:

  • Komplizierte Funktionen lassen sich hinter einfachen Methodenaufrufen verstecken.
  • Getestete und funktionstüchtige Klassen lassen sich beliebig wieder verwenden.
  • Parameter müssen nicht mehr mit dem Funktionsaufruf übergeben werden, sondern können übersichtlich als Eigenschaften des Objekts festgelegt werden.
  • Objekte bieten eine komfortable Programmierschnittstelle: IntelliSense verrät Ihnen genau, welche Eigenschaften und Methoden die Instanz eines Klassenmoduls bereitstellt. Dadurch sind Objekte quasi selbst dokumentierend und erlauben einen einfachen Zugriff.
  • Klassen können Ereignisse bereitstellen, die durch beliebige Vorgänge ausgelöst werden.
  • Darüber hinaus gibt es noch einige weitere Vorteile:

  • Zusammenhängende Daten, die sonst als Variablen mehr oder weniger öffentlich irgendwo im Quellcode zu finden sind, lassen sich als Eigenschaften eines Klassenmoduls zusammenfassen.
  • Methoden, die sich genau auf diese zu einem Klassenmodul zusammengefassten Daten beziehen, lassen sich nur in diesem Zusammenhang aufrufen.
  • Die in einem Klassenmodul zusammengefassten Eigenschaften und Methoden können Objekte aus der Realität abbilden.
  • Änderungen an einem Klassenmodul, das möglicherweise an vielen Stellen instanziert wird, müssen nur an einer Stelle durchgeführt werden.
  • Sie können gleichzeitig mit mehreren Instanzen eines Klassenmoduls arbeiten.
  • Mit Objekten lassen sich mehrschichtige Anwendungen realisieren.
  • Objekte können den Datenzugriff kapseln. Damit können Sie etwa Anwendungen erstellen, ohne sich auf eine bestimmte Datenquelle wie Tabellen einer Datenbank, Daten im XML-Format oder eine einfache Textdatei festzulegen.
  • In den folgenden Abschnitten erfahren Sie, wie Sie eigene Klassen erstellen und diese einsetzen. Das anschließende Kapitel greift diese Kenntnisse auf und vermittelt Ihnen die Grundlagen für den professionellen Einsatz von Objekten in Access.

    Nächster Abschnitt:

    15.1 Abstrakte Datentypen, Klassen und Objekte

    Abschnitte dieses Kapitels:

    15.1 Abstrakte Datentypen, Klassen und Objekte

    15.2 Objekte

    15.3 Klassenmodule

    15.4 Eigenschaften einer Klasse

    15.5 Methoden einer Klasse

    15.6 Standardereignisse in Klassen

    15.7 Benutzerdefinierte Ereignisse

    15.8 Benutzerdefinierte Auflistungen mit dem Collection-Objekt

    15.9 Schnittstellen und Vererbung

    © 2006-2008 André Minhorst Alle Rechte vorbehalten.