Klassen: Vorlagen für Objekte
Aktualisiert: November 2007
Klassen sind symbolische Darstellungen von Objekten. Klassen beschreiben die Eigenschaften, Felder, Methoden und Ereignisse, die Objekte bilden, auf dieselbe Weise, wie Baupläne die Elemente eines Gebäudes beschreiben. So wie ein Bauplan zum Errichten mehrerer Gebäude verwendet werden kann, ist es auch möglich, eine einzelne Klasse zur Erstellung einer beliebigen Anzahl von Objekten zu verwenden. Und wie Baupläne jene Teile von Gebäuden festlegen, die nur für bestimmte Personen zugänglich sind, so steuern auch Klassen über die Kapselung den Benutzerzugriff auf Objektelemente.
Klassen und Objekte
Die Begriffe Klasse und Objekt werden manchmal synonym verwendet, genau genommen beschreiben Klassen jedoch die Struktur von Objekten, während Objekte verwendbare Instanzen von Klassen sind. Jede Instanz ist eine exakte, jedoch verschiedene Kopie ihrer Klasse. Da ein Objekt eine Instanz einer Klasse ist, wird der Vorgang der Erstellung eines Objekts als Instanziierung bezeichnet.
Um auf den Vergleich mit Bauplänen zurückzukommen: Eine Klasse ist ein Bauplan, und ein Objekt ist ein anhand dieses Bauplans errichtetes Gebäude. In der Regel wirken sich Änderungen an den Daten eines Objekts nicht auf die Daten eines anderen Objekts aus. (Eine Ausnahme stellen jedoch freigegebene Member dar. Dies sind mit dem Shared-Modifizierer deklarierte Klassenmember, die unabhängig von bestimmten Instanzen einer Klasse vorhanden sind.)
Kapselung
Kapselung bezeichnet die Möglichkeit der Zusammenfassung einer Gruppe verwandter Elemente sowie die Steuerung des Zugriffs auf diese Gruppe. Klassen stellen eine der gebräuchlichsten Methoden zur Kapselung von Elementen dar. Im Beispiel unten kapselt die BankAccount-Klasse die Methoden, Felder und Eigenschaften zur Beschreibung eines Bankkontos.
Ohne Kapselung müssten Sie separate Prozeduren und Variablen zur Speicherung und Verwaltung der Bankkontodaten deklarieren. Darüber hinaus wäre es schwierig, mit mehreren Bankkonten gleichzeitig zu arbeiten. Mithilfe der Kapselung können Sie die Daten und Prozeduren in der BankAccount-Klasse als Einheit verwenden. Sie können ohne Probleme mit mehreren Bankkonten gleichzeitig arbeiten, da jedes Konto durch eine eindeutige Instanz der Klasse dargestellt wird.
Die Kapselung ermöglicht es Ihnen weiterhin, die Verwendung von Daten und Prozeduren zu steuern. Sie können Zugriffsmodifizierer (z. B. Private oder Protected) verwenden, um zu verhindern, dass externe Prozeduren Klassenmethoden ausführen oder Daten in Eigenschaften und Feldern lesen und ändern. Sie sollten die internen Details einer Klasse als Private deklarieren, damit sie außerhalb der Klasse verwendet werden können. Diese Technik wird als Ausblenden von Daten bezeichnet und zum Schutz von Kundendaten, z. B. dem Kontostand, benutzt.
Eine der grundlegenden Regeln der Kapselung ist, dass Klassendaten nur über die Property-Prozeduren oder Methoden geändert bzw. abgerufen werden sollten. Das Ausblenden der Implementierungsdetails der Klassen verhindert deren unerwünschte Verwendung und ermöglicht Ihnen die spätere Änderung dieser Daten, ohne dabei Kompatibilitätskonflikte zu riskieren. Beispielsweise kann in späteren Versionen der BankAccount-Klasse der Datentyp des Felds AccountBalance geändert werden, ohne dass dadurch die Funktionstüchtigkeit von Anwendungen beeinträchtigt wird, die davon abhängig sind, dass dieses Feld einen bestimmten Datentyp hat.
Vererbung
Sie können Klassen ebenso wie Visual Basic-Strukturen zur Definition von Datentypen benutzen, die eine Gruppe verwandter Elemente kapseln. Im Unterschied zu Strukturen können Visual Basic-Klassen jedoch die Merkmale anderer Klassen erben und erweitern. Klassen, die die Basis neuer Klassen darstellen, werden als Basisklassen bezeichnet. Von Basisklassen abgeleitete Klassen werden als abgeleitete Klassen bezeichnet. Abgeleitete Klassen erben alle Felder, Eigenschaften, Methoden und Ereignisse der Basisklasse. Das heißt, Sie können eine Klasse einmal entwickeln und debuggen und dann als Basis für weitere Klassen erneut verwenden.
Im folgenden Beispiel wird eine Basisklasse definiert, die ein allgemeines Bankkonto darstellt, sowie eine spezifische Klasse, die die Eigenschaften der Basisklasse erbt, jedoch den Besonderheiten eines Girokontos angepasst ist:
Class BankAccount
Private AccountNumber As String
Private AccountBalance As Decimal
Private HoldOnAccount As Boolean = False
Public Sub PostInterest()
' Add code to calculate the interest for this account.
End Sub
ReadOnly Property Balance() As Decimal
Get
' Return the available balance.
Return AccountBalance
End Get
End Property
End Class
Class CheckingAccount
Inherits BankAccount
Sub ProcessCheck()
' Add code to process a check drawn on this account.
End Sub
End Class
Weitere Informationen über die Vererbung finden Sie unter Grundlagen der Vererbung.
Freigegebene Member
Standardmäßig sind Klassendaten klasseninstanzspezifisch. Es kann jedoch vorkommen, dass ein einzelnes Datenelement von allen von einer Klasse erstellten Objekten gemeinsam verwendet werden soll. In diesen Fällen verwenden Sie den Modifizierer Shared, damit eine Variable in allen Instanzen einer Klasse den gleichen Wert hat. (Als Shared deklarierte Member werden in anderen Programmiersprachen gelegentlich auch als "statische Member" bezeichnet). Sie können freigegebene Methoden mithilfe eines Klassennamen direkt aufrufen, ohne zuerst eine Instanz der Klasse zu erstellen.
Weitere Informationen zu freigegebenen Membern finden Sie unter Freigegebene Member in Visual Basic.
Shadowing
Abgeleitete Klassen können mithilfe des Shadows-Schlüsselworts einen Member deklarieren, dessen Name mit dem eines geerbten Members übereinstimmt. Der Datentyp von Membern, für die Shadowing durchgeführt wird, muss nicht mit dem Datentyp des Members übereinstimmen, anhand dessen Shadowing durchgeführt wurde. Beispielsweise kann eine Eigenschaft für eine Variable vom Typ Integer Shadowing durchführen.
Weitere Informationen zu freigegebenen Membern finden Sie unter Shadowing in Visual Basic.
Siehe auch
Konzepte
Freigegebene Member in Visual Basic