Prozeduren und Parameter optimieren

Von: Lorenz Hölscher
Stand: 1. Juni 2011
3.5
(2)
Anmelden um Kommentare zu schreiben

Module für gekapselte Werte

Klassen-Module

Klassenmodule können nicht direkt aufgerufen werden, weil erst eine Instanz (eine Arbeitskopie im Speicher) von Ihnen erzeugt werden muss. Dafür können aber mehrere, voneinander unabhängige Instanzen existieren, die jeweils ihre eigenen Werte verwalten.

Mehr Informationen zur Klassen-Programmierung

Für weitere Details zum Umgang mit Klassen und deren Besonderheiten ist die Lektüre des Beitrags "VBA-Programmierung mit Klassen" empfehlenswert.

Erstellen Sie dazu mit Einfügen/Klassenmodul ein neues Klassenmodul und kopieren Sie alles aus dem bisherigen Standardmodul hinein, allerdings nicht den Enum...End Enum-Block und nicht die Deklaration von Pi. Public-Variablen wie diese können nie Bestandteil einer Klasse sein, weil sonst jede Instanz versuchen würde, diese zu veröffentlichen.

Die hier vorgenommene Deklaration im Standard-Modul ist ohnehin bereits Public gewesen und kann also für alle Module ebenso wie für Klassenmodule genutzt werden. Der Code in der Klasse clsKoerper sieht jetzt wie im folgenden Listing aus:

Option Explicit

Dim m_dblHoehe As Double
Dim m_dblRadius As Double
Dim m_rkpTyp As enmKoerper

Private Sub Class_Initialize() 'Standardwerte setzen
	m_dblHoehe = 1
	m_dblRadius = 1
	m_rkpTyp = krpKugel
End Sub

Property Let Radius(dblRadius As Double)
	m_dblRadius = dblRadius
End Property

Property Let Hoehe(dblHoehe As Double)
	m_dblHoehe = dblHoehe
End Property

Property Let Typ(krpTyp As enmKoerper)
	m_rkpTyp = krpTyp
End Property

Property Get Volumen() As Double
	Select Case m_rkpTyp
	Case krpKugel: Volumen = 4 / 3 * Pi * m_dblRadius
	Case krpKegel: Volumen = 1 / 3 * Pi * m_dblRadius ^ 2 * m_dblHoehe
	Case krpZylinder: Volumen = Pi * m_dblRadius ^ 2 * m_dblHoehe
	End Select
End Property

Property Get Oberflaeche() As Double
	Select Case m_rkpTyp
	Case krpKugel: Oberflaeche = 4 * Pi * m_dblRadius ^ 2
	Case krpKegel: Oberflaeche = 1 / 3 * Pi * m_dblRadius ^ 2 * m_dblHoehe
	Case krpZylinder: Oberflaeche = 2 * Pi * m_dblRadius * (m_dblRadius + m_dblHoehe)
	End Select
End Property

Der Vorteil der Klasse besteht nun nicht nur im mehrfachen Verwalten eigener Daten, sondern auch darin, dass sie bei ihrer Instanziierung eine Methode Class_Initialize durchführt. In dieser können Sie (anders als in einem normalen Modul) Standardwerte vorbesetzen oder Start-Prüfungen durchführen.

Wenn in diesem Fall einer der Parameter nicht angegeben wurde, ist er nicht mit 0 (Startwert einer Double-Variablen!) vorbelegt, sondern mit 1. Auch der Typ des zu berechnenden Körpers ist standardmäßig erst einmal eine Kugel und wird nur bei Bedarf überschrieben. Hier ist das inhaltlich von eher geringer Bedeutung, aber bei komplexeren Berechnungen sind solche Vorbesetzungen enorm praktisch.

Im Modul modKoerperTest können Sie nun diesmal die Berechnung mit Klassen durchführen:

Diese Seite ist für Mitglieder von akademie.de reserviert.

Möchten Sie die Mitgliedschaft 14 Tage kostenlos testen und den Beitrag komplett lesen?

Oder möchten Sie zunächst mehr über diesen Beitrag erfahren und die Leseproben sehen?

Ich bin bereits Mitglied
Jetzt Probemitglied werden
Ich kann in den 14 Tagen Probezeit formlos z.B. per E-Mail stornieren. Wenn ich das nicht tue, entscheide ich mich für ein