Was ist ein Objekt? Was ist eine Klasse ?

Die Beziehung zwischen einem Objekt und seiner Klasse können Sie sich zum besseren Verständnis wie die zwischen Ausstechform und Plätzchen vorstellen. Die Ausstechform ist die Klasse. Sie definiert die Merkmale der einzelnen Plätzchen, z. B. die Größe und die Form. Die Klasse wird zur Erstellung von Objekten verwendet. Die Objekte sind in diesem Fall die Plätzchen.

Klasse = Ausstechform




Objekt = Plätzchen




Was ist ein Objekt ?

Objekte sind also Kombinationen von Form und Inhalt , die Form wird von der Klasse vorgegeben.

Allgemein ausgedrückt sind Objekte also Kombinationen von Code und Daten, die als Einheit behandelt werden können. Sie können Teile von Anwendungen sein, wie Steuerelemente oder Formulare. Auch ganze Anwendungen können ein Objekt darstellen.

Was ist eine Klasse ?

In Gambas ist jedes Objekt durch eine Klasse definiert. Klassen sind leere Objekte. Klassen beschreiben Felder, Eigenschaften, Methoden und Ereignisse von Objekten. Objekte sind gefüllte Klassen. Sobald Sie eine Klasse erstellt haben, können Sie eine beliebige Anzahl von Objekten erstellen.

In einer Datenbank würde eine Klasse der Tabellendefinition entsprechen und das Objekt einem Datensatz.

Noch klarer wird die Beziehung zwischen Klassen und Objekten in Gambas in den folgenden beiden Beispielen:

Die Steuerelemente in der Werkzeugkiste in Gambas repräsentieren Klassen. Wenn Sie ein Steuerelement aus der Toolbox auf ein Formular ziehen und dort ablegen, erstellen Sie eigentlich bereits ein Objekt, d. h. eine Klasseninstanz.

Das Formular, mit dem Sie zur Entwurfszeit arbeiten, ist eine Klasse. Zur Laufzeit erstellt Gambas ein Objekt des Formulars.

Mit Klassen können Variablen und Prozeduren einmal deklariert und dann bei Bedarf erneut verwendet werden.

1.Wenn Sie beispielsweise einer Anwendung eine Rechtschreibprüfung hinzufügen möchten, können Sie alle Variablen und Unterstützungsfunktionen definieren, um in der Anwendung eine Funktion zur Rechtschreibprüfung bereitzustellen.

2.Sie können die Rechtschreibprüfung aber auch als Klasse erstellen. In diesem Fall können Sie sie in anderen Anwendungen erneut verwenden, indem Sie der kompilierten Assembly einen Verweis hinzufügen.

3.Eine noch bessere Möglichkeit, bei der Sie sich gleichzeitig einigen Arbeitsaufwand sparen, ist die Verwendung einer Rechtschreibprüfungsklasse, die bereits von einem anderen Entwickler entwickelt wurde.

Objekte werden als identische Kopien ihrer Klassen erstellt. Sobald Sie als eigenständige Objekte bestehen, können ihre Eigenschaften jedoch verändert werden. Wenn Sie einem Formular beispielsweise drei Kontrollkästchen hinzufügen, ist jedes Kontrollkästchen-Schaltflächenobjekt eine Instanz der CheckBox-Klasse. Die einzelnen CheckBox-Objekte verfügen über eine gemeinsame Gruppe von Merkmalen und Fähigkeiten (Eigenschaften, Felder, Methoden und Ereignisse), die durch die Klasse definiert wurde. Jedes Objekt verfügt jedoch über einen eigenen Namen, kann separat aktiviert und deaktiviert sowie im Formular in unterschiedlichen Verzeichnissen abgelegt werden.

Objekte, Eigenschaften, Methoden und Ereignisse

Objekte, Eigenschaften, Methoden und Ereignisse sind die grundlegenden Einheiten der objektorientierten Programmierung. Ein Objekt ist ein Element einer Anwendung, das eine Instanz einer Klasse darstellt. Eigenschaften, Methoden und Ereignisse sind die Bausteine von Objekten und bilden deren Member.

Objekte

Ein Objekt stellt eine Instanz einer Klasse dar, wie Form, Control oder Component. Im Visual Basic-Code müssen Sie ein Objekt instanziieren, bevor Sie eine der Objektmethoden anwenden oder den Wert von einer der Eigenschaften ändern können. Instanziierung ist der Prozess, in dem eine Instanz einer Klasse erstellt und einer Objektvariablen zugewiesen wird. Im Folgenden ein Beispiel:

Dim x As New MyClass()

