Objektorientierte Programmierung mit Visual Basic
Entlehnt aus einem Skript von Andreas Terlinden Gerhard-Mercator-Universität Gesamthochschule Duisburg - Fachbereich Wirtschaftswissenschaft - Wirtschaftsinformatik und Operations Research Überarbeitet durch Volker Weyland Version: 1
Objektorientierte Programmierung mit Visual Basic
1
Inhaltsverzeichnis
1 EINFÜHRUNG IN DIE OBJEKTORIENTIERTE PROGRAMMIERUNG 3
1.1 Objektorientierte Programmierung, WARUM??? 3
1.2 Grundbegriffe der objektorientierten Programmierung 4 1.2.1 Objekt - object 4 1.2.2 Klasse - class 4 1.2.3 Methoden 5 1.2.4 Eigenschaften/Attribute - Properties 5 1.2.5 Kapselung - encapsulation 5 1.2.6 Vererbung - object inheritance 5 1.2.7 Polymorphismus - polymorphism 6 1.2.8 Nachrichtenformat 6 1.2.9 Prozeduren und Methoden 7
1.3 Prinzipien der Objektorientierung 8
1.4 Verdeutl ichung am Beispiel : Schiffe 9
2 EINFÜHRUNG IN VISUAL BASIC 11
2.1 Grundbegriffe 11
2.2 Datentypen 14
2.3 Gültigkeitsbereiche der Daten 16
2.4 Parameterübergabe 17
2.5 Namenskonventionen 18
2.6 wichtige Sprachelemente von VB 20 2.6.1 Schleifen-/ Entscheidungs- und Blockanweisungen 20 2.6.2 Rechenoperatoren 25 2.6.3 Vergleichsoperatoren 25 2.6.4 Verknüpfungsoperatoren 25 2.6.5 Numerische Funktionen 25 2.6.6 Stringfunktionen 27 2.6.7 wichtige Properties 28 2.6.8 wichtige Ereignisse 28 2.6.9 einige Kommandos, die man kennen sollte 29
2.7 Beispiel- und Testprogramme 30 2.7.1 das erste Programm : Gewichtsumrechnung 30 2.7.2 Erweiterung um ein Menü 34 2.7.3 PicView - Dateiauswahl 35 2.7.4 PicView2 - Fehlerbehandlung 37 2.7.5 ein Programm ohne Form 38
3 OBJEKTORIENTIERTE PROGRAMMIERUNG MIT VISUAL BASIC 40
3.1 Welche Konzepte der OOP unterstützt VB6? 40
3.2 Welche Objekte bietet VB6 und welche kann man selbst erstel len 41
Objektorientierte Programmierung mit Visual Basic
2
3.2.1 Formen 41 3.2.2 Steuerelementobjekte 41 3.2.3 Datenzugriffsobjekt 41 3.2.4 Systemobjekte 41 3.2.5 Collection-Objekte 42 3.2.6 OLE-Server-Objekte 42 3.2.7 Benutzerdefinierte Klassen 42 3.2.8 Generische Objekte 42
3.3 Nutzung der Objekte 43
3.4 Die Klasse CPerson als Beispiel 45
4 ENTWICKLUNGSMETHODIK BEIM ENTWURF EINER NEUEN KLASSE 47
5 DARSTELLUNG VON KLASSEN UND KLASSENHIERARCHIEN 49
Objektorientierte Programmierung mit Visual Basic
3
1 Einführung in die Objektorientierte Programmierung
1.1 Objektorientierte Programmierung, WARUM??? Problem: Die Softwareentwicklung zeichnet sich durch eine enorme
Kostensteigerung aus.1
1985 140 Milliarden $ 1990 250 Milliarden $
Lösung: eine erhebliche Produktivitätssteigerung und
Qualitätsverbesserung, um den Anteil der ungenutzten Software möglichst gering zu halten.
Die Produktivität lässt sich durch folgende Maßnahmen steigern: • Einsatz qualifizierter Mitarbeiter an den richtigen Stellen • Eliminierung einzelner Entwicklungsschritte durch Ausnutzung von
automatischen Dokumentationshilfen, Programmgeneratoren etc. • effizienter Einsatz von Tools und Entwicklungsumgebungen • Vermeidung mehrfacher Programmierarbeiten durch Einsatz moderner
Programmiermethoden und inkrementeller SW-Erstellung • Wiederverwendung von Komponenten aus einer Bibliothek Die letzten 3 Punkte werden durch die OOP unterstützt. Im Mittelpunkt der OOP steht die Erstellung und Wiederverwendung von Software-Bausteinen, die sich durch • einfachen und sicheren Entwurf
• verbesserte Test- und Wartbarkeit
• schnelle Anpassbarkeit
auszeichnen. Ein Beispiel für die Wiederverwendung ist die Einbindung existierender Klassenbibliotheken in das eigene Softwaresystem. Vorteile der OOP: • man kann Objekte benutzen, ohne sich über deren Implementierung
Gedanken machen zu müssen. • die Veränderung der Implementation eines Objekts zieht keine Änderung der
sie nutzenden Programme nach sich • Einsatz getesteter Komponenten • klare und übersichtliche Schnittstellen • Reduzierung der Komplexität durch den hierarchischen Aufbau der Klassen,
Variablen und Methoden.
1 Vgl. Jell/ von Reeken (1991), S. 17 f.
Objektorientierte Programmierung mit Visual Basic
4
1.2 Grundbegriffe der objektorientierten Programmierung
„Object-Oriented programming is not so much a coding technique as it is a code packaging technique, a way for code suppliers to encapsulate functionality for delivery to consumers“2 (Brad J. Cox)
Mit dieser Aussage hebt Cox die OOP von ihrem Sockel und betrachtet sie schlicht und einfach als Verpackungstechnik. Wenn man sich die Grundbegriffe der OOP ansieht, wird man sehen, daß man mit dieser Betrachtungsweise ziemlich weit kommt.
1.2.1 Objekt - object Ein Objekt im Sinne der OOP besteht aus • Methoden: Operationen zur Manipulation von Daten • Eigenschaften: Daten Ein Objekt ist ein abgeschlossener Speicherbereich mit einer genau definierten Datenstruktur (den Eigenschaften) und fest umrissenen Aufgaben. Die Kommunikation mit einem Objekt erfolgt über Nachrichten. Jedes Objekt weiß, auf welche Nachrichten es mit welchen Methoden zu reagieren hat. Benutzeraktionen wie z.B. ein Mausklick, lösen beim betreffenden Objekt ebenfalls eine Methode über eine vom Betriebsystem gesendete Nachricht aus. In diesem Fall spricht man von einem Ereignis.
1.2.2 Klasse - class Klassen sind Datentypdefinitionen, die die Struktur von Objekten (Eigenschaften) zusammen mit den darauf ausführbaren Operationen festlegen (Methoden). Klassen zeichnen sich dadurch aus, daß sie: • die Methoden gleichartiger Objekte speichern • die Namen der objektspezifischen Eigenschaften definieren • klassenspezifische Eigenschaften speichern Die Instanzen einer Klasse nennt man Objekte. Beim Anlegen einer Instanz (man spricht dabei von Instanzierung) wird die Klasse als Bauvorlage für das neue Objekt benutzt.
2 Brad J. Cox, Object Oriented Programming-An Evolutionary Approach, Addison Wesley, 1987
Objektorientierte Programmierung mit Visual Basic
5
1.2.3 Methoden In der OOP werden die Daten eines Objektes nicht direkt bearbeitet, sondern über Nachrichten dazu veranlasst. Die Methoden beschreiben, wie sich das Objekt beim Empfang einer solchen Nachricht zu verhalten hat. Die Methoden bestimmen also das Verhalten der Objekte.
1.2.4 Eigenschaften/Attribute - Properties Die Eigenschaften bilden die Datenstruktur eines Objektes. Sie speichern den Zustand des Objektes und können in der Regel nur über Methoden verändert werden. Es gibt Klassen- und Objekt-/Instanzeigenschaften. Bei den Klasseneigenschaften handelt es sich um gleichbleibende Eigenschaften für alle Objekte einer Klasse, während die Instanzeigenschaften unterschiedliche Ausprägungen für alle Objekte einer Klasse annehmen können. Beispiel: Die Zahl der Reifen bei der Produktion eines Autos ist immer 5, aber
die Zahl der Türen ist unterschiedlich und vom speziellen Auto abhängig.
1.2.5 Kapselung - encapsulation Durch die Kapselung erlangen die Daten eines Objektes ein Eigenleben. Statt die Daten über Funktionen/Prozeduren zu bearbeiten, erzeugt man Objekte, die selbständig agieren, ihre Methoden gegenseitig aufrufen und sich eher wie Objekte der realen Welt verhalten.
1.2.6 Vererbung - object inheritance3 Vererbung bedeutet, daß man Code innerhalb einer hierarchischen Struktur wiederverwenden kann. Bei der Vererbung übernimmt die untergeordnete Klasse die Datenstruktur (Eigenschaften) und das Verhalten (Methoden) von einer oder mehreren übergeordneten Klassen. Bsp.: Ein Kreuzfahrtschiff ist ein Motorschiff, ein Motorschiff ist ein Schiff Man kann bestimmte Eigenschaften und Methoden suchen, die alle Schiffe gemeinsam haben und diese zu einer Klasse Schiff zusammenfassen. Für die Klasse Motorschiff muss man nun diese in der Klasse Schiff definierten Eigenschaften und Methoden nicht erneut entwickeln, sondern man leitet die Klasse Motorschiff von Schiff ab. Damit „erbt“ die Klasse Motorschiff die Eigenschaften und Methoden von Schiff. Wenn man nun auf die Idee kommt ein Segelschiff zu bauen, kann man die Klasse Schiff wiederverwenden und spart sich damit enormen Entwicklungsaufwand. Aus Motorschiff und Segelschiff könnte man nun einen Motorsegler bauen. Dabei kann es zu Konflikten kommen, weil Motorschiff und Segelschiff einige Methoden und Eigenschaften gemeinsam haben.
3 inheritance(engl.) = Erbe, Erbschaft
Objektorientierte Programmierung mit Visual Basic
1.2.7 Polymorphismus - polymorphism Polymorphismus wird in der Literatur oft auch als dynamisches oder spätes Binden (late binding) bezeichnet. Polymorphie bedeutet, daß ein Objekt auf eine Nachricht richtig reagiert, sofern es die Nachricht kennt, wobei verschiedene Objekte unterschiedlich auf die Nachricht reagieren können. Weil erst zur Laufzeit bekannt ist, welche Methode (von welchem Objekt) ausgeführt werden soll, kann beim Linken (Binden) noch keine Zuordnung erfolgen, sondern erst, wenn die Nachricht ankommt. Deshalb nennt man den Vorgang auch spätes oder dynamisches Binden. Bsp.: Eine Prozedur Proz1 in Visual Basic soll als Parameter ein
Control (z.B. eine TextBox) erhalten.
a) Späte Bindung/late binding SUB Proz1(ctl AS CONTROL) . . END SUB • hier ist beim Kompilieren noch
nicht bekannt, welches Control (Object) benutzt wird.
• die Unterscheidung fällt erst zur Laufzeit.
• bei jedem Zugriff auf Properties und Methoden muss der Typ ermittelt und zugeordnet werden
b) frühe Bindung/early binding SUB Proz1(ctl AS TEXTBOX) . . END SUB • hier ist beim Kompilieren
bekannt, welches Control benutzt wird. Hier wird eindeutig ein Control vom Typ TextBox benötigt.
• zur Laufzeit wird nur geprüft, ob wirklich ein Control vom Typ TextBox übergeben wurde
• diese Variante ist schneller
1.2.8 Nachrichtenformat
Eine Nachricht hat folgendes Format:4
Zielobjekt Methode Parameter MS Berlin bremsen 10
Eine Methode wird demnach folgendermaßen aufgerufen/aktiviert:
Objekt.Aktion Parameter
Im Gegensatz dazu, der Prozeduraufruf bei der prozeduralen Programmierung:
Aktion Objekt,Parameter Genaugenommen ist bei diesem Aufruf das Objekt auch einer der Parameter, denn die prozedurale Programmierung arbeitet nicht mit Objekten.
„Prozeduren und Methoden“ in Kapitel 2
4 aus Jell/von Reeken S.20
6
Objektorientierte Programmierung mit Visual Basic
7
1.2.9 Prozeduren und Methoden5 Ein Vergleich zwischen dem Aufruf von Methoden in der OOP und dem Aufruf von Funktionen/Prozeduren in der prozeduralen Programmierung: In der prozeduralen Programmierung gibt man beim Prozeduraufruf an, was man machen will und übergibt der Prozedur als Parameter, worauf und wie die Operation ausgeführt werden soll. TuDies MitDiesem,AufDieseWeise In der OOP gibt man zuerst an, was bearbeitet werden soll und dann in Form der Methode, wie man etwas machen will. MitDiesem.Tudies AufDieseWeise Beispiel: PP: wachsen(Person1,10 cm) OOP: Person1.wachsen 10cm Je nach Kontext kann man einzelne Teile des Methodenaufrufs weglassen, wenn eindeutig ist, was gemeint ist: • In bestimmten Fällen ist das Objekt bekannt, dann ist
TuDies AufDieseWeise gleichbedeutend mit MirSelbst.TuDies AufDieseWeise
• Bei einigen Methoden ist bekannt, wie sie ausgeführt werden: MirSelbst.TuDies ‘AufDieUeblicheWeise
• Wenn beides bekannt ist, kann man auch TuDies alleine aufrufen.
5 Vgl. McKinney S.183 f.
Objektorientierte Programmierung mit Visual Basic
8
1.3 Prinzipien der Objektorientierung6 Abstraktion
Weil die Dinge der realen Welt für uns Menschen zu komplex sind, wählt man die relevanten Gemeinsamkeiten aus und läßt dabei unwichtiges außer acht. Die Wahl des richtigen Grades der Abstraktion bildet ein zentrales Problem bei der Entwicklung objektorientierter Systeme.
Einkapselung Ausführungen dazu in Kapitel 1.2.5 Kapselung - encapsulation
Hierarchie Um die Abstraktion verständlich zu machen, teilt man sie in verschiedene Ebenen ein. Die Anordnung der verschiedenen Abstraktionsebenen bildet dabei eine Hierarchie. Eine Abstraktion auf höherer Ebene generalisiert, während auf der unteren Ebene spezialisiert wird. Mit anderen Worten: Auf der oberen Ebene bildet man allgemeine Klassen, die man immer weiter verfeinert. Dabei werden die Eigenschaften und Methoden der oberen Klassen bis in die unteren weitervererbt.
Modularisierung Dieser aus der prozeduralen Programmierung stammende Begriff, beschreibt ein grundsätzliches Entwurfsprinzip eines Softwaresystems. Grundgedanke dabei ist die Aufteilung von Problemen in möglichst kleine Module, die unabhängig voneinander kompilierbar sind und mit den anderen Modulen durch eine lose Koppelung in Verbindung stehen.
6 Vgl. Schäfer, S. 16-18
Objektorientierte Programmierung mit Visual Basic
1.4 Verdeutlichung am Beispiel : Schiffe7
BOOTMethoden:beschleunigenbremsenankern
Eigenschaften:GeschwindigkeitAnkerzahlRadarSatellitennavigationHochseetauglichkeit
SegelbootMethoden:Segel setzenSegel bergenAbfallenAnluvenwenden
Eigenschaften:SegelflächeSegelanzahl
MotorbootMethoden:Motor einMotor ausSteuer rechtsSteuer links
Eigenschaften:Leistung
FrachterMethoden:beladenentladen
Eigenschaften:BRTLadung
PassagierdampferMethoden:P. einsteigenP. aussteigen
Eigenschaften:Anzahl Passagieremax. Anzahl P.
MotorseglerMethoden:Generator einGenerator aus
Eigenschaften:Generatorleistung
*
Abbildung 1 - Beispiel Klassenhierarchie Boote
*: mehrfache Vererbung bei Motorsegler: Motorsegler erbt von Motorboot und Segelboot die Eigenschaften/Methoden von Boot!
Problem: welche Eigenschaft/Methode ist z.B. bei OMotorsegler.bremsen8 gemeint?
Lösung: man erzeugt bei Motorsegler die geerbten Eigenschaften und Methoden neu und ruft dann explizit die gewünschten auf oder man ruft Omotorsegler.Motorboot.bremsen auf, falls die Sprache das zuläßt.
7 Vgl. Jell/von Reeken(1991), S. 27 ff. 8 Anmerkung: Omotorsegler steht für Objekt vom Typ Motorsegler
9
Objektorientierte Programmierung mit Visual Basic
Nach außen sieht z.B. der Frachter folgendermaßen aus:
FrachterMethoden:beschleunigenbremsenankern
Motor einMotor ausSteuer rechtsSteuer links
beladenentladen
Eigenschaften:GeschwindigkeitAnkerzahlRadarSatellitennavigationHochseetauglichkeit
Leistung
BRTLadung
Abbildung 2 - Klasse Frachter (Gesamtdarstellung)
In dieser Notation wurden die geerbten Eigenschaften und Methoden mit aufgenommen. Normalerweise wählt man eine Notation wie in „Abbildung 1 - Beispiel Klassenhierarchie Boote“ um keine redundanten Informationen in die Diagramme aufnehmen zu müssen. Außerdem erleichtert die vereinfachte Darstellung das Erlernen. Wenn man die Eigenschaften/Methoden einer Basisklasse kennt, braucht man diese nicht erneut für die abgeleiteten Klassen zu lernen. Dadurch wird auch sofort ersichtlich, wann eine Methode/Eigenschaft durch eine eigene ersetzt wurde, nämlich dann, wenn sie im Klassendiagramm auftaucht.
10
Objektorientierte Programmierung mit Visual Basic
11
2 Einführung in Visual Basic In diesem Kapitel werden die wichtigsten Grundbegriffe und die Datentypen von Visual Basic vorgestellt. Anschließend wird ein Beispielprogramm zur Veranschaulichung der Grundlagen entwickelt.
2.1 Grundbegriffe Im folgenden Teil werden die wichtigsten Grundbegriffe von Visual Basic 4.0 kurz erläutert.
Form Programm- und Dialogfenster werden in VB als Formen
bezeichnet. Formen nehmen Steuerelemente auf, welche frei plaziert werden können. Man kann jede Form mit einem Menü versehen. Formen werden in .FRM-Dateien gespeichert
MDI-Formen bilden einen Speziallfall. Sie dienen als Container für MDIChild-
Formen, welche der Unterstützung der Multiple Document Schnittstelle dienen. Jedes Programm kann max. eine MDI-Form besitzen, welche aber mehrere MDIChild-Formen aufnehmen kann. Ein Beispiel für eine MDI Anwendung ist Winword, welches mehrere Textfenster gleichzeitig zur Verfügung stellen kann.
Modul (oder auch Quellmodul) Module bilden eine Sammlung von
Konstantendefinitionen, Prozeduren und Funktionen, welche bei Bedarf programmglobal zur Verfügung stehen.
Klassenmodul
Ein K. enthält benutzerdefinierte Klassen. Im Klassenmodul werden die Eigenschaften und Methoden einer Klasse definiert. Klassen sind Programm- oder sogar systemglobal verfügbar. Auf Klassen wird im nächsten Kapitel im Zusammenhang mit der OOP genauer eingegangen.
Steuerelement/Custom Control
Bei Steuerelementen handelt es sich um Oberflächenelemente, bzw. Objekte, die der Werkzeugleiste der VB-Entwicklungsumgebung entnommen und frei in einer Form plaziert werden können. Es gibt Steuerelemente, die direkt von VB zur Verfügung gestellt werden und welche, die durch so genannte OCX-Dateien oder OLE-Server bereitgestellt werden. Es gibt sichtbare und unsichtbare Steuerelemente. Die unsichtbaren Steuerelemente (z.B. Timer) sind nur beim Entwurf sichtbar.
Projekt Form-, Modul-, Klassen- und Steuerelementdateien, die zu
einem Programm gehören, werden zu einem Projekt zusammengefasst. Projekte werden in einer .VBP-Datei gespeichert.
Objektorientierte Programmierung mit Visual Basic
Property Die Properties (Eigenschaften) bestimmen das Aussehen und
Verhalten der Steuerelemente und dienen als Schnittstelle zu den Daten des Steuerelements. Es gibt Properties, die nur zur Laufzeit und welche die nur beim Programmentwurf zur Verfügung stehen. Ebenso gibt es Properties, die schreibgeschützt sind.
Werkzeugleiste
Die Werkzeugleiste (Toolbox) stellt die Steuerelemente zur Verfügung.
Zeiger PictureBox
Label TextBox
Frame Button
CheckBox OptionButton
ComboBox ListBox
HScrollBar VScrollBar
Timer DriveListBox
DirListBox FileListBox
Shape
Image Data
Line
OLE
Abbildung 3 - Visual Basic Werkzeugleiste
Ereignis/Event Ein E. wird durch eine Benutzeraktion (z.B. Mausklick) oder
durch das System (z.B. Timer) ausgelöst. Ereignisprozeduren
Die E. werden beim Auftreten eines Events automatisch aufgerufen. In den Ereignisprozeduren reagiert man auf Benutzer- oder Systemaktionen. Ein Beispiel ist die E. Form_Load, die beim Laden einer Form aufgerufen wird.
Ereignisorientierte Programmierung
Einige Funktionen unter VB stehen nur im Zusammenhang mit Objekten zur Verfügung. Diese Anweisungen, welche zu Objekten gehören, werden Methoden genannt. Man kann z.B. mit Image1.Refresh das Objekt Image1 (z.B. eine PictureBox) dazu bringen, seinen Inhalt neu zu zeichnen (Refresh). Refresh ist eine Methode, welche durch fast alle Steuerelemente unterstützt wird.
12
Objektorientierte Programmierung mit Visual Basic
Methoden Methoden sind die Prozeduren und Funktionen, die nur für
die Objekte einer Klasse zur Verfügung stehen. Ereignisorientierte Programmierung Einführung in die OOP OOP mit VB
Editorfenster Im Editorfenster gibt man prozedurorientiert den Quelltext
ein. Neben dem Prozedurteil enthält das Editorfenster auch für jedes Modul/jede Form einen Deklarationsteil, in dem Funktionen, Konstanten und Variablen angelegt werden können.
Twips Twips ist die interne Maßeinheit von Visual Basic zur
Darstellung von Position und Größe der Steuerelemente. 567 Twips entsprechen einem Zentimeter und ein Zoll entspricht 1440 Twips. Windows verwendet für Maßangaben Pixel. Mit den Eigenschaften TwipsPerPixelX und TwipsPerPixelY kann man die Maßangaben umrechnen.
Debugger Beim Debugger handelt es sich um ein Programmteil, mit
dem ein Programm auf Fehler und eine korrekte Programmausführung getestet werden kann. Der Debugger erlaubt das Überwachen von Variablen, das Setzen von Haltepunkten und eine schrittweise Ausführung des Quelltextes.
Sub Main() Jedes Programm, das keine Formen besitzt, muss eine
Startprozedur Sub Main besitzen. Man kann Sub Main aber auch für Programme mit Formen benutzen, um z.B. umfangreiche Vorarbeiten zu erledigen.
13
Objektorientierte Programmierung mit Visual Basic
14
2.2 Datentypen Datentyp Speicherbedarf Wertebereich Byte
1 Byte
0 bis 255
Boolean
2 Bytes
True oder False
Integer
2 Bytes
-32.768 bis 32.767
Long
4 Bytes
-2.147.483.648 bis 2.147.483.647
Single einfache Genauigkeit
4 Bytes
neg.: -3,402823E38 bis -1,401298E-45 pos.: 1.401298E-45 bis 3.402823E38
Double doppelte Genauigkeit
8 Bytes
neg.: -1.79769313486232E308 bis -4,94065645841247E-324 pos.: 4,94065645841247E-324 bis 1.79769313486232E308
Currency
8 Bytes
-922.337.203.685.477,5808 bis 922.337.203.685.477,5807
Date
8 Bytes
1. Jan 100 bis 31. Dez 9999
Object
4 Bytes
bel. Verweis auf ein Object
String (feste Länge)
10 Bytes plus Textlänge
Win32 : max. 2 Milliarden Zeichen Win16 : ca. 65.400
String (variable Länge)
Textlänge
Win32 : max. 2 Milliarden Zeichen Win16 : ca. 65.400
Variant (mit Zahlen)
16 Bytes
Numerische Werte wie Double
Variant (mit Zeichen)
22 Bytes plus Textlänge
Wie variable Strings
Type Benutzerdefiniert
variabel
je nach Datentypen
Datenfelder 20 Bytes + 4 Bytes für jede Dimension + die Bytes für die Daten
Tabelle 1 - Visual Basic Datentypen9
9 Vgl. Visual Basic Onlinedokumentation
Objektorientierte Programmierung mit Visual Basic
16
2.3 Gültigkeitsbereiche der Daten10 VB unterstützt globale, formglobale, lokale und statische Variablen. Der Gültigkeitsbereich und ihre Lebensdauer ist vom Ort der Deklaration abhängig. Zusätzlich kann man den Gültigkeitsbereich über die Schlüsselworte PRIVATE und PUBLIC und die Lebensdauer mit dem Schlüsselwort STATIC festlegen. Globale Variablen sind in allen Formen und Quellmodulen eines Anwendungsprogramms bekannt. Alle Variablen, die im Deklarationsteil eines Quellmoduls eingeführt werden, sind automatisch programmglobal. Um in einem Modul, welches eine lokale Variable mit dem gleichen Namen wie eine globale Variable enthält, auf die globale Variable zuzugreifen, muss man den Modulnamen mit angeben. MODUL.VARIABLE Man sollte Modulvariablen, welche nicht global zur Verfügung stehen sollen, nicht mit DIM deklarieren, sondern mit PRIVATE. Wenn man dies nicht tut, kommt es später unweigerlich zu Wechselwirkungen. Formglobale Variablen werden im Deklarationsteil einer Form deklariert. Von anderen Modulen und Formen kann nicht auf formglobale Variablen zugegriffen werden. Damit sind formglobale Variablen nur in der Form bekannt, in der sie definiert wurden. Lokale Variablen sind lediglich innerhalb der Prozedur, in der sie eingeführt werden, bekannt. Variablen gleichen Namens in verschiedenen Prozeduren beeinflussen sich nicht. Lokale Variablen bleiben zwischen Prozeduraufrufen nicht bestehen. Soll dies der Fall sein, so ist die Deklaration als statische Variable nötig. Statische Variablen sind lokale Variablen, die dauerhaft im Speicher bleiben, d.h. sie behalten ihren Wert zwischen zwei Prozeduraufrufen. Globale Modulvariablen sind immer vom Typ STATIC, d.h. sie bleiben solange im Speicher, wie das Modul im Speicher ist. Man kann Funktionen und Sub-Prozeduren mit dem Schlüsselwort Static versehen. Damit werden alle in der Funktion/Prozedur deklarierten Variablen automatisch Static. McKinney: „Verwenden Sie Static für lokale Variablen mit unbegrenzter Lebensdauer. Deklarieren Sie niemals Funktionen als Static, weil es die Bedeutung von DIM verändert! Außerdem werden Sie davon Warzen bekommen“11
10 Vgl. McKinney und Maslo 11 McKinney S. 45
Objektorientierte Programmierung mit Visual Basic
17
2.4 Parameterübergabe Übergabe von Variablen als Referenz (call by reference) In Visual Basic werden Variablen standardmäßig als Referenz übergeben, d.h. man kann in einer Prozedur den Wert einer Variablen ändern. Wenn die Prozedur eine Referenz auf einen bestimmten Datentyp erwartet, kann man ihr andere Datentypen durch die Verwendung eines Ausdrucks übergeben. Der einfachste Typ eines Ausdrucks ist die Klammer, d.h. man setzt einfach Klammern, um die Variable um eine Konvertierung zu erzwingen. X = FUNC( (Y) ) hier wird Y autom. in den richtigen Datentyp konvertiert. Übergabe von Variablen als Wert (call by value) Wenn man Variablen als Wert übergeben will, muss man bei der Deklaration der Prozedur das Schlüsselwort BYVAL verwenden. SUB proz1(BYVAL x AS INTEGER) ... END SUB Verwenden optionaler Argumente Man kann Parameter einer Prozedur als optional deklarieren, wenn man das Schlüsselwort OPTIONAL verwendet. Mit der Funktion ISMISSING kann man prüfen, ob der optionale Parameter angegeben wurde oder nicht. SUB proz2(x AS INTEGER, OPTIONAL y) ... IF NOT ISMISSING(y) THEN ‘ y wurde übergeben .... ELSE ‘ y wurde nicht übergeben .... ENDIF .... END SUB
Objektorientierte Programmierung mit Visual Basic
18
2.5 Namenskonventionen Für die Bildung der Namen unter VB sind einige Regeln zu beachten:
• Sie müssen mit einem Buchstaben beginnen (keine Sonderzeichen) • Sie dürfen keine Punkte oder Typkennzeichen enthalten • Die Namen von Variablen, Konstanten und Prozeduren können maximal 255
Zeichen lang sein • Die Namen von Steuerelementen, Formen, Klassen und Modulen können
höchstens 40 Zeichen lang sein • Die Namen dürfen nicht mit eingeschränkten Schlüsselworten identisch sein Microsoft schlägt folgende Präfixe für die Namen von Steuerelementen vor: Objekt Präfix Beispiel Anzeige img imgIcon Befehlsschaltfläche cmd cmdCancel Bezeichnungsfeld lbl lblHelpMessage Bildfeld pic picDiskSpace Dateilistenfeld fil filSource Daten dat datBiblio Datengebundene Tabelle dbg dbgPrices Datengebundenes Kombinationsfeld dbc dbcEnglish Datengebundenes Listenfeld dbl dblPolicyCode Figur (Kreis, Quadrat, Oval, Rechteck, abgerundetes Rechteck und abgerundetes Quadrat)
shp shpCircle
Form frm frmFileOpen Horizontale Bildlaufleiste hsb hsbVolume Kombinationsfeld cbo cboEnglish Kontrollkästchen chk chkReadOnly Laufwerklistenfeld drv drvTarget Linie lin linVertical Listenfeld lst lstPolicyCodes Menü mnu mnuFileOpen OLE-Container ole oleObject1 Optionsfeld opt optFrench Rahmen fra fraLanguage Tabelle grd grdPrices Textfeld txt txtGetText Vertikale Bildlaufleiste vsb vsbRate Verzeichnislistenfeld dir dirSource Zeitgeber tmr tmrAlarm
Tabelle 2 - Namenskonventionen für Objekte12
12 aus Visual Basic Onlinehilfe, Kapitel 3
Objektorientierte Programmierung mit Visual Basic
Weiterhin gibt es eine so genannte Ungarische Notation für Visual Basic13: Datenzugriffsobjekt Präfix Beispiel
Container con conReports Database db dbAccounts DBEngine dbe dbeJet Document doc docSalesReport Field fld fldAddress Group grp grpFinance Index idx idxAge Parameter prm prmJobCode QueryDef qry qrySalesByRegion Recordset rec recForecast Relation rel relEmployeeDept TableDef tbd tbdCustomers User usr usrNew Workspace wsp wspMine
Tabelle 3 - Datenzugriffsobjekte
Menübefehlssequenz Menüzugriffsname Datei, Öffnen mnuDateiÖffnen Datei, E-Mail senden mnuDateiEMailSenden Datei, Fax senden mnuDateiFaxSenden Format, Zeichen mnuFormatZeichen Hilfe, Inhalt mnuHilfeInhalt
Tabelle 4 – Regeln für Menüs
Datentyp Präfix Beispiel Boolean bln blnGefunden Byte byt bytRasterdaten Collection-Objekt col colWidgets Currency cur curUmsatz Date (Time) dtm dtmStart Double dbl dblToleranz Error err errBestellnummer Integer int intMenge Long lng lngDistanz Object obj objAktuell Single sng sngDurchschnitt String str strDateiname Benutzerdefinierter Typ (user-defined type) udt udtPersonal Variant vnt vntPrüfsumme
Tabelle 5 – Regeln für Variablen
19
13 Quelle: http://www.it-academy.cc/content/article_browse.php?ID=995
Objektorientierte Programmierung mit Visual Basic
20
2.6 wichtige Sprachelemente von VB Hier werden die wichtigsten Sprachelemente von Visual Basic vorgestellt. Die Aufstellung ist nur ein kleiner Ausschnitt aus den Fähigkeiten von Visual Basic und bildet den Teil der Sprache, den man beherrschen sollte, bevor man in die fortgeschrittenen Themen wie Datenbankprogrammierung, API-Aufrufe etc. einsteigen kann.
2.6.1 Schleifen-/ Entscheidungs- und Blockanweisungen Hier werden die Schleifen-, Block-, Entscheidungs- und Kontrollanweisungen von Visual Basic vorgestellt. Dabei wird bewusst auf GOTO und GOSUB verzichtet, obwohl VB diese Kommandos anbietet! Seine Berechtigung hat GOTO nur bei der Fehlerbehandlung, die hier nicht berücksichtigt wird.
DO ... LOOP Anweisung Wiederholt einen Block mit Anweisungen, solange eine Bedingung True ist oder bis eine Bedingung True wird.
Do [{While | Until} Bedingung] [Anweisungen] [Exit Do] [Anweisungen] Loop
ODER:
Do [Anweisungen] [Exit Do] [Anweisungen] Loop [{While | Until}Bedingung]
WHILE: wiederhole solange TRUE UNTIL wiederhole bis Bedingung TRUE wird EXIT DO verlässt die Schleife sofort. Bei verschachtelten Schleifen wird zur
äußeren Schleife zurückgekehrt (Die Benutzung von EXIT DO zeugt von schlechter Programmierpraxis)
WHILE ... WEND Anweisung Führt eine Reihe von Anweisungen aus, solange eine gegebene Bedingung True ist.
While Bedingung [Anweisungen] Wend
Tip Do...Loop stellt eine strukturiertere und flexiblere Möglichkeit zur Implementierung von
Schleifen dar.
Objektorientierte Programmierung mit Visual Basic
21
FOR ... NEXT Anweisung Wiederholt mehrmals eine Reihe von Anweisungen, bis ein Schleifenzähler einen bestimmten Wert erreicht.
For Zähler = Anfang To Ende [Step Schritt] [Anweisungen] [Exit For] [Anweisungen] Next [Zähler]
EXIT FOR dient dem Verlassen der Schleife vor Erreichen des Wertes Ende für Zähler!
FOR EACH ... NEXT Anweisung Wiederholt eine Reihe von Anweisungen für alle Elemente eines Datenfeldes oder einer Auflistung.
For Each Element In Gruppe [Anweisungen] [Exit For] [Anweisungen] Next [Element]
IF ... THEN ... ELSE ... ENDIF Anweisung Wertet einen Ausdruck aus und führt in Abhängigkeit vom Ergebnis eine Reihe von Anweisungen aus.
If Bedingung Then Anweisungen [Else SonstAnw ] Sie können auch die folgende flexiblere Syntax verwenden:
If Bedingung Then [Anweisungen] [ElseIf Bedingung-n Then [SonstWennAnw]] . . . [Else [SonstAnw]] End If
Hinweis Die einzeilige Syntax erlaubt die Ausführung mehrerer Anweisungen
als Ergebnis einer If...Then-Entscheidung. Dazu müssen sich aber alle Anweisungen in einer Zeile befinden und durch Doppelpunkte voneinander getrennt sein, wie in der folgenden Zeile:
If A > 10 Then A = A + 1 : A = A + A : C = C + B Tip Select Case ist in der Regel in Situationen sinnvoller, in denen
abhängig von der Auswertung eines einzelnen Ausdrucks mehrere Entscheidungen getroffen werden sollen.
Objektorientierte Programmierung mit Visual Basic
22
SELECT CASE Anweisung Führt eine von mehreren Anweisungsgruppen aus, abhängig vom Wert eines Ausdrucks.
Select Case Testausdruck [Case Ausdruckliste-n [Anweisungen-n]] . . . [Case Else [SonstAnw]] End Select
Sie können in jedem Case-Abschnitt mehrere Ausdrücke oder Bereiche verwenden, wie zum Beispiel in der folgenden Zeile:
Case 1 To 4; 7 To 9; 11; 13; Is > MaxZahl Case "Salatblatt", "Banane" To "Birne", Testelement
Beispiel Dieses Beispiel verwendet die Select Case-Anweisung, um den Wert einer Variablen auszuwerten. Der zweite Case-Abschnitt enthält den Wert der ausgewerteten Variablen, und nur die zugehörige Anweisung wird ausgeführt.
Zahl = 8 ' Variable initialisieren. Select Case Zahl ' Zahl auswerten. Case 1 To 5 ' Zahl von 1 bis 5. Debug.Print "Zahl von 1 bis 5" ' Das ist der einzige ' Case-Abschnitt, ' der True ergibt. Case 6, 7, 8 ' Zahl von 6 bis 8. Debug.Print "Zahl von 6 bis 8" Case Is > 8 And Zahl < 11 ' Zahl ist 9 oder 10. Debug.Print "Größer als 8" Case Else ' Andere Werte. Debug.Print "Außerhalb von 1 bis 10" End Select
Objektorientierte Programmierung mit Visual Basic
23
IIF und Choose: In bestimten Einsatzfällen kann man die Kontrollanweisungen ‘IF’ durch ‘IIF’ und ‘Select Case’ durch ‘Choose’ ersetzen. Aber das Laufzeitverhalten solche Konstrukte ist miserabel. • IIF benutzt man für Wertzuweisungen in Abhängigkeit einer Bedingung
SYNTAX:
Wert = IIF(Bedingung, WertWennWahr, WertWennFalsch)
BEISPIEL:
OK=IIF(x > 100, 1, 10) entspricht IF x > 100 THEN OK = 1 ELSE OK = 10 ENDIF
• CHOOSE benutzt man z.B. zur Ermittlung der Bedeutung eines ordinalen Wertes
SYNTAX:
Wert = CHOOSE(Index, Auswahl1, Auswahl2, ..., Auswahln)
BEISPIEL: Farbe = CHOOSE ( Farbindex, “rot“, “grün“, “gelb“, “blau“) entspricht SELECT CASE Farbindex
CASE 1 Farbe = “rot“ CASE 2
Farbe = “grün“ CASE 3
Farbe = “gelb“ CASE 4
Farbe = “blau“ CASE ELSE
Farbe = ““ END SELECT
Objektorientierte Programmierung mit Visual Basic
24
Verlassen von Kommandostrukturen Man kann Sub-Prozeduren oder Funktionen mit EXIT SUB bzw. EXIT FUNCTION verlassen. PRIVATE SUB Form_Click() ..... IF hugo = 18 THEN ....
EXIT SUB ‘ unsaubere Programmierpraxis i.S.d. proz. Prog. ENDIF ..... END SUB Sonstige Sprachkonstrukte: • mehrere Kommandos in einer Zeile
Um mehrere Kommandos in einer Codezeile unterzubringen, muss man diese jeweils mit einem Doppelpunkt trennen Beispiel: a=x : x=y : y=a
• Zeilenfortsetzung
Man kann eine Codezeile auf mehrere aufteilen. Dazu muss man die Trennstellen mit einem _ als Fortsetzungszeichen kennzeichnen. Beispiel: DEBUG.PRINT “test test test “ _ & “test2 test2 test2“
• Kommentare Kommentare werden mit ‘ oder dem Schlüsselwort REM eingeleitet. REM ist veraltet und wird nur noch aus Kompatibilitätsgründen akzeptiert.
Anweisung ‘ Kommentar
Objektorientierte Programmierung mit Visual Basic
25
2.6.2 Rechenoperatoren Rang Operator Beschreibung 1 ^ Exponent 2 - Negation 3 *
/ Multiplikation Division
4 \ Ganzzahldivision 5 MOD Modulo 6 +
- Addition Subtraktion
7 & Zeichenkettenverkettung
Tabelle 6 - Rechenoperatoren
2.6.3 Vergleichsoperatoren Operator Beschreibung = gleich > größer < kleiner <= kleiner gleich >= größer gleich <> ungleich Like Zeichenkettenvergleich
Tabelle 7 - Vergleichsoperatoren
2.6.4 Verknüpfungsoperatoren Rang Operator Beschreibung 1 NOT Logische Negation 2 AND Logisches UND 3 OR Logisches ODER 4 XOR Exklusives ODER 5 EQV Logische Äquivalenz 6 IMP Implikation 7 IS Vergleich von
Objektvariablen Tabelle 8 - Verknüpfungsoperatoren
2.6.5 Numerische Funktionen Funktion Beschreibung Beispiel ABS(ZAHL) berechnet den Absolutwert einer Zahl ABS(50.3) = 50,3
ABS(-50.3) = 50,3 ATN(Zahl) TAN(Zahl) SIN(Zahl) COS(ZAHL)
trigon. Funktionen. VB rechnet mit Winkelangaben in Grad. -Pi/2 bis Pi/2 !!
CDBL(Ausdruck)
wandelt den Ausdruck/String in eine Zahl vom Datentyp Double um. Analog dazu gibt es unter anderem:
CDBL(“123,23“)=123,23 CDBL(“123.23“)=12323
Objektorientierte Programmierung mit Visual Basic
26
CINT, CSNG, CLNG, CCUR DATE aktuelles Datum DAY(Datum) Tag des Monats. Anlog dazu
MONTH, YEAR, WEEKDAY
HOUR(Uhrzeit) Stunde. Analog dazu MINUTE, SECOND
NOW aktuelles Datum und aktuelle Zeit SGN(Zahl) ermittelt das Vorzeichen einer Zahl SGN(-99) = -1
SGN(99) = 1 SGN(0) = 0
HEX$(zahl) ermittelt den Hexadezimalen Wert einer Zahl
HEX$(49152)=“C000“
OCT$(zahl) ermittelt den oktalen Wert einer Zahl OCT$(8)=“10“ TIME aktuelle Zeit (Datentyp DATE) VAL(String) gibt den Wert der im String
enthaltenen Zahl zurück! VAL erkennt nur den . als Dezimalpunkt! Wenn man das in Deutschland übliche Komma benutzen will, sollte man CDBL() benutzen !
VAL(“123,23“) = 123 VAL(“123.23“) = 123,23
Tabelle 9 - einige exemplarische numerische Funktionen
Um bei der Angabe von Werten in einem Programm andere Zahlensysteme zu verwenden, sind folgende Formate zulässig: Hexadezimale Zahlen: &Hxxx Bsp.: &HC000 = 49152 Oktale Zahlen: &Oxxx Bsp.: &O123 = 83 Wann benutzt Visual Basic das länderspezifische Datenformat (mit Dezimalkomma) und wann die in der Datenverarbeitung übliche Punktnotation? Ausgabe von Zahlen länderspezifisches Format Strings mit num. Inhalt keine durchgängige Behandlung der Daten a) z.B. VAL Punktnotation b) z.B. CDBL länderspezifisches Format numerische Konstanten Punktnotation
Objektorientierte Programmierung mit Visual Basic
27
2.6.6 Stringfunktionen Funktion Beschreibung Beispiel CSTR(zahl) wie STR, nur unter Beachtung der
Formateinstellung für das jeweilige Land. (z.B. Dezimalkomma)
CHR(charcode) wandelt ein Zeichencode von 0-255 in ein ASCII-Zeichen um
chr(65) = “A“
CURDIR([drive]) aktuelles Verzeichnis ermitteln. FORMAT die Format Funktion stellt umfangreiche
Formatier- und Umwandlungsmöglichkeiten zur Verfügung
INSTR([start, ]string1, string2[, compare])
gibt die Position des ersten Auftretens einer Zeichenfolge innerhalb einer anderen zurück
LEFT(string, length) gibt den linken Teil eines Strings zurück LEN(string) gibt die Länge des Strings zurück LTRIM(string) RTRIM(string) TRIM(string)
gibt Zeichenfolge ohne führende (LTRIM), nachfolgende (RTRIM) oder weder führende noch nachfolgende (TRIM) Leerzeichen zurück
LTRIM(“ aa “)=“aa “ RTRIM(“ aa “)=“ aa“ TRIM(“ aa “)=“aa“
MID(string, start [, length])
gibt Ausschnitt aus einem String zurück
RIGHT(string, length) gibt den rechten Teil eines Strings zurück
STR(zahl) wandelt zahl in einen String um STR(123) = “123“ STRCOMP(string1, string2[, compare])
vergleicht zwei Strings
UCASE(string) gibt eine Zeichenfolge zurück, in der string in Großbuchstaben umgewandelt wurde. Analog dazu LCASE für Kleinbuchstaben !
Tabelle 10 - einige exemplarische Stringfunktionen
Jede dieser Funktionen gibt es in drei verschiedenen Versionen 1. MID()=... diese Version arbeitet mit dem Datentyp Variant, d.h. die Argumente
sind Variant und das Ergebnis ist Variant. Zur Laufzeit bedeutet das Geschwindigkeitseinbußen gegenüber den String Versionen.
2. MID$()... diese Version arbeitet mit dem Datentyp String. Hier sind Parameter
und Ergebnisse vom Datentyp String. 3. MIDB()... diese Version arbeitet mit Byte Datenfeldern. Leider kann man in der
aktuellen Version von VB keine binären Daten in Strings speichern, weil VB die Daten in Strings konvertiert. (VB verwendet intern UNICODE, statt ASCII bzw. ANSI).
Für den normalen Gebrauch sollte man in der Regel mit der 2. Variante arbeiten.
Objektorientierte Programmierung mit Visual Basic
28
2.6.7 wichtige Properties Property Sinn BackColor Hintergrundfarbe Borderstyle Rahmenart Caption vom Control angezeigter fester Text Enabled Steuerelement aktiv oder nicht Font Schriftart Height Höhe des Controls in TWIPS Index Index für Control innerhalb eines Steuerelementfeldes Left linke Position des Controls MousePointer
welcher Mousecursor soll beim betreffenden Control angezeigt werden
MultiLine Editbox erlaubt die Eingabe von mehreren Zeilen Name Name des Controls TabIndex Position innerhalb der TAB Sprungreihenfolge TabStop Soll Control mit Tab angesprungen werden ? Tag zum Zwischenspeichern von Daten Text ähnlich, Caption, aber editierbar Top obere Position des Controls Value Wert von OptionButton oder Checkbox. Enthält TRUE oder
FALSE Visible Steuerelement sichtbar oder nicht Width Breite des Controls WindowState Status der Form: minimiert, maximiert, normal
Tabelle 11 - wichtige Properties
2.6.8 wichtige Ereignisse Ereignis Beschreibung Click Mausklick auf dem Control Dblclick Doppelklick auf dem Control GotFocus Control hat den Focus erhalten. LostFocus Control mußte Focus abgegeben KeyUp, Keypress, KeyDown Eine Taste wurde gedrückt, losgelassen Load wird beim Laden einer Form aufgerufen Unload wird beim Entladen der Form aufgerufen QueryUnload wird vor dem Entladen einer Form
aufgerufen und kann das Entladen verhindern
MouseDown, MouseUp, MouseMove
reagieren auf Maustaste drücken, loslassen und auf Mausbewegungen
Resize wird bei einer Größenveränderung erzeugtPaint wird beim Zeichnen einer Form erzeugt,
abhängig vom Status der AutoRedraw Eigenschaft
Tabelle 12 - wichtige Ereignisse
Objektorientierte Programmierung mit Visual Basic
29
2.6.9 einige Kommandos, die man kennen sollte DIM/PRIVATE/PUBLIC/STATIC/CONST Deklaration von Prozeduren,Variablen und Konstanten REDIM zum Verändern der Dimension eines Arrays MSGBOX bringt eine Messagebox für wichtige Meldungen INPUTBOX eine Eingabebox für einfache Eingaben DEBUG.PRINT gibt einen Text in das Testfenster aus (wird zum Testen von
Programmen verwendet) object.CLS Die CLS-Methode dient zum löschen des Inhalts einer Form,
PictureBox oder Imagebox. Ohne Objektangabe löscht CLS die aktuelle Form.
DOEVENTS gibt WINDOWS die Zeit andere Aufgaben abzuarbeiten, bevor es mit dem VB-Programm weitermacht. Für zeitintensive Schleifen, um das System nicht lahmzulegen. (in WIN95/NT theor. nicht mehr nötig)
Die Ermittlung der Syntax dieser Kommandos ist eine gute Übung, um die mächtige Online Dokumentation von Visual Basic zu testen. Es kann nicht der Sinn einer Einführung sein, alle Kommandos zu erklären bzw. aufzuzählen. Selbst erfahrene Visual Basic Programmierer benutzen nur einen Teil der von VB zur Verfügung gestellten Kommandos, Funktionen, Methoden und finden beim Durchblättern der Dokumentation regelmäßig neue Features, die nützlich sind.
Objektorientierte Programmierung mit Visual Basic
30
2.7 Beispiel- und Testprogramme
2.7.1 das erste Programm : Gewichtsumrechnung Ziel: Ein Programm zur Umrechnung von g oder kg als Eingabewert in g, kg, t,
Unze und Pfund Formeln: g:=kg*1000 kg:=g/1000 t:=kg/1000
Pfund:=kg*2 Unze:= g/30 Dazu benötigen wir : • eine Form: frmMain
• zwei Frames: fraEingabe, fraAusgabe • ein Eingabefeld: editEingabe
• je ein OptionButton zur Auswahl von g und kg, für die eingegebene Zahl.
Die OptionButtons sollen ein Steuerelementfeld bilden. Index 0 steht für g, Index 1 für kg OptEinheit()
• je ein Ausgabefeld (Label) für jedes der auszugebenden Gewichte zusammengefaßt in einem Steuerelementfeld (=Zusammenfassung mehrerer Steuerelemente in einem Array) lblAusgabe() 0 = g / 1= kg / 2 = t / 3 = Pfund / 4 = Unzen
• je ein Button Berechnen und Ende (evtl. auch noch einer für About) btnCalc, btnEnde (, btnAbout)
• ein Label für die Überschrift lblTitel
Objektorientierte Programmierung mit Visual Basic
So soll das fertige Programm aussehen:
Abbildung 4 - Bildschirmphoto Beispielprogramm 1
Hinweise: • mit Unload Me wird die aktuelle Form entladen • das Programm wird beendet, indem man die letzte Form entlädt. Man kann
auch die Anweisung END benutzen, dann werden aber keine Aufräumarbeiten erledigt, was später bei Datenbankanwendungen zu Datenverlusten führen kann.
• Steuerelementfelder erzeugt man, indem man mehreren Steuerelementen eines Typs den gleichen Namen gibt. Unterschieden werden sie über ihren Index. Den Ereignisprozeduren solcher Steuerelementfelder wird der Index als Parameter übergeben.
• Stringverkettungen führt man mit & durch a = b & c. Man konnte früher auch + verwenden, aber VB versucht nun bei + den Inhalt mathematisch zu addieren, was nicht erwünscht ist.
• Der Code der Ereignisprozedur CLICK steht in SUB Controlname_CLICK(). In der Prozedur kann man auf Mausklicks reagieren
31
Objektorientierte Programmierung mit Visual Basic
32
Anleitung zum „Bau“ des ersten Programms 1. Schritt: Konstruktion der Oberfläche • Datei/Neues Projekt • die Properties der leeren Form im Eigenschaftsfenster einstellen:
Name: frmMain Caption: Das erste VB Programm • ein Label für den Titel einfügen und dessen Eigenschaften bearbeiten
Name: lblTitel Caption: Gewichtsumrechnung Font: z.B. ARIAL, Underline, Fett, 20 Punkte
• ein Frame für die Eingabe Name: fraEingabe Caption: Eingabe: • eine EditBox für die Eingabe der Gewichte
Name: editEingabe Maxlength 10
• ein Label für die Beschriftung des Eingabefeldes Name: label1 Caption: Wert:
• ein Steuerelementefeld bestehend aus 2 OptionButtons Name: OptEinheit Index 0 Caption: g Value: true Index 1 Caption: kg
• ein Frame für die Ausgabe Name: fraAusgabe Caption: Ausgabe: Visible: false • ein Steuerlementefeld bestehend aus 5 Labels
Name: lblAusgabe
Index 0 1 2 3 4 Caption g kg t Pfund Unze
n
• ein CommandButton für Berechnen Name: btnCalc Caption: &Berechnen
• ein CommandButton für Ende Name: btnEnde Caption: &Ende
Objektorientierte Programmierung mit Visual Basic
33
2. Schritt: der Code
Private Sub btnCalc_Click()
Dim gramm As Double Dim kilo As Double Dim tonne As Double Dim pfund As Double Dim unze As Double
If optEinheit(0) Then
gramm = VAL(editEingabe) kilo = gramm / 1000
Else kilo = VAL(editEingabe) gramm = 1000 * kilo
End If tonne = kilo / 1000 unze = gramm / 30 pfund = kilo * 2
lblAusgabe(0) = Format$(gramm, "####0.000") & " g" lblAusgabe(1) = Format$(kilo, "####0.000") & " kg" lblAusgabe(2) = Format$(tonne, "####0.000") & " t" lblAusgabe(3) = Format$(pfund, "####0.000") & " Pfund" lblAusgabe(4) = Format$(unze, "####0.000") & " Unze(n)"
fraAusgabe.visible = true
End Sub Private Sub btnEnde_Click()
Unload Me End Sub
Objektorientierte Programmierung mit Visual Basic
2.7.2 Erweiterung um ein Menü
Abbildung 5 - Menüeditor
Im zweiten Schritt fügen wir in unser kleines Programm ein Menü ein. Dazu starten wir den Menü-Editor mit Ctrl-M und geben folgende Daten ein:
Caption Name Index &Menü mnuMain &Berechnen mnuMainItem 10 - mnuMainItem 20 &Programm beenden
mnuMainItem 30
Tabelle 13 - Menüstruktur für Beispiel 2
Mit - wird eine sogenannte Separator Linie in das Menü eingefügt! Das & im Caption bewirkt, das der nachfolgende Buchstabe als HotKey funktioniert Code: in mnuMainItem_Click(..):
SELECT CASE Index CASE 10 btnCalc_Click CASE 30 btnEnde_Click END SELECT
34
Objektorientierte Programmierung mit Visual Basic
2.7.3 PicView - Dateiauswahl Als 3. Beispiel dient ein Betrachter für ICO, BMP und WMF-Dateien. Dazu benötigen wir die Steuerelemente DirListBox, DriveListBox, FileListBox und Image. Der Bildschirmaufbau wird dabei folgendermaßen aussehen:
Image1
btnEnde
File1
Drive1Dir1
Abbildung 6 - Bildschirmphoto: Entwurf PicView
Bauanleitung: 1. Datei/Neues Projekt 2. Form1 mit dem Eigenschaftsfenster umbenennen:
Form1.NAME auf „frmMain“ setzen. 3. frmMain.CAPTION auf “PicView“ setzen 4. DirListBox erzeugen (Als Name wird Dir1 autom. vergeben) 5. DriveListBox erzeugen (autom. Drive1) 6. FileListBox erzeugen (autom. File1) 7. File1.PATTERN auf “*.ICO;*.WMF;*,BMP“ setzen. Mit Pattern setzt man
den Filter für die angezeigten Dateien. 8. Image erzeugen (autom. Image1) 9. Image1.BORDERSTYLE auf 1 setzen 10. ein CommandButton anlegen und den Name btnEnde geben. 11. btnEnde.CAPTION auf „&Ende“ setzen
35
Objektorientierte Programmierung mit Visual Basic
36
Und nun noch der Code: 1. btnEnde_Click
PRIVATE SUB btnEnde_Click() Unload Me
END SUB 2. File1_Click
PRIVATE SUB File1_Click() Dim datei as string datei = Dir1.Path IF RIGHT$(Dir1.Path,1) <> “\“ THEN datei = datei & “\“ END IF datei = datei & File1.Filename
SET Image1.Picture = LOADPICTURE(datei)
END SUB 3. Dir1_Change
PRIVATE SUB Dir1_Change() File1.Path = Dir1.Path END SUB
4. Drive1_Change PRIVATE SUB Drive1_Change() Dir1.Path= Drive1.Drive File1.Path = Dir1.Path END SUB
Mit den wenigen Zeilen Code ist man bereits „fertig“! Benutzerfehler führen allerdings noch zum Abbruch, deshalb wird im nächsten Beispiel die Fehlerbehandlung eingeführt
Objektorientierte Programmierung mit Visual Basic
37
2.7.4 PicView2 - Fehlerbehandlung Nun erweitern wir unser Programm um eine Fehlerbehandlung, für den Fall, daß der Benutzer ein Laufwerk auswählt, welches keinen Datenträger enthält. Dazu erweitern wir Drive1_Change() PRIVATE SUB Drive1_Change() ‘ Springe bei Fehler zur Marke drive1_change_error ON ERROR GOTO drive1_change_error Dir1.Path= Drive1.Drive File1.Path = Dir1.Path EXIT SUB drive1_change_error: SELECT CASE Err CASE 68 ‘ Datenträger oder Gerät nicht verfügbar MsgBox “Gerät/Datenträger nicht verfügbar“, _
vbCritical, “PicView 2 - Fehler“ Drive1.Drive=Dir1.Path Exit Sub
CASE ELSE ‘ sonstiger Fehler MsgBox “Fehler : “ & Error(Err) & vbCrLf , _
vbCritical, “PicView 2 - Fehler“ END SELECT END SUB Nachdem der Code eingefügt ist, versuchen Sie doch mal das Laufwerk A: auszuwählen, ohne eine Diskette einzulegen. Wenn alles richtig ist, kommt ein Hinweis und das Programm läuft anschließend weiter.
Objektorientierte Programmierung mit Visual Basic
38
2.7.5 ein Programm ohne Form Mit diesem Beispiel soll demonstriert werden, dass man mit Visual Basic auch rein prozedural programmieren kann. 1. ein neues Projekt anlegen 2. die leere Form entfernen 3. ein neues Quellmodul MODUL1.BAS einfügen 4. in MODUL1 eine Prozedur MAIN einfügen
PUBLIC SUB main() DIM inp AS INTEGER DIM x AS INTEGER DO inp = VAL(INPUTBOX(“Zahl:“)) x = MSGBOX(“Eingabe : “ & STR$(inp) & vbCRLF & “Weiter?“, vbYesNo) LOOP WHILE x = vbYes END SUB
5. Extras/Optionen/Projekt/Startform auf SubMain einstellen Schon hat man ein Programm, welches eine Benutzereingabe erwartet und anschließend die eingegebene Zahl wieder ausgibt. Das Programm wird beendet, wenn der Benutzer NEIN wählt.
Objektorientierte Programmierung mit Visual Basic
40
3 Objektorientierte Programmierung mit Visual Basic
3.1 Welche Konzepte der OOP unterstützt VB6?14 To be continued…
14 Vgl. McKinney S.182 f.
Objektorientierte Programmierung mit Visual Basic
3.2 Welche Objekte bietet VB6 und welche kann man selbst erstellen15
3.2.1 Formen Formen waren die ersten Objekte, die Visual Basic kannte. Sie gab es schon, bevor jemand auf die Idee kam, sie Objekte zu nennen. In der aktuellen Version kann man Formen jedoch seinen Bedürfnissen anpassen und neue Methoden und Eigenschaften hinzufügen. Sie können mit DIM NeueForm AS NEW FrmMain ein neues Objekt NeueForm aus der Klasse FrmMain anlegen. Wenn man eine Form entwirft und ihr einen Namen gibt, wird eine neue Klasse gebildet, die den Namen der Form erhält.
3.2.2 Steuerelementobjekte Steuerelemente sind das Herzstück von Visual Basic. Man kann mit VB eigene Steuerelemente erzeugen Steuerelemente verwenden den generischen Namen CONTROL. CONTROL kann als Platzhalter für ein beliebiges Steuerelement verwendet werden. Jedes Steuerelement hat aber auch einen eigenen Klassennamen, wie z.B. ListBox, TextBox, Image, Label, usw.
3.2.3 Datenzugriffsobjekt Das Datenzugriffsobjekt (DAO) dient der Kommunikation von Visual Basic Steuerelementobjekten mit der Datenbankschnittstelle. Eine genaue Beschreibung der Datenbankschnittstelle ist ziemlich komplex und füllt alleine ein Buch.
3.2.4 Systemobjekte Visual Basic stellt folgende Systemobjekte zur Verfügung:
App Programm Clipboard Zwischenablage Debug Debug-Fenster Printer Drucker Screen Bildschirm Err Fehlerbehandlung
Ihr Name stellt sowohl den Objekt- als auch den Klassennamen dar. Sie brauchen nicht extra angelegt werden und liegen vom Programmstart an vor.
41
15 Vgl. McKinney S. 186 f.
Objektorientierte Programmierung mit Visual Basic
42
3.2.5 Collection-Objekte Collection-Objekte (Auflistungen) sind dynamische Datenfelder, mit sicheren Methoden und Eigenschaften zum Zugriff auf die Daten. Vom System werden die Auflistungen Controls, Forms und Printers zur Verfügung gestellt. Benutzerdefinierte Auflistungen haben den Klassennamen COLLECTION. Die Auflistungen speichern Daten mit dem Datentyp Variant. • Collection-Objekte wachsen und schrumpfen automatisch • Wie bei einem Datenfeld kann man auf die Elemente über ihre Indizes
zugreifen. Man kann auf die Einträge auch über Schlüssel zugreifen • Collection-Objekte sind unsortiert • Auflistungen sind eindimensional • Man irrt sich leicht beim Umgang mit Indizes, weil der Index
benutzerdefinierter Collection-Objekte bei 1 beginnt, der Index vordefinierter Collection-Objekte dagegen bei 0 (Kompatibilität zu älteren Versionen von VB)
• Als Alternative zum Collection-Objekt bietet sich das Datenzugriffsobjekt als Superauflistung an.
• Die Listenfelder (z.B. ListBox) verhalten sich wie Auflistungen, sind aber keine.
3.2.6 OLE-Server-Objekte Die Anwendung von OLE-Objekten war bereits in der Version 3.0 mit dem OLE-Container-Control möglich. In der Version 4.0 kann man OLE-Server selbst erstellen. Der Klassenname der OLE-Server-Objekte wird vom Entwickler selbst festgelegt. Der Formeleditor von MS-OFFICE ist zum Beispiel ein OLE-Server. Man kann mit VB seine Klassen als Server zur Verfügung stellen und diese in andere Programme einbinden.
3.2.7 Benutzerdefinierte Klassen Man kann seine Funktionen in eine Klasse umwandeln und diese in vielen Programmen nutzen. Wie man eine Klasse erzeugt, wird im nächsten Kapitel behandelt. Dort wird die Erstellung einer Klasse an einem Beispiel demonstriert.
3.2.8 Generische Objekte Generische Objekte sind ein Oberbegriff für alle Objekte. Sie können als Platzhalter für beliebige Objekte benutzt werden. Ihr eigener Klassenname ist OBJECT.
Objektorientierte Programmierung mit Visual Basic
43
3.3 Nutzung der Objekte16 Im Folgenden wird beschrieben, wie in Visual Basic mit Objekten umgegangen wird. Um Unterschiede zu den üblichen OOP-Sprachen zu zeigen, werden Beispiele in C++ aufgeführt. • Eine Objektreferenz anlegen
VB: Dim rdng as Ding C++: Ding *pdng;
• Ein Objekt deklarieren VB: Dim dng AS NEW Ding C++: Ding dng;
• Ein Objekt deklarieren und mit Startwerten initialisieren VB: Dim dng AS NEW Ding dng.Create param C++: Ding dng(param); In VB ist es nicht möglich direkt bei der Deklaration Initialisierungswerte anzugeben, mit denen das Objekt initialisiert wird. Beim Anlegen des Objekts wird zwar automatisch CLASS_INITIALIZE aufgerufen, aber hier kann man nur Standardwerte, welche für alle Objekte des Typs gelten, setzten. Deshalb behilft man sich mit einer eigenen Methode z.B. create, mit der man dann direkt nach der Deklaration die Initialisierung vornimmt. Zur Sicherheit sollte man innerhalb der Klasse einen Schalter führen, mit dem man sicherstellen kann, dass das Objekt initialisiert wurde. In C++ kann man direkt bei der Deklaration die Initialisierungswerte angeben, welche an den sog. Konstruktor als Parameter übergeben werden. Beim Zerstören des Objekts wird automatisch CLASS_TERMINATE aufgerufen. Die Methoden CLASS_INITIALIZE und CLASS_TERMINATE entsprechen dem Konstruktor und Destruktor von C++, mit dem Unterschied, daß CLASS_INITIALIZE im Gegensatz zum Konstruktor keine Parameter erhält.
16 Vgl. McKinney S.190 ff.
Objektorientierte Programmierung mit Visual Basic
44
• Eine Referenz auf ein Objekt initialisieren
VB: SET rdng=dng C++: pdng=&dng;
• Zugriff auf öffentl. Objektvariablen VB: rdng.Var1 = Wert dng.Var1 = Wert C++: pdng->Var1 = Wert; dng.Var1 = Wert; Visual Basic macht bei der Benutzung von Referenzen und Objekten keinen Unterschied.
• Aufruf von Methoden VB: rdng.Meth1(Param) dng.Meth1(Param) C++: pdng->Meth1(Param); dng.Meth1(Param); Visual Basic macht auch hier bei der Benutzung von Referenzen und Objekten keinen Unterschied.
Objektorientierte Programmierung mit Visual Basic
45
3.4 Die Klasse CPerson17 als Beispiel Als Beispiel wird im folgenden ein Objekt Person nachgebildet, welches möglichst dem Objekt Person aus der realen Welt entsprechen soll. Im ersten Schritt notieren wir alle Eigenschaften, die eine Person kennzeichnen: Name, Wohnort, Straße, Geschlecht, Geburtsdatum (Alter), Religion, Haarfarbe, Augenfarbe, Familienstand, Beruf, Größe, IQ, Bildung, Hobbys, Gesundheitszustand, ..... Im zweiten Schritt notieren wir alle Methoden, welche auf eine Person angewendet werden können: Geburt, Tod, Hochzeit, Scheidung, Taufe, Berufswechsel, wachsen, laufen, sprechen, essen, trinken, schlafen, ..... Bei der Entwicklung einer echten Klasse wird man natürlich nur Eigenschaften und Methoden notieren/suchen, die wirklich benötigt werden. Man wird von der Realität zu einem Modell abstrahieren.
Eigenschaft Gültigkeitsregel/-bereich Name Straße Wohnort Geschlecht männlich, weiblich Familienstand ledig, verheiratet, geschieden, verwitwet Religion Geburtsdatum <= heute
Tabelle 14 - „Eigenschaften einer Person“
Methode Parameter Bedingungen Create/Geburt Geschlecht,
Geburtsdatum, Name
nicht initialisiert
Taufe Name, Religion nicht getauft Hochzeit Familienstand <> verheiratet Scheidung Familienstand = verheiratet Verwitwet Familienstand = verheiratet Geschlechtsumwandlung
Geschlecht
Tabelle 15 - Entwurf der Klasse Person
Die Modellierung der Klasseneigenschaften erfolgt analog zur Modellierung von Datenbanken. Zur vertiefenden Lektüre empfiehlt sich das Buch: „Datenbanksysteme - Konzeptionelle Datenbankmodellierung und Datenbankarchitekturen, Gabriel/Röhrs, Springer Lehrbuchverlag, 2. Auflage 1995“
17 Anmerkung: CPerson steht für Class Person
Objektorientierte Programmierung mit Visual Basic
46
Implementierung einer vereinfachten Klasse mit VB
• Die Eigenschaften implementieren wir als Properties, um die Kontrolle über den Inhalt zu haben. Würden die Eigenschaften als PUBLIC-Variablen implementiert könnte man von außen jeden Wert in die Variablen schreiben. Damit würde die ganze Kapselung keinen Sinn mehr machen.
• Die Eigenschaften Familienstand, Geburtsdatum, Geschlecht und Religion werden als Schreibschutzeigenschaften implementiert, d.h. wir definieren nur die Property Get Funktion und entfernen den Property Let Funktionsrahmen aus dem Programm.
• Die restlichen Eigenschaften werden als Lese-/Schreibproperty mit Let und Get definiert
• Die Werte der Eigenschaften speichern wir in privaten Variablen, denen wir als Namen den Eigenschaftsnamen mit vorangestellten m geben. z.B.: PRIVATE mName AS STRING
• Als Klasseneigenschaften vergeben wir Instancing: 2-Creatable Multiuse (ist meistens die richtige Einstellung) Name: CPerson Public: false die Klasse ist nicht öffentlich
• Zur Demonstration für Public Variablen erzeugen wir eine Variable STATUS, welche verschiedene Informationen enthalten kann. Da der Inhalt unwichtig ist, ist eine Kontrolle des Inhalts unnötig.
Objektorientierte Programmierung mit Visual Basic
47
4 Entwicklungsmethodik beim Entwurf einer neuen Klasse18 Ein kurze Betrachtung, wie man bei der Entwicklung von Klassen (objektorientierten Systemen) vorgehen sollte. Bei der geschilderten Methode handelt es sich um die Gemeinsamkeiten der meisten in der Literatur erwähnten Methoden und nicht um eine spezielle Methode. Die beste Methode, Klassen zu entwerfen, besteht darin, sie erst zu verwenden. Man schreibt ein Beispielprogramm und verwendet darin die Klasse, als ob sie bereits existiert. Man erstellt die Objekte einer Klasse in jeder erdenklichen Art, benutzt alle Methoden und Eigenschaften. Dabei finden sich immer neue Methoden und Eigenschaften, welche jederzeit verworfen und geändert werden können. Natürlich ist diese Methode nur bei kleinen Projekten praktikabel, aber auch bei großen Projekten wird der mit dem Entwurf beauftragte Entwickler in seiner Vorstellung ähnlich vorgehen. Auch er wird hoffentlich seinen Entwurf mit einem Beispielprogramm abliefern, welches die Funktion veranschaulicht. Die Entwicklung ist ein iterativer Prozess, bei dem sich die Details der Implementierung als ungeschickt erweisen können und durch neue Ideen ersetzt werden. Das spart Kosten, weil die Gefahr, eine nutzlose Implementation zu entwickeln, damit verringert wird. Allerdings darf man sich gerade am Anfang nicht zu sehr an seinen Entwurf binden und muss Fehler im Entwurf akzeptieren und durch bessere Lösungen ersetzen. Die Methode, Klassen nach der Methode „try and error“ zu entwickeln ist kein Feature der OOP, sondern lässt sich auch beim Entwurf von Prozeduren anwenden.
18 Vgl. McKinney S.184ff.
Objektorientierte Programmierung mit Visual Basic
48
Die einzelnen Schritte Beim Entwurf wird man folgende Stufen antreffen bzw. durchlaufen. Der Entwurf verläuft iterativ und jeder Schritt wird mitunter mehrfach durchlaufen: 1. Grobkonzeption
Bei der Grobkonzeption werden die Eigenschaften und Methoden, welche die Klasse haben soll, sinnvollerweise in einem Klassendiagramm dargestellt. Dabei findet bereits die Abstraktion vom Anwendungsfall zur Implementation statt, weil es uneffektiv wäre, unnötige Details durch die weiteren Entwicklungsstufen mitzuschleppen. Weiterhin sollte bereits hier definiert werden, was die Klasse eigentlich leisten soll.
2. Aufbau des Beispielcodes Hier wird Beispielcode, der alle Anwendungsfälle durchspielt, in einem Programm zusammengefaßt. Dieses Programm kann später als erster Test für die fertige Klasse benutzt werden. Bereits beim Entwurf des Beispielprogramms findet man übersehene oder ungeschickt aufgeteilte Details, die man so noch frühzeitig bereinigen kann.
3. Datenschema/Eigenschaften Welche Daten soll die Klasse speichern? In welchem Format werden die Daten benötigt? Welche Werte sind gültig? Welche Methode greift auf welche Daten zu?
4. Methodendefinition
Welche Methoden, mit welchen Parametern werden benötigt? Wie und in welchem Zusammenhang werden die Methoden gebraucht? Welche Eigenschaften werden durch die Methode verändert oder benutzt?
Neben den oben geschilderten Schritten sollte natürlich eine ordentliche Dokumentation stehen, in der steht, warum etwas so gemacht wurde und nicht anders. Fehler und Probleme sollten dabei ebenso festgehalten werden, wie die Entscheidung für einen bestimmten Datentyp. Erst im Anschluss an diese Schritte erfolgt die eigentliche Implementation, bei der man aber nicht davor zurückschrecken darf, Änderungen am Entwurf vorzunehmen, wenn sich der Entwurf als unpraktikabel oder schlecht erweist. Wenn sich die Implementation bei der Benutzung als unbrauchbar erweist, hat das größere Auswirkungen, als eine Änderung des Entwurfs.
Objektorientierte Programmierung mit Visual Basic
49
Klassenname
5 Darstellung von Klassen und Klassenhierarchien Für die Darstellung von Klassen gibt es genauso viele Methoden, wie es Autoren gibt. Im folgenden werden 2 Varianten vorgestellt.
Instanzmethoden
(1)
Instanzeigenschaften
(2)
Klassenmethoden
- new Objektbildung
(3)
Klasseneigenschaften
(4)
Abbildung 7 - Klassendiagramme nach „Jell/von Reeken“19
(1) Instanzmethoden werden von den Objekten (Instanzen) selber ausgeführt (2) Instanzenvariablen haben für jede Instanz einen eigenen Wert (3) Klassenmethoden werden von der Klasse selbst aufgerufen.
In VB sind dies CLASS_INITIALIZE und CLASS_TERMINATE, in C++ sind dies der Konstruktor und Destruktor
(4) Variablen, die für alle Objekte einer Klasse den gleichen Wert haben. (z.B. alle Autos haben 4 Räder)
19 Vgl. Jell/von Reeken S. 23
Objektorientierte Programmierung mit Visual Basic
50
Klasse1
Private Variablen
Methoden Eigenschaften
Meth1Meth2
Prop1Prop2Obj1Obj2
Private Variablen
Klasse2
Meth3 Prop3
LEGENDE:
Variableneigenschaft - read onlyVariableneigenschaft - read/writeObjekteigenschaft - read onlyObjekteigenschaft - read/write
Sub - MethodeFunction - Methode
Abbildung 8 - Klassendiagramme nach „Bruce McKinney“20
Jell/von Reeken McKinney Darstellung der Methoden • Aufteilung in Klassen- und
Instanzmethoden ersichtlich • keine Unterscheidung
zwischen Prozeduren und Funktionen
• keine Aufteilung zwischen Klassen- und Instanzmethoden
• Unterscheidung zwischen Prozeduren und Funktionen
Darstellung der Eigenschaften • Aufteilung in Klassen- und Instanzeigenschaften
• nicht erkennbar, ob Eigenschaften Privat oder Public sind
• nicht erkennbar ob Eigenschaften nur „read only“ oder „read/write“ Zugriff zulassen
• keine Aufteilung zwischen Klassen- und Instanzeigenschaften
• Aufteilung zwischen privaten und öffentlichen Eigenschaften
• zeigt, ob Variablen „read only“ oder „read/write“ Zugriff erlauben.
Zusammenspiel zwischen Klassen
• kein Zusammenspiel zwischen mehreren Klassen ersichtlich
• Vererbungshierarchien werden nicht sichtbar
• Beziehungen werden zum Teil sichtbar, weil enthaltene Objekte dargestellt werden.
• Vererbungshierarchien werden hier auch nicht sichtbar
Tabelle 16 - Vergleich der beiden Darstellungen
20 Vgl. McKinney S.195 f.
Objektorientierte Programmierung mit Visual Basic
52
Abbildungsverzeichnis: ABBILDUNG 1 - BEISPIEL KLASSENHIERARCHIE BOOTE ............................................................ 9 ABBILDUNG 2 - KLASSE FRACHTER (GESAMTDARSTELLUNG)................................................. 10 ABBILDUNG 3 - VISUAL BASIC WERKZEUGLEISTE ................................................................... 12 ABBILDUNG 4 - BILDSCHIRMPHOTO BEISPIELPROGRAMM 1 .................................................... 31 ABBILDUNG 5 - MENÜEDITOR ................................................................................................... 34 ABBILDUNG 6 - BILDSCHIRMPHOTO: ENTWURF PICVIEW ........................................................ 35 ABBILDUNG 7 - KLASSENDIAGRAMME NACH „JELL/VON REEKEN“ ........................................... 49 ABBILDUNG 8 - KLASSENDIAGRAMME NACH „BRUCE MCKINNEY“........................................... 50 Tabellenverzeichnis: TABELLE 1 - VISUAL BASIC DATENTYPEN ................................................................................ 14 TABELLE 2 - NAMENSKONVENTIONEN FÜR OBJEKTE............................................................... 18 TABELLE 3 - DATENZUGRIFFSOBJEKTE.................................................................................... 19 TABELLE 4 – REGELN FÜR MENÜS .......................................................................................... 19 TABELLE 5 – REGELN FÜR VARIABLEN .................................................................................... 19 TABELLE 6 - RECHENOPERATOREN ......................................................................................... 25 TABELLE 7 - VERGLEICHSOPERATOREN .................................................................................. 25 TABELLE 8 - VERKNÜPFUNGSOPERATOREN ............................................................................ 25 TABELLE 9 - EINIGE EXEMPLARISCHE NUMERISCHE FUNKTIONEN ........................................... 26 TABELLE 10 - EINIGE EXEMPLARISCHE STRINGFUNKTIONEN................................................... 27 TABELLE 11 - WICHTIGE PROPERTIES...................................................................................... 28 TABELLE 12 - WICHTIGE EREIGNISSE....................................................................................... 28 TABELLE 13 - MENÜSTRUKTUR FÜR BEISPIEL 2 ...................................................................... 34 TABELLE 14 - „EIGENSCHAFTEN EINER PERSON“.................................................................... 45 TABELLE 15 - ENTWURF DER KLASSE PERSON....................................................................... 45 TABELLE 16 - VERGLEICH DER BEIDEN DARSTELLUNGEN ....................................................... 50 Abkürzungsverzeichnis: DAO DATA ACCESS OBJECTS (ENGL. DATENZUGRIFFSOBJEKTE) OCX OLE CUSTOM CONTROL (ENGL. OLE ZUSATZSTEUERELEMENTE) OLE OBJECT LINKING AND EMBEDDING OOP OBJEKTORIENTIERTE PROGRAMMIERUNG PP PROZEDURALE PROGRAMMIERUNG VB VISUAL BASIC
Objektorientierte Programmierung mit Visual Basic
53
Quellenverzeichnis
1. Brad J. Cox Object-Oriented Programming - An Evolutionary Approach Addison-Wesley, 1987
2. Gabriel/Röhrs Datenbanksystem - Konzeptionelle Datenmodellierung .... Springer Lehrbuch, 1995 2. Auflage
3. Jell/von Reeken Objektorientierte Programmierung mit C++ Hanser, 1991
4. Andreas Maslo Praxisbuch Visual Basic 4.0 Data Becker, 1996 1. Auflage
5. Bruce McKinney Hardcore Visual Basic Microsoft Press, 1996
6. Michael Ringel Warum Sie die objektorientierte Programmierung beinahe selbst Microsoft System Journal entdeckt hätten... Sep/Okt 1993, S. 79 ff.
7. Steffen Schäfer Objektorientierte Entwurfsmethoden Addison-Wesley, 1994 1. Auflage
8. Microsoft Visual Basic 4.0 Online Handbücher Syntaxdarstellungen und Sprachspezifikationen sind dem Visual Basic 4.0 Online Handbuch entnommen und nicht gesondert gekennzeichnet!
Literaturempfehlungen:
Für Anfänger 1. das „Praxisbuch Visal Basic 4.0“ von Andreas Maslo., welches sehr gründlich auf die
Bedienung und die grundlegenden Sprachkonzepte von Visual Basic eingeht. Begleitend werden zu den einzelnen Themen Beispielanwendungen entwickelt und ausführlich erklärt.
2. das Programierhandbuch von Visual Basic, welches gerade in den ersten Kapiteln langsam an die Materie heranführt.
Für Fortgeschrittene/Experten 1. das Programmierhandbuch und die Sprachreferenz von Visual Basic, welche sich auch für
Fortgeschrittene immer wieder als Fundgrube erweist. 2. das Buch „Hardcore Visual Basic“ von Bruce McKinney, mit dem man an die Grenzen von
Visual Basic geführt wird und dabei jede Menge Tips und Tricks erhält 3. das Magazin „BasicPro“ (Steingräber Verlag), welches alle 2 Monate über aktuelle
Entwicklungen für Visual Basic, Visual Basic für Applikationen und verwandte Produkte informiert. Auf der zum Magazin gehörenden CD befinden sich regelmäßig Updates, Tools, Sourcen, ...