CO - Informatik - Christoph Oberweis

Werbung
Objektorientierung mit VBA
Visual Basic for Applications
Klassen und Objekte
Übungen
Christoph Oberweis
Agenda







C.O.
VBA
Daten in VBA
Modelle und Modellbildung
Klassen – Objekte - Beziehungen
Übungen
COM
Quellen
2
Agenda

VBA

Daten
Modelle und
Modellierung

KlassenObjekteBeziehungen

Übungen

COM
Quellen


C.O.
VBA
Daten in VBA
Modelle und Modellbildung
Klassen – Objekte - Beziehungen
Übungen
COM
Quellen
3
VBA …
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
… ist eine Programmiersprache
… ist in die Office-Anwendungen integriert
… erlaubt das Arbeiten mit Objekten
… kann als Schnittstelle zu Office, aber auch zu
Windows - Ressourcen insgesamt benutzt
werden
4
Wo versteckt sich VBA?
Wechsel mit <Alt> <F11> von der Office Anwendung
in das VBA – Programmiersystem
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Zurück zur Office Anwendung: Hier klicken
5
Zunächst ein „warming up“
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Einfache Ausgabe - Anweisung
1. Schritt: Excel/Word aufrufen
2. Schritt: Mit <Alt> <F11> in die Programmierumgebung wechseln
3. Schritt: „Diese Arbeitsmappe“ anklicken (Das wird später anders gemacht!)
4. Schritt: Falls jetzt schon Programmcode erscheint, diesen löschen
5. Schritt: Obiges Programm eingeben
6. Schritt: Mit <F5> Programm starten
7. Schritt: Programm testen, gegebenenfalls korrigieren
8. Schritt: Mit <Alt><F11> zurück zu Excel
6
Weitere Möglichkeiten
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
Auch hier kann das Programm
gestartet werden: ein Klick
genügt!
… und wenn es mal
abgestürzt ist: hier klicken.
Und wer es ganz genau wissen will: F8 ist der
Einzelschritt-Mode zum Debugen.
C.O.
7
Deklaration von Variablen
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Option Explicit
Dim net
As Double
Dim x
As Integer
Deklaration ist zwingend (kann
abgestellt werden)
Deklaration zweier Variablen mit
Typenangabe
8
Modelle und Modellierung
Wirkliche Welt: Autohaus
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
Modell: Idealisierte Darstellung (Abbildung) der realen Welt zur
Veranschaulichung bestimmter Sachverhalte/Eigenschaften/Prozesse,
Vereinfachung der Realität
C.O.
9
Diesen da ...
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
10
... picken wir uns mal raus…
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
11
…und untersuchen ihn genauer!
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
12
„Objektive“ Tatsachen!
Kfz
Hersteller= „Daihatsu“
Typ= „Terios“
………
Hubraum= 1495
………
Farbe= „metallic silber“
…….
VKPreis= 17800,00
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
„konkretes“ individuelles Fahrzeug
„abstrakte“ Darstellung
Beachte: Zu jedem Fahrzeug gehört eine
Herstellerangabe eine Typenangabe usw.
(Gemeinsamkeit); diese Attribute haben je
nach Kfz einen unterschiedlichen Inhalt.
C.O.
13
Produktion am Fließband
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Schablone, nach diesem „Bauplan“
können (fast) unendlich viele
Fahrzeuge gebaut werden.
Allerdings benötigt dieser Plan
exakte Angaben zu den Details
des Fahrzeugs.
14
Produktion am Fließband
Kfz
Hersteller: Text
Typ: Text
………
Hubraum: Ganzzahl
………
Farbe: Text
…….
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Schablone, nach diesem „Bauplan“
können (fast) unendlich viele
Fahrzeuge gebaut werden.
Allerdings benötigt dieser Plan
exakte Angaben zu den Details
des Fahrzeugs.
So könnte der Bauplan formuliert
sein: Attribute: Variablen mit
Typenangabe als Informationen
zu den Eigenschaften des
Fahrzeugs (Vorstufe einer Klasse).
15
Klasse: Fertig!
Notation in UML (Unified Modeling Language)
Kfz
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Hersteller: Text
Typ: Text
………
Hubraum: Ganzzahl
………
Farbe: Text
…….
VKPreis: Währung
Klassenname
Attribute
Übungen
COM
Quellen
C.O.
Erfassung()
Ändern()
Löschen()
Drucken()
……………
Methoden
16
Von der Klasse …
„Abstrakter“ Bauplan
Kfz
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Hersteller: Text
Typ: Text
………
Hubraum: Ganzzahl
………
Farbe: Text
…….
VKPreis: Währung
Übungen
COM
Quellen
C.O.
Erfassung()
Ändern()
Löschen()
Drucken()
……………
17
... zum Objekt
„Konkretes“ individuelles Fahrzeug
:Kfz
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Hersteller= „Daihatsu“
Typ= „Terios“
………
Hubraum= 1495
………
Farbe= „metallic silber“
…….
VKPreis= 17800,00
Übungen
COM
Quellen
C.O.
Erfassung()
Ändern()
Löschen()
Drucken()
……………
18
Die erste eigene Klasse
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Die Klasse besitzt drei
Attribute und zwei Methoden.
Damit lässt sich in der Realität
selbstverständlich kein
Fahrzeug hinreichend
modellieren – es geht jetzt
zunächst darum, die Klasse
und ein dazu passendes
Testprogramm in VBA zu
implementieren.
19
Klasse erfassen
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Hier den Menüpunkt
„Klassenmodul“ anwählen …
20
Klasse erfassen
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
… und die neue Klasse
anlegen.
21
Klasse erfassen
VBA
Daten
Doppelklick auf „Klasse“...
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
... und Name ändern (Kfz)!
Quellen
C.O.
22
Klasse erfassen
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
23
Klasse: Erläuterungen
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
24
Klasse: Erläuterungen
Private Hersteller
VBA
Daten
Modelle und
Modellierung
Das Attribut „Hersteller“ darf nur von „Verarbeitungsschritten“ der eigenen Klasse manipuliert werden (Kapselung). Das Gegenstück wäre „Public“,
wenn die Attribute allerdings dann „von überall“
verändert werden können, ist das Einrichten einer
Klasse eigentlich unsinnig.
Sub erfassen(her, ty, hub)
KlassenObjekteBeziehungen
Sub kennzeichnet eine Methode der Klasse, in den
Klammern stehen Platzhalter (Variablen) für die
Daten, die von außen (vom Testprogramm) dem
Objekt übermittelt werden. Die Verarbeitungsschritte stehen zwischen Sub und End Sub.
Übungen
Hersteller = her
COM
Das Attribut „Hersteller“ erhält den Wert, der in
Her von außen an das Attribut übermittelt wurde.
Quellen
Function ErmittleTyp()
Der im Objekt gespeicherte Wert für den Autotyp
soll an das Testprogramm zurückgeliefert werden.
C.O.
25
Das Testprogramm
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
26
Das Testprogramm
VBA
Daten
Modelle und
Modellierung
Noch besser: Fachkonzept
unter „Module“ codieren.
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
27
Erläuterungen
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
28
Erläuterungen
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Das Testprogramm setzt hier die Werte der Attribute.
In der Praxis wäre die Quelle dieser Daten z. B. eine
Datenbank. Ein Programm, welches die Daten zunächst setzt und dann unmittelbar danach wieder
abfragt, ist aus der Sicht der Praxis „unsinnig“. Es
wäre eher so, dass ein Programm für die Erfassung
der Daten zuständig ist und ein anders für die Weiterverarbeitung. Das wird auch später so vorgeführt –
jetzt geht es zunächst einmal nur darum, den „Mechanismus“ zu begreifen. Daher wurde auch die Bezeichnung „Testprogramm“ gewählt!
29
Programmtest
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
Es klappt:
C.O.
30
Beziehungen zwischen
Klassen/Objekten
Überlegung: Wie ist nun der Zusammenhang zwischen dem
Testprogramm und dem Objekt „Kfz“ (Fachkonzept) zu modellieren?
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
31
Beziehungen zwischen
Klassen/Objekten
Überlegung: Wie ist nun der Zusammenhang zwischen dem
Testprogramm und dem Objekt „Kfz“ (Fachkonzept) zu modellieren?
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Assoziation zwischen Klassen
32
Beziehungen zwischen
Klassen/Objekten
Überlegung: Wie ist nun der Zusammenhang zwischen dem
Testprogramm und dem Objekt „Kfz“ (Fachkonzept) zu modellieren?
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
Assoziation zwischen Klassen
Eine Methode der Klasse nutzen:
Auto1.erfassen a, b, c
C.O.
33
Jetzt wird gerechnet!
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Aufgabe:
Für den Autoteilezubehörshop ist eine
ähnliche Klasse wie bei dem vorherigen
Beispiel festzulegen.
Die Verkaufspreisberechnung
funktioniert folgendermaßen: Der VK
Preis (netto) ergibt sich aus dem
Einkaufspreis multipliziert mit dem
Kalkulationsfaktor (Prozentzahl).
34
Tipp
Die Klasse:
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Option Explicit
Private Artikelnummer As Integer
Private Bezeichnung As String
Private EK_Preis As Double
Private K_Faktor As Double
Sub erfassen(EkP As Double)
Artikelnummer = 1234
Bezeichnung = "Sitzschoner"
K_Faktor = 50
EK_Preis = EkP
End Sub
Function Ausgeben_Bezeichnung()
Ausgeben_Bezeichnung = Bezeichnung
End Function
Function Ermitteln_VK_Preis()
Ermitteln_VK_Preis = (EK_Preis * K_Faktor / 100) + EK_Preis
End Function
35
Testprogramm
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Sub Testprg()
Dim Autoz As Kfz_Zubehoer
Dim bez As String
Dim EP As Double
Dim VkP As Double
Set Autoz = New Kfz_Zubehoer
EP = InputBox("Bitte Einkaufspreis eingeben: ")
Autoz.erfassen EP
MsgBox (Autoz.Ausgeben_Bezeichnung)
MsgBox (Autoz.Ermitteln_VK_Preis)
Set Auto1 = Nothing
End Sub
36
Und weiter geht‘s!
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Aufgabe:
Welche weiteren Methoden finden Sie für dieses Beispiel?
Erweitern Sie die Klasse kfz und codieren Sie Ihre Lösung(en)!
Übungen
COM
Quellen
C.O.
37
Component Object Model
VBA
Daten
Das Component Object Model (COM) erlaubt (u. a.) den
objektorientierten Zugriff auf Computerdienste mit VBS/VBA.
Modelle und
Modellierung
COM ist damit eine spezielle API.
KlassenObjekteBeziehungen
In diesem Zusammenhang ist unter Komponente eine
compilierte Programmdatei zu verstehen, welche i. d. R.
mehrere Klassen enthält. Damit werden die entsprechenden
Objekte (z. B. unter VBS, aber auch unter C++, C#, Java
oder VB) erzeugt, mit denen z. B. der Zugriff auf Funktionen
des Betriebssystems Windows realisiert werden kann.
Übungen
COM
Quellen
Die folgenden Beispiele orientieren sich an D. JOHLEN (s. Quellen).
C.O.
38
Das Dateisystem als Komponente
FileSystemObject
File
Drives
Name
DatelastModified
parentFolder
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
getFile(pfad):File
moveFile(quellPfad, zielPfad)
……………..
moveFile(zielPfad)
……………..
Stark vereinfachte Klassenmodelle der COM – Komponente, die für
das Dateisystem zuständig ist.
COM
Quellen
C.O.
Beispiel eines Anwendungsfalls: Eine Datei soll von einem
Verzeichnis in ein anderes verschoben werden. Konkret: Die Datei
„test1.txt“ im Verzeichnis c:\vz1\ soll in das Verzeichnis c:\vz2\
verschoben werden.
39
Das Dateisystem als Komponente
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
Z1
Z2
Z3
Z4
Set FSObjekt = CreateObject("Scripting.FileSystemObject")
Set Datei = FSObjekt.getFile("h:\SE\test1.txt")
Datei.move "h:\SX\"
MsgBox "Dateien umkopiert!„
Z1: Erzeugung des Objektes „FSObjekt“ mit der Methode CreateObject. Als
Schnittstellenparameter muss die Klasse „FileSystemObject“ aus dem Paket
„Scripting“ angegeben werden.
Z2: Erzeugen des Objektes „Datei“ durch das Senden der Nachricht „getFile“.
Z3: Senden der Nachricht „move“ (inkl. Parameter) an das Objekt „Datei“.
Sowohl für das Modellieren als auch für die Erklärung eines Programms ist
diese verbale Ausdrucksweise „ungeschickt“. UML kennt neben den
Klassendiagrammen noch viele weitere Modellierungstechniken. Eine
Möglichkeite wird nun vorgestellt.
40
Sequenzdiagramm
Beispiel: Zubehörshop des Autohauses
Erklärung:
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
Das Sequenzdiagramm dient (u. a.) der Darstellung,
wie Objekte Nachrichten austauschen. Es werden
zeitliche Aspekt berücksichtigt.
C.O.
41
Unser Beispiel
Sequenzdiagramm für den Anwendungsfall „Datei verschieben“
VBA
(new)
FileSystemObject
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
FSObjekt:
getFile(…)
Durch getFile wurde ein
neues Objekt erzeugt!
Datei:
File
Übungen
COM
Quellen
move(…)
Folge: Datei ist verschoben!
C.O.
42
Wer hat wann zugegriffen?
Nochmals zurück zur Klasse „File“:
File
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Name
DatelastModified
parentFolder
moveFile(zielPfad)
……………..
Übungen
COM
Quellen
C.O.
Aufgabe: Auf das Attribut DatelastModified kann direkt (ohne
Methode) zugegriffen werden. Erstellen Sie bitte ein Programm,
welches das Datum der letzten Änderung einer beliebigen Datei
in einem beliebigen Verzeichnis ermittelt und ausgibt (das
entsprechende Sequenzdiagramm bitte nicht vergessen).
43
Lösung der Aufgabe
VBA
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Set FSObjekt = CreateObject("Scripting.FileSystemObject")
Set Ordner
= FSObjekt.getFolder("c:\SE\")
Set Dateien = Ordner.files
Set Datei
= Dateien.item("test1.txt")
MsgBox "Datum des letzten Zugriffs: " & Datei.dateLastModified
Übungen
COM
Quellen
C.O.
44
Quellen
VBA
HELD, B. (2000): EXCEL-VBA-Programmierung. - München,
Mark und Technik-Verlag
Daten
Modelle und
Modellierung
KlassenObjekteBeziehungen
Übungen
COM
Quellen
C.O.
JANKA, A. (2005): VBA mit Word. – Bonn, Galileo
Computing – Verlag
JOHLEN, D. (2004): Anwendungsentwicklung.- Holland +
Josenhans-Verlag
MARTIN, R. (1999): VBA mit Office 2000 lernen. – Bonn,
Addison-Wesley – Verlag
45
Herunterladen