In diesem Beispiel wird die Variable x zugewiesen, um auf eine neue Instanz der MyClass-Klasse zu verweisen.

Eigenschaften

Eine Eigenschaft ist ein Attribut eines Objekts, das eines der Merkmale des Objekts, wie Größe, Farbe oder Bildschirmposition, oder einen Aspekt des Verhaltens, z. B. ob es aktiviert oder sichtbar ist, definiert. Wenn Sie die Merkmale eines Objekts ändern möchten, ändern Sie die Werte der entsprechenden Eigenschaften.

Wenn Sie den Wert einer Eigenschaft festlegen möchten, fügen Sie den Verweis auf ein Objekt mit einem Punkt, dem Eigenschaftennamen, einem Gleichheitszeichen (=) sowie dem neuen Eigenschaftenwert hinzu. Beispielsweise wird in der folgenden Prozedur die Beschriftung eines Windows Forms in Visual Basic geändert, indem die Text-Eigenschaft festgelegt wird:

Public Sub ChangeName(newTitle)

myForm.Text = newTitle

End Sub

Manche Eigenschaften können nicht festgelegt werden. Das Hilfethema für jede Eigenschaft gibt an, ob diese Eigenschaft festgelegt (Lese-/Schreibzugriff), nur gelesen (schreibgeschützt) oder nur geschrieben (nur Schreibzugriff) werden kann.

Sie können Informationen zu einem Objekt abrufen, indem Sie den Wert einer beliebigen Eigenschaft zurückgeben. In der folgenden Prozedur wird ein Meldungsfeld verwendet, um den Titel anzuzeigen, der oben im derzeit aktiven Formular erscheint.

Public Sub GetFormName()

Dim formName As String

formName = myForm.Text

MsgBox(formName)

End Sub

Methoden

Eine Methode ist eine Aktion, die von einem Objekt ausgeführt werden kann. Beispielsweise ist Add eine Methode des ComboBox-Objekts, weil sie dem Kombinationsfeld einen neuen Eintrag hinzufügt.

Das folgende Beispiel veranschaulicht die Start-Methode einer Timer-Komponente:

' Instantiates a Timer object.

Dim myTimer As New System.Windows.Forms.Timer()

' Invokes the Start method of myTimer.

MyTimer.Start

Ereignisse

Ein Ereignis ist eine Aktion, die von einem Objekt erkannt wird, z. B. Klicken mit der Maus oder Drücken einer Taste, und für die Sie einen Code als Antwort schreiben können. Ereignisse können als Ergebnis von Benutzeraktionen oder Programmcodes auftreten oder vom System ausgelöst werden. Sie können auch eigene, benutzerdefinierte Ereignisse entwickeln, die von den Objekten ausgelöst und von anderen Objekte verarbeitet werden. Weitere Informationen finden Sie unter Ereignisse und Delegaten.

Grundlagen zum Arbeiten mit Objekten

An beinahe allen Arbeitsschritten, die Sie in Gambas ausführen, sind Objekte beteiligt. In diesem Thema werden einige Verwendungsmöglichkeiten von Objektelementen demonstriert.

Memberzugriff



Auf die Member eines Objekts greifen Sie zu, indem Sie erst den Namen des Objekts, dann einen Punkt als Trennzeichen und anschließend den Namen des zu verwendenden Members angeben. Wenn Sie beispielsweise über ein Objekt mit der Bezeichnung Obj1 und einer Eigenschaft Prop1 verfügen, können Sie zum Zugreifen auf diese Eigenschaft die Syntax Obj1.Prop1 verwenden. In einigen Fällen müssen mehrere Punkte verwendet werden, da Objekte weitere Objekte enthalten können. Wenn es sich bei der Eigenschaft Prop1 um ein Objekt handelt, das ein Feld mit der Bezeichnung X enthält, können Sie beispielsweise die Syntax Obj1.Prop1.X verwenden.

Felder und Eigenschaften

Eigenschaften und Felder stellen die in einem Objekt gespeicherten Informationen dar. Die Werte der Felder und Eigenschaften werden analog zum Abrufen und Festlegen von Variablen mit Zuweisungsanweisungen abgerufen und festgelegt. Im folgenden Beispiel wird der Wert eines Feldes und einer Eigenschaft festgelegt und abgerufen.



Dim X As Integer = 8

Dim Obj1 As New Class1 ' Declares an instance of a class.

Obj1.Prop1 = X ' Property assignment. Assigns the number 8 to Prop1.

X = Obj1.Prop1 + 1 ' Retrieval. The variable X contains the number 9.

Obj1.Field1 = X ' Field assignment. Assigns the number 9 to Field1.

