Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Einstieg in ASP.NET von Matthias Lohrer
Einstieg in ASP.NET
gp Kapitel Hinweise zu VB.NET
  gp 3.1 Eine Testumgebung
  gp 3.2 Variablen
    gp 3.2.1 Bezeichner
    gp 3.2.2 VB.NET-Datentypen
  gp 3.3 Konstanten
  gp 3.4 Typkonvertierungen
  gp 3.5 Kontrollstrukturen
    gp 3.5.1 Entscheidungen mit If
    gp 3.5.2 Select Case
    gp 3.5.3 Zählschleife mit For Next
    gp 3.5.4 Schleife mit Do Loop
    gp 3.5.5 Schleife mit While
  gp 3.6 Funktionen und Prozeduren
    gp 3.6.1 Aufbau
    gp 3.6.2 Übergabe von Parametern
  gp 3.7 Klassen erstellen
    gp 3.7.1 Eigenschaften einer Klasse über Felder realisieren
    gp 3.7.2 Eigenschaften mit Property-Prozeduren realisieren
    gp 3.7.3 Schreibgeschützte Eigenschaften
    gp 3.7.4 Methoden erstellen
    gp 3.7.5 Konstruktor erstellen
    gp 3.7.6 Klassen vererben
  gp 3.8 Mit Objekten arbeiten
    gp 3.8.1 Objekte vergleichen
    gp 3.8.2 Den Typ eines Objekts bestimmen
    gp 3.8.3 Objekte in andere Klassen konvertieren
  gp 3.9 Arbeiten mit Arrays
  gp 3.10 Dateizugriffe
  gp 3.11 Fehlerbehandlung mit Try ... Catch ... Finally ... End Try


Galileo Computing

3.7 Klassen erstellen  downtop

Da VB.NET eine vollständig objektorientierte Programmiersprache ist, sollten Sie die Grundlagen der objektorientierten Programmierung beherrschen. Die Deklaration einer eigenen Klasse ist denkbar einfach:

Class Klassenname
' ...
End Class

Wenn Sie eine Klasse definieren, dann definieren Sie im Prinzip so etwas wie einen eigenen Datentyp. Dieser Datentyp kann jedoch nicht nur über Eigenschaften, sondern auch über eigene Methoden verfügen.

Mit dem Schlüsselwort New erzeugen Sie eine Instanz einer Klasse.

Dim a As Testklasse   ' Variable deklarieren
a = New Testklasse()  ' Instanz der Klasse erstellen
Dim b As Testklasse = New Testklasse() ' abküzende 
                                       ' Schreibweise

Galileo Computing

3.7.1 Eigenschaften einer Klasse über Felder realisieren  downtop

Die einfachste Methode, um einer Klasse eine Eigenschaft zu geben, besteht darin, in der Klasse eine entsprechende Variable mit dem Schlüsselwort Public zu definieren. Anschließend können Sie bei jeder Klasseninstanz diese Eigenschaft zuweisen. Variablen, die innerhalb der Klasse mit Private deklariert werden, sind demgegenüber nur innerhalb der Klasse zugänglich.

Die Testumgebung, die in Abschnitt 3.1, vorgestellt wurde, können Sie auch für die Arbeit mit Klassen verwenden. vb_06.aspx enthält ein zusammenhängendes Beispiel.

<!-- vb_06.aspx --> 
<%@ Page Language="VB" Debug="True" Strict="True" %>
<script runat="server">
Sub Page_Load (ByVal Sender As Object, _
               ByVal E As EventArgs)
   Dim c As CBackware
   c = New CBackware()
   c.Name ="Brötchen"
   'b.interneNummer = 25  ' nicht möglich
   ausgabe.innerHTML = c.Name ' Brötchen
End Sub                                   

Class CBackware
   Private interneNummer As Integer
   Public Name As String
End Class
</script>
<html><head><title>
Einstieg in VB.NET
</title></head>
<body>
<h3>Einstieg in VB.NET</h3>
<p id="ausgabe" runat="server"></p>
</body></html>

