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