X = Obj1.Prop1 + 1 ' Retrieval. The variable X contains the number 10.



Methoden





Methoden sind innerhalb einer Klasse definierte Prozeduren. Methoden werden wie Unterroutinen oder Funktionen verwendet; der Zugriff auf Methoden erfolgt jedoch über das Objekt, zu dem sie gehören. Im folgenden Codefragment werden eine Funktion und eine Unterroutine abgerufen, die in einem Objekt deklariert sind:



Dim Obj2 As New Class2 ' Declares an instance of a class

Dim Y As Integer

' Retrieves a value from a method declared as a function.

Y = Obj2.GetNumber

Obj2.StoreNumber(Y) ' Calls a method declared as a subroutine.



Ereignisse





Ereignisse sind Benachrichtigungen, die die Ausführung einer Prozedur veranlassen. Sie können durch Objekte sowohl behandelt als auch erzeugt werden. Bei der Erzeugung von Ereignissen wird die RaiseEvent-Anweisung und zur Behandlung entweder das Handles-Schlüsselwort oder die AddHandler-Anweisung verwendet. Im folgenden Beispiel wird ein mit dem WithEvents-Schlüsselwort deklariertes Ereignis ausgelöst und behandelt:



' Declares a WithEvents variable in the declarations section.

Dim WithEvents EClass As EventClass



Class EventClass

Public Event AnEvent() ' Declares an event.



Sub CauseEvent()

RaiseEvent AnEvent() 'Raises an event.

End Sub

End Class



' Declares an event handler

Sub EventHandler() Handles EClass.AnEvent

MessageBox.Show("Received Event.")

End Sub



' Test the class and the event handler.

Sub TestEvents()

EClass = New EventClass() ' Creates an instance of the class.

EClass.CauseEvent() ' Calls a method that raises an event.

End Sub



ie Objekte, die Sie in Visual Basic .NET verwenden, stammen aus internen und externen Quellen. Zu internen Objekten gehören u. a. systeminterne Objekte und Klassen im Projekt. Externe Objekte umfassen u. a. Assemblies und COM-Objekte.





Interne Objekte





Systeminterne (oder integrierte) Objekte sind Objekte, die in Visual Basic .NET bereits vorgegeben sind. Dazu gehören die primitiven Skalartypen wie Integer und Double sowie Array und String. Sie müssen Verweise auf interne Objekte erst erstellen, bevor sie in einem Projekt verwendet werden können.





Andere interne Objekte sind Instanzen von Klassen im aktuellen Projekt. Sie können diese Klassen bei Bedarf in einem Projekt verwenden und sie beim Erstellen einer Assembly anderen Anwendungen zur Verfügung stellen.





Externe Objekte





Externe Objekte stammen aus anderen Projekten oder Assemblies, die standardmäßig nicht für ein Projekt zur Verfügung stehen. Sie müssen Projektverweise auf externe Objekte erstellen, bevor Sie sie in einem Projekt verwenden können.





Assemblies sind die allgemein übliche Quelle von Objekten für Visual Basic .NET-Anwendungen. .NET Framework verfügt über Assemblies, die häufig verwendete Objekte enthalten. Einige Objekte in .NET Framework werden als immanente Objekte behandelt, jedoch müssen die meisten Assemblies explizit mit Hilfe der Imports-Anweisung importiert werden, bevor sie verwendet werden können. Alle mit der Common Language Specification (CLS) kompatiblen Sprachen, z. B. Visual Basic .NET oder Visual C#, können Assemblies erstellen und verwenden. Einzelheiten zu diesem Thema finden Sie unter Assemblies.





In der Vergangenheit wurden Objekte in Visual Basic meist mit Hilfe von COM-Komponenten programmiert. Mittlerweile werden neue Objekte jedoch anhand von .NET-Assemblies erstellt. Sie können vorhandene COM-Komponenten weiterhin in Anwendungen verwenden, allerdings muss auf COM-Objekte über die .NET-Interoperabilitätsklassen zugegriffen werden. Für den Zugriff auf eine COM-Bibliothek müssen Sie eine Interoperabilitätsassembly verwenden, die die Interoperabilitätsklassen für alle in der COM-Bibliothek definierten COM-Klassen enthält.