Wenn Sie eine Variable auf diese Weise über das Schlüsselwort Public zugänglich machen, handelt es sich um ein so genanntes Feld.


Galileo Computing

3.7.2 Eigenschaften mit Property-Prozeduren realisieren  downtop

Es gibt eine zweite Möglichkeit, für eine Klasse eine Eigenschaft zu definieren, und zwar über Property-Prozeduren. Die Klasse CBackware definiert in vb_07.aspx auf diese Weise die Eigenschaft Rezept:

Sub Page_Load (ByVal Sender As Object, _
               ByVal E As EventArgs)
   Dim c As CBackware = New CBackware()
   c.Name ="Brötchen"
   c.Rezept = "Wasser und Mehl"
   ausgabe.innerHTML = c.Name & ": " & c.Rezept
                    ' Brötchen: Wasser und Mehl
End Sub                                   

Class CBackware
   Private meinrezept As String
   Public Name As String   
   Property Rezept() As String
      Get
         Return meinrezept
      End Get
      Set(ByVal inRezept As String)
         meinrezept = inRezept
      End Set      
   End Property
End Class

Auf den ersten Blick wirkt das Verfahren umständlich. Die Klasse enthält eine als Private deklarierte Variable meinrezept, auf die von außen nicht direkt zugegriffen werden kann. Stattdessen gibt es jetzt eine Prozedur Property Rezept(). Der aufrufende Code kann mit c.Rezept="Wasser und Mehl" diese Eigenschaft setzen. Innerhalb der Klasse läuft beim Zugriff auf diese Eigenschaft der betreffende Teil der Property-Prozedur ab. Bei einer Zuweisung wird der Get-Teil ausgeführt. Beim Abruf der Rezept-Eigenschaft wird der Set-Teil ausgeführt. Innerhalb der Property-Prozedur können Sie beliebigen Code erstellen. Auf diese Weise können Sie beispielsweise komplexere Gültigkeitsüberprüfungen realisieren.


Galileo Computing

3.7.3 Schreibgeschützte Eigenschaften  downtop

Mit Hilfe des Schlüsselwortes ReadOnly können Sie schreibgeschützte Eigenschaften realisieren. Bei einer schreibgeschützten Eigenschaft erstellen Sie nur den Get-Teil der Prozedur und lassen den Set-Teil weg.

Private meinpreis As Single = 0.37
' ...
ReadOnly Property Preis() As Single
   Get
      Return meinpreis
   End Get
End Property

Galileo Computing

3.7.4 Methoden erstellen  downtop

Auch das Erstellen einer Methode für eine Klasse ist nicht weiter schwierig.

Public Function backen() As String
   backen = "Fertig!"
End Function

Beim Aufruf etwa von c.backen() wird im Beispiel mit dem Brötchen die Meldung Fertig! ausgegeben.


Galileo Computing

3.7.5 Konstruktor erstellen  downtop

Mit dem Schlüsselwort New erstellen Sie eine neue Instanz einer Klasse. Häufig wissen Sie bereits beim Erstellen einer neuen Instanz, über welche speziellen Eigenschaften dieses konkrete Objekt verfügen soll. Mit Hilfe eines speziellen Konstruktors können Sie solche Eigenschaften bereits beim Instanzieren mit angeben. Im Beispiel mit den Backwaren wissen Sie beispielsweise bereits beim Erstellen einer solchen Variablen, ob Sie ein Brötchen oder ein Brot haben möchten. vb_08.aspx definiert innerhalb der Klasse CBackware mit der Prozedur Public Sub New (ByVal inName As String) einen Konstruktor, dem Sie den Namen des neu zu erstellenden Objekts gleich mit übergeben können.

Sub Page_Load (ByVal Sender As Object, _
               ByVal E As EventArgs)
   Dim s As String
   Dim a As CBackware = New CBackware("Roggenbrot")
   s = a.Name
   ausgabe.innerHTML = s   ' Roggenbrot
