PDA

Vollständige Version anzeigen : Einführung: Was ist ein Klassenmodul und was habe ich darunter zu verstehen?


Manuela Kulpa
31.12.2002, 14:24
Eine Klasse ist eine Definition für ein Objekt. Sie enthält Informationen dazu, wie sich ein Objekt verhalten sollte, einschließlich des Namens, der Methode, Eigenschaften und Ereignisse. Sie ist eigentlich nicht selbst ein Objekt, da sie nicht im Speicher vorhanden ist. Wenn Codeanweisungen durchgeführt werden, die sich auf eine Klasse beziehen, wird eine neue Instanz der Klasse, ein Objekt, im Speicher erstellt. Obwohl es nur eine Klasse gibt, können mehrere Objekte desselben Typs durch diese Klasse im Speicher erstellt werden.

Du kannst dir eine Klasse wie ein Objekt auf dem Papier vorstellen, d.h. es liefert die Blaupause für ein Objekt, ist allerdings im Speicher selbst nicht vorhanden. Du kannst mit dieser Blaupause beliebig viele Objekte erstellen. Eine hilfreiche Analogie besteht vielleicht darin, eine Klasse mit einer Ausstechform und die Objekte mit Keksen zu vergleichen. Jeder Keks kann geringfügig abweichende Merkmale haben, aber für alle wurde dieselbe Ausstechform verwendet.

Ähnlich wird auch jedes Objekt aus einer Klasse erstellt, die dieselben Elemente aufweist: Eigenschaften, Methoden und Ereignisse. Aber jedes Objekt verhält sich wie eine eigenständige Einheit. Die Eigenschaften eines Objektes können z.B. auf andere Werte festgelegt sein als die eines anderen Objekts vom selben Typ.

Ein VBA-Projekt kann zwei verschiedene Arten von Klassenmodule enthalten: Basisklassenmodule, denen keine Benutzeroberfläche zugeordnet sind, und Klassenmodule, die zu einem Formular oder einer anderen Komponente gehören. Klassenmodule, die z.B. einem Formular zugeordnet sind, das einem Basisklassenmodul entspricht, setzten voraus, dass sie nur dann im Speicher existieren, wenn auch das Formular im Speicher vorhanden ist. Beispiele für Objekte, die Klassenmodulen zugeordnet sind, sind Access-Formular und Berichte.

Ein kleines Beispiel:
<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="REM">' Beispiel: MeineKlasse.cls</span>
&nbsp;
<span class="REM">' MeineEigenschaft ist f&uuml;r Werte geeignet</span>
<span class="TOKEN">Private</span> Eigenschaft
&nbsp;
<span class="REM">' Eigenschaft lesen</span>
<span class="TOKEN">Property Get</span> MeineEigenschaft()
MeineEigenschaft = Eigenschaft
<span class="TOKEN">End</span> <span class="TOKEN">Property</span>
&nbsp;
<span class="REM">' Eigenschaft ver&auml;ndern</span>
<span class="TOKEN">Property Let</span> MeineEigenschaft(Einstellung)
Eigenschaft = Einstellung
<span class="TOKEN">End</span> <span class="TOKEN">Property</span>
&nbsp;
<span class="REM">' ShowCopyright-Methode</span>
<span class="TOKEN">Public Sub</span> ShowCopyright()
<span class="TOKEN">Dim</span> s <span class="TOKEN">As</span> <span class="TOKEN">String</span>
s = &quot;Beispielklasse: MeineKlasse&quot; &amp; Chr$(13) _
&amp; &quot;Copyright Lisa Meyer - 2003&quot;
MsgBox s, vbInformation, &quot;Info&quot;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>Aufruf z.B. in einem Modul<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Public Sub</span> TestEigenschaft()
&nbsp;
<span class="REM"> ' MeineKlasse initialisieren</span>
<span class="TOKEN">Dim</span> c <span class="TOKEN">As</span> <span class="TOKEN">New</span> MeineKlasse
&nbsp;
<span class="REM"> ' Aufruf von Let MeineEigenschaft</span>
c.MeineEigenschaft = 3
<span class="REM"> ' Aufruf von Get MeineEigenschaft</span>
MsgBox &quot;Du hast folgendes angegeben: &quot; &amp; c.MeineEigenschaft
<span class="REM"> ' Aufruf ShowCopyright-Methode</span>
c.ShowCopyright
&nbsp;
<span class="REM"> ' MeineKlasse zerst&ouml;ren</span>
<span class="TOKEN">If</span> <span class="TOKEN">Not</span> c <span class="TOKEN">Is</span> <span class="TOKEN">Nothing</span> <span class="TOKEN">Then</span> <span class="TOKEN">Set</span> c = <span class="TOKEN">Nothing</span>
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span></pre></div>Ok, das Beispiel ist nicht unbedingt sehr anspruchsvoll - es zeigt aber eines der Grundprinzipien einer Klasse, die Nutzung von Eigenschaften (Properties) und Methoden.

Ein weiterer Unterschied zu normalen Modulen sind die Eigenschaften Private Sub Class_Initialize() und
Private Sub Class_Terminate(). Sobald eine Klassenvariable initialisiert wird, erfolgt automatisch der Aufruf von Class_Initialize. Wird diese Referenz wieder "zerstört" (z.B. durch Set c = Nothing), erfolgt automatisch der Aufruf von Class_Terminate.

Es gibt sicherlich Unmengen von Beispielen zu diesem Thema - ich empfehle daher einen Blick in die Microsoft Access Visual Basic Referenz-Onlinehilfe: Stichwort Klassenmodule bzw. den erweiterten Zugriff auf die MSDN, z.B. MSDN - Microsoft Office XP Developer - What Is a Class? (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/modcore/html/deovrWhatIsClass.asp) ff.

md
03.02.2003, 20:32
Hallo Manuela!

Einfach Super erklärt, vielen Dank

MD