Sie können nicht nur auf systemeigene .NET-Klassen und COM-Klassen zugreifen, sondern auch die in den Dynamic Link Libraries (DLLs) definierten Funktionen aufrufen. Visual Basic .NET ermöglicht Ihnen, Funktionen in DLLs aufzurufen, nachdem sie mit einer Declare-Anweisung deklariert wurden. Visual Basic .NET bietet eine verbesserte Funktionalität der Declare-Anweisung und ermöglicht es Ihnen, das DllImport-Attribut zu verwenden, um Standardwerte z. B. für CallingConvention, ExactSpelling und SetLastError anzugeben. Parameter für Declare-Anweisungen können mit Hilfe des MarshalAs-Attributs mit Anmerkungen versehen werden. Dadurch ergeben sich, verglichen mit früheren Versionen von Visual Basic, ganz andere Möglichkeiten für die Konvertierung von Parametern.



Beziehung von Objekten zueinander





Objekte können unterschiedliche Beziehungen zueinander haben. Eine Möglichkeit ist die hierarchische Beziehung. Klassen, die von allgemeineren Klassen abgeleitet sind, haben eine hierarchische Beziehung. Klassenhierarchien sind bei der Beschreibung von Elementen nützlich, die Untertypen allgemeinerer Klassen sind. Abgeleitete Klassen erben Member aus der Klasse, von der sie abgeleitet sind. Dadurch ist es möglich, die Komplexität der Klassen zu erhöhen, je weiter oben sie sich in der Hierarchie befinden.





Eine andere Art der Beziehung zwischen Objekten ist die Beziehung zwischen Objekt und Objektcontainer. Containerobjekte kapseln andere Objekte ein. Eine Klasseninstanz mit einer Eigenschaft, die ein Objekt enthält, ist beispielsweise ein Containerobjekt.





Eine Art der Objekteinkapselung stellen Auflistungen dar. Sie ähneln Arrays von Objekten, die aufgelistet werden können. Visual Basic .NET unterstützt eine spezielle Syntax in der Form von For Each...Next-Syntaxblöcken, mit deren Hilfe Sie die Elemente einer Auflistung durchlaufen können. Darüber hinaus ermöglichen Auflistungen in vielen Fällen die Verwendung einer Methode mit der Bezeichnung Item-Eigenschaft, mit der Sie Elemente über ihren Index abrufen können oder, indem Sie sie mit einer eindeutigen Zeichenfolge verknüpfen. Auflistungen sind leichter zu verwenden als Arrays, da sie es ermöglichen, Elemente ohne Verwendung von Indizes hinzuzufügen oder zu entfernen. Aufgrund dieses Vorteils werden Auflistungen häufig dazu verwendet, Formulare und Steuerelemente zu speichern.



Einführung in Objekte in Visual Basic





Für fast jede Aktion, die Sie in Visual Basic ausführen, werden Objekte verwendet. Wenn Sie keine Erfahrung mit der objektorientierten Programmierung haben, sind die folgenden Begriffserklärungen und Konzepte ein guter Einstieg.





Klassen und Objekte





Die Begriffe "Klasse" und "Objekt" werden so oft in der objektorientierten Programmierung verwendet, dass sie leicht verwechselt werden können. Im Allgemeinen ist eine Klasse eine abstrakte Darstellung von einem Element, und ein Objekt ist ein verwendbares Beispiel des Elements, das von der Klasse dargestellt wird. Es gibt jedoch eine Ausnahme zu dieser Regel: freigegebene Klassenmember, die sowohl in Instanzen einer Klasse als auch in Objektvariablen, welche als Typ der Klasse deklariert sind, verwendet werden können.





Felder, Eigenschaften, Methoden und Ereignisse





Klassen bestehen aus Feldern, Eigenschaften, Methoden und Ereignissen. Felder und Eigenschaften stellen die in einem Objekt enthaltenen Informationen dar. Felder sind wie Variablen; sie können direkt gelesen oder festgelegt werden. Wenn Sie z. B. ein Objekt Auto haben, kann dessen Farbe in einem Feld Farbe gespeichert werden.





Eigenschaften werden wie Felder abgerufen und festgelegt; sie werden jedoch mit den Prozeduren Property Get und Property Set implementiert, mit denen besser gesteuert werden kann, wie Werte festgelegt oder zurückgegeben werden. Die Dereferenzierungsschicht zwischen dem gespeicherten Wert und den Prozeduren, die diesen Wert verwenden, unterstützt Sie beim Isolieren der Daten und ermöglicht Ihnen, die Werte vor dem Zuordnen oder Abrufen auszuwerten.





Methoden stellen Aktionen dar, die ein Objekt ausführen kann. Beispielsweise kann ein Auto-Objekt die Methoden MotorStarten, Fahren und Bremsen aufweisen. Definieren Sie Methoden, indem Sie der Klasse Prozeduren, entweder Sub-Routinen oder -Funktionen, hinzufügen.