End Sub
Class CBackware
   Public Name As String   
   ' ...
   Public Sub New(ByVal inName As String)
      Name = inName
   End Sub   
   ' ...
End Class

Galileo Computing

3.7.6 Klassen vererben  toptop

Diese kleine Einführung kann nicht auf die Details der Vererbung von Klassen eingehen. Lediglich das Prinzip soll kurz erläutert werden. Bislang wurde als Beispiel eine Klasse CBackware erstellt. Wenn der Entwickler es nun oft mit verschiedenen Typen von Backwaren zu tun hat, die sich jeweils nur in einigen wenigen Aspekten voneinander unterscheiden, dann kann er für jeden Backwarentyp eine eigene Klasse erstellen. Dabei muss er aber nicht den gesamten Code von CBackware etwa in eine Klasse CBrot übernehmen. Mittels Vererbung kann er statt dessen festlegen, dass die Klasse CBrot zunächst einmal genauso funktionieren soll wie die Klasse CBackware. Wenn eine Anwendung für eine Variable vom Typ CBrot beispielsweise die Funktion backen() aufruft, wird ebenfalls die Meldung Fertig! ausgegeben.

Dabei muss die Methode backen() gar nicht in der Klasse CBrot implementiert sein. Es reicht, wenn die Basisklasse CBackware über diese Methode verfügt. Dann wird der Code der Basisklasse ausgeführt. Auf diese Weise kann Code optimal wiederverwendet werden. Wenn eine Eigenschaft oder eine Prozedur geringfügig anders funktionieren soll als in der Basisklasse, können diese Eigenschaften und Prozeduren überschrieben werden.

Auf diese Weise entstehen ganze Klassenhierarchien. Am Anfang steht meistens eine Klasse, die über relativ allgemeine und unspezifische Fähigkeiten verfügt. Von einer solchen Basisklasse werden speziellere Klassen vererbt, von denen noch speziellere Klassen abgeleitet sind.

Das beste Beispiel dafür sind die Klassen des .NET-Frameworks. Sämtliche Klassen des .NET-Frameworks stammen von der Basisklasse System.Object ab. Diese Klasse kennt nur wenige Eigenschaften und Methoden. System.Object hat beispielsweise die Methode Equals, die feststellt, ob zwei Objekte identisch sind. Die Methode ToString lässt sich gut für Debugging-Zwecke einsetzen. Sie gibt einen String aus, der das aktuelle Objekt beschreibt. Meistens gibt ToString lediglich den Namen der Klasse selbst aus.

Von System.Object stammen zahlreiche speziellere Klassen ab. Ein Beispiel ist die Klasse System.Web.UI.Control. Aber auch diese Control-Klasse ist noch recht allgemein gehalten. Von ihr stammt etwa die Klasse System.Web. UI.HtmlControls.HtmlControl ab. Von dieser Klasse stammt unter anderem System.Web.UI.HtmlControls.HtmlContainerControl ab. Und von HtmlContainerControl stammt System.Web.UI.HtmlControls.HtmlForm ab. HtmlForm repräsentiert ein Formular in einer HTML- beziehungsweise einer aspx-Seite. Selbst HtmlForm kennt aber noch die Methode ToString, die ursprünglich bereits System.Object zur Verfügung gestellt hat.

Die Klassen werden also immer spezieller, bis am Schluss eine Klasse für eine ganz konkrete Aufgabe steht. Bei der täglichen Arbeit haben Sie es hauptsächlich mit solchen spezialisierten Klassen zu tun, während die allgemeineren Klassen für die tägliche Programmierpraxis eine geringere Bedeutung haben. Das ist nicht anders als in der realen Welt. Es ließe sich eine allgemeine Klasse für Fahrzeuge konstruieren. In der Praxis wird man es aber meistens nicht mit einem abstrakten »Fahrzeug« zu tun haben, sondern mit einem Bus, einer Bahn, einem Fahrrad oder einem Lastwagen.

  

Einstieg in VB.NET

VB.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML




Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de