Ereignisse sind Benachrichtigungen, die ein Objekt von anderen Objekten oder Anwendungen erhält oder an diese überträgt. Ereignisse ermöglichen es Objekten, Aktionen auszuführen, sobald ein bestimmter Vorgang stattfindet. Ein Beispiel für ein Ereignis der Auto-Klasse wäre ein Motor_Überprüfen-Ereignis. Da es sich bei Microsoft Windows um ein ereignisgesteuertes Betriebssystem handelt, können Ereignisse von anderen Objekten, Anwendungen oder von Benutzereingaben (z. B. ein Mausklick oder das Drücken einer Taste) kommen.





Kapselung, Vererbung und Polymorphismus





Felder, Eigenschaften, Methoden und Ereignisse machen nur einen Teil der objektorientierten Programmierung aus. Für die wahre objektorientierte Programmierung ist es nötig, dass die Objekte drei Qualitäten unterstützen: Kapselung, Vererbung und Polymorphismus.





Kapselung bedeutet, dass eine Gruppe verwandter Eigenschaften, Methoden sowie anderer Member als eine Einheit bzw. ein Objekt behandelt werden. Objekte können steuern, wie Eigenschaften geändert und Methoden ausgeführt werden. Ein Objekt kann z. B. Werte überprüfen, bevor Änderungen an Eigenschaften vorgenommen werden können. Die Kapselung erleichtert auch die Änderung der Implementierung zu einem späteren Zeitpunkt, da die Implementierungsdetails der Objekte ausgeblendet werden können. Dieser Vorgang wird als Ausblenden von Daten bezeichnet.





Vererbung beschreibt die Fähigkeit, neue Klassen basierend auf einer vorhandenen Klasse zu erstellen. Die neue Klasse erbt alle Eigenschaften, Methoden und Ereignisse der Basisklasse und kann mit zusätzlichen Eigenschaften und Methoden angepasst werden. Sie können z. B. eine neue Klasse mit der Bezeichnung LKW erstellen, die auf der Auto-Klasse basiert. Die LKW-Klasse erbt die Farbe-Eigenschaft von der Auto-Klasse und kann zusätzliche Eigenschaften, z. B. Vierradantrieb aufweisen.





Polymorphismus bedeutet, dass Sie mehrere Klassen untereinander austauschen können, obwohl jede Klasse dieselben Eigenschaften oder Methoden auf unterschiedliche Art und Weise implementiert. Polymorphismus ist in der objektorientierten Programmierung wichtig, da er Ihnen ermöglicht, Elemente mit denselben Namen zu verwenden, ungeachtet des zu dem Zeitpunkt verwendeten Objekttyps. Wenn die Basisklasse beispielsweise Auto lautet, können bei der Programmierung dank Polymorphismus verschiedene MotorStarten-Methoden für eine beliebige Anzahl von abgeleiteten Klassen definiert werden. Die MotorStarten-Methode einer abgeleiteten Klasse mit der Bezeichnung Dieselfahrzeug kann sich komplett von der Methode mit demselben Namen in der Basisklasse unterscheiden. Andere Prozeduren oder Methoden können die MotorStarten-Methode der abgeleiteten Klassen auf exakt die gleiche Weise verwenden, ungeachtet des Auto-Objekttyps, der gerade verwendet wird.





Überladen, Außerkraftsetzen und Spiegelung





Überladen, Außerkraftsetzen und Spiegelung sind ähnliche Konzepte, die leicht verwechselt werden können. Obwohl Sie mit allen drei Techniken Member mit demselben Namen erstellen können, gibt es einige wichtige Unterschiede.



Überladene Member werden verwendet, um verschiedene Versionen einer Eigenschaft oder Methode bereitzustellen, die zwar denselben Namen haben, jedoch eine andere Anzahl von Parametern oder Parameter mit unterschiedlichen Datentypen akzeptieren.

Außer Kraft gesetzte Eigenschaften und Methoden werden zum Ersetzen einer geerbten Eigenschaft oder Methode verwendet, die nicht in eine abgeleitete Klasse gehört. Außer Kraft gesetzte Member müssen denselben Datentyp und dieselbe Anzahl von Argumenten akzeptieren. Abgeleitete Klassen erben außer Kraft gesetzte Member.

Gespiegelte Member werden verwendet, um einen Member lokal zu ersetzen, der einen größeren Gültigkeitsbereich hat. Ein beliebiger Typ kann einen anderen Typ spiegeln. Sie können z. B. eine Eigenschaft deklarieren, die eine geerbte Methode mit demselben Namen spiegelt. Gespiegelte Member können nicht geerbt werden.