Bauinformatik Teil 1 - Folien zur Vorlesung

Werbung
Bauinformatik Teil 1
Folien zur Vorlesung
Ernst Baeck
Fachgebiet Baustatik - Baukonstruktion
28. November 2012
E. Baeck (Uni-DUE)
Folien
1 / 161
Grundlagen I
1
Ein wenig Geschichte
Der Computer
Von Neumann Modell
Die Sprachen
2
Zahlensysteme, Bits und Bytes
Zahlensysteme
Bits und Bytes
E. Baeck (Uni-DUE)
Grundlagen
2 / 161
Ein wenig Geschichte
Der Computer
Zuse’s First Computer
Konrad Zuse (1910–1995) war ein deutscher Bauingenieur, Erfinder und
Computer Pionier. Sein größter Erfolg war der Welt erste Computer, der
Z3, der durch Programme gesteuert werden konnte (im Sinne einer Turing
Maschine), im Mai 1941.
Abbildung : Konrad Zuse und sein Z3 [WP]
E. Baeck (Uni-DUE)
Grundlagen
3 / 161
Ein wenig Geschichte
Der Computer
Zuse’s First Computer
Konrad Zuse (1910–1995) war ein deutscher Bauingenieur, Erfinder und
Computer Pionier. Sein größter Erfolg war der Welt erste Computer, der
Z3, der durch Programme gesteuert werden konnte (im Sinne einer Turing
Maschine), im Mai 1941.
Abbildung : Z1 und Z3 im Deutschen Museum in München [WP]
1
1
Nur der Z4 überlebte den 2. Weltkrieg.
E. Baeck (Uni-DUE)
Grundlagen
3 / 161
Ein wenig Geschichte
Der Computer
ENIAC, Computer der ersten Generation
Computer der ersten Generation waren
riesige Geräte. So bestand zum Beispiel
der ENIAC (1943) aus 18.000
Vakuumröhren und 1500 Relais, wog
30 Tonnen.
Programmiert wurde der ENIAC durch
Einstellen von bis zu 6000 mehrstelligen
Schaltern und durch Anschluss
unzähliger Buchsen mit
Steckbrückenkabeln.
E. Baeck (Uni-DUE)
Grundlagen
4 / 161
Ein wenig Geschichte
Der Computer
ENIAC, Computer der ersten Generation
Computer der ersten Generation waren
riesige Geräte. So bestand zum Beispiel
der ENIAC (1943) aus 18.000
Vakuumröhren und 1500 Relais, wog
30 Tonnen.
Programmiert wurde der ENIAC durch
Einstellen von bis zu 6000 mehrstelligen
Schaltern und durch Anschluss
unzähliger Buchsen mit
Steckbrückenkabeln.
Leistungsaufnahme lag bei 140 KW.
(ca. 38 Backofen mit Vollgas!).
E. Baeck (Uni-DUE)
Grundlagen
4 / 161
Ein wenig Geschichte
Der Computer
ENIAC, Computer der ersten Generation
Computer der ersten Generation waren
riesige Geräte. So bestand zum Beispiel
der ENIAC (1943) aus 18.000
Vakuumröhren und 1500 Relais, wog
30 Tonnen.
Programmiert wurde der ENIAC durch
Einstellen von bis zu 6000 mehrstelligen
Schaltern und durch Anschluss
unzähliger Buchsen mit
Steckbrückenkabeln.
Leistungsaufnahme lag bei 140 KW.
(ca. 38 Backofen mit Vollgas!).
E. Baeck (Uni-DUE)
Grundlagen
4 / 161
Ein wenig Geschichte
Der Computer
ENIAC, Computer der ersten Generation
Leistungsaufnahme lag bei 140 KW.
(ca. 38 Backofen mit Vollgas!).
Erstmal...
Wollten Sie sich früher einen Computer
leisten, waren zunächst Umbaumaßnahmen
angesagt. Großer Raum! Klimaanlage!
E. Baeck (Uni-DUE)
Grundlagen
4 / 161
Ein wenig Geschichte
Der Computer
Heutige Supercomputer
Moderne Computer haben mehr als einen Prozessor (z.B. Samsung S3 Quadcore, Intels I7 - Quadcore).
Abbildung : IBM’s Supercomputer mit 250.000 Prozessoren [WP]
E. Baeck (Uni-DUE)
Grundlagen
5 / 161
Ein wenig Geschichte
Der Computer
Performance and Distribution
OP, Operationen pro Sekunde
FLOP is FLoating Point Operationen pro Sekunde
Abbildung : Performance-Entwicklung und Supercomputers Verteilung [WP]
E. Baeck (Uni-DUE)
Grundlagen
6 / 161
Ein wenig Geschichte
Der Computer
Performance and Distribution
OP, Operationen pro Sekunde
FLOP is FLoating Point Operationen pro Sekunde
Als Benchmark wird häufig der LINPACK verwendet. Eine Matrix
wird in ein Links- und Rechts-Dreieck zerlegt. (L · U Dekomposition)
Abbildung : Performance-Entwicklung und Supercomputers Verteilung [WP]
E. Baeck (Uni-DUE)
Grundlagen
6 / 161
Ein wenig Geschichte
Der Computer
Performance and Distribution
OP, Operationen pro Sekunde
FLOP is FLoating Point Operationen pro Sekunde
Als Benchmark wird häufig der LINPACK verwendet. Eine Matrix
wird in ein Links- und Rechts-Dreieck zerlegt. (L · U Dekomposition)
Abbildung : Performance-Entwicklung und Supercomputers Verteilung [WP]
E. Baeck (Uni-DUE)
Grundlagen
6 / 161
Ein wenig Geschichte
Von Neumann Modell
Von Neumann Computer-Modell
Konzept eines speicherprogrammierten
Universalrechner, 1944 von John von
Neumann
Programmierung mit Schaltern und
Kabeln ist zu umständlich.
E. Baeck (Uni-DUE)
Grundlagen
7 / 161
Ein wenig Geschichte
Von Neumann Modell
Von Neumann Computer-Modell
Konzept eines speicherprogrammierten
Universalrechner, 1944 von John von
Neumann
Programmierung mit Schaltern und
Kabeln ist zu umständlich.
Programm wird mit den Daten im
Speicher des Computers in digitaler
Form abgelegt.
E. Baeck (Uni-DUE)
Grundlagen
7 / 161
Ein wenig Geschichte
Von Neumann Modell
Von Neumann Computer-Modell
Konzept eines speicherprogrammierten
Universalrechner, 1944 von John von
Neumann
Programmierung mit Schaltern und
Kabeln ist zu umständlich.
Programm wird mit den Daten im
Speicher des Computers in digitaler
Form abgelegt.
Serielle Dezimalarithmetik des ENIAC,
bei der jede Ziffer mit zehn
Vakuumröhren dargestellt wird, ist
durch parallele Binärarithmetik zu
ersetzen.
E. Baeck (Uni-DUE)
Grundlagen
7 / 161
Ein wenig Geschichte
Von Neumann Modell
Von Neumann Computer-Modell
Konzept eines speicherprogrammierten
Universalrechner, 1944 von John von
Neumann
Programmierung mit Schaltern und
Kabeln ist zu umständlich.
Programm wird mit den Daten im
Speicher des Computers in digitaler
Form abgelegt.
Serielle Dezimalarithmetik des ENIAC,
bei der jede Ziffer mit zehn
Vakuumröhren dargestellt wird, ist
durch parallele Binärarithmetik zu
ersetzen.
E. Baeck (Uni-DUE)
Grundlagen
7 / 161
Ein wenig Geschichte
Die Sprachen
Motivation — Processor-Code
Die Fibunacci Zahlen sind wie folgt definiert
(Karnickel-Populationsentwicklung)
fn = fn−1 + fn−2
for n > 2, mit f0 = 0 und f1 = 1
Der entsprechende Prozessor-Code soll wie folgt aus
sehen.
1
2
3
4
8 B542408
FA027706
B9010000
C84AEBF1
E. Baeck (Uni-DUE)
83 FA0077 06 B80000 0000 C383
B8010000 00C353BB 01000000
008 D0419 83 FA0376 078BD98B
5BC3
Grundlagen
8 / 161
Ein wenig Geschichte
Die Sprachen
Motivation — Assembler-Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
fib :
E. Baeck (Uni-DUE)
mov edx , [ e s p +8]
cmp edx , 0
j a @f
mov eax , 0
ret
@@ :
cmp edx , 2
j a @f
mov eax , 1
ret
@@ :
push e bx
mov ebx , 1
mov ecx , 1
@@ :
l e a eax , [ eb x+e c x ]
cmp edx , 3
j b e @f
mov ebx , e c x
mov ecx , e a x
d e c ed x
jmp @b
@@ :
pop e bx
ret
Grundlagen
9 / 161
Ein wenig Geschichte
Die Sprachen
Erste Sprache — Erster Compiler — Erster Bug
Erster Compiler von Grace Murray Hopper um 1952 für A-O.
Hopper ist auch Mutter von COBOL, für den Bereich BW.
Who is Who?
Grace Hopper begann ihre Arbeit
mit dem MARK I Computer. Links
sieht man sie vor einer UNIVAC I.
E. Baeck (Uni-DUE)
Grundlagen
10 / 161
Ein wenig Geschichte
Die Sprachen
Erste Sprache — Erster Compiler — Erster Bug
Erster Compiler von Grace Murray Hopper um 1952 für A-O.
Hopper ist auch Mutter von COBOL, für den Bereich BW.
Sie hat den ersten Bug dokumentiert.
Und...?
COBOL (COmmon Business Oriented Language) veröffentlicht 1960.
E. Baeck (Uni-DUE)
Grundlagen
10 / 161
Ein wenig Geschichte
Die Sprachen
Erste Sprache — Erster Compiler — Erster Bug
Erster Compiler von Grace Murray Hopper um 1952 für A-O.
Hopper ist auch Mutter von COBOL, für den Bereich BW.
Sie hat den ersten Bug dokumentiert.
Life was simple before World War II. After that, we had systems.
Und...?
Grace Hopper hatte Probleme mit
Motten im MARK II Relais
Computer. Sie prägte den Begriff
Bug für Fehler. Heute benutzten
wir Debugger, also Programme zur
Entfernung der Bugs.
Sie sagte: First actual case of bug
being found!
E. Baeck (Uni-DUE)
Grundlagen
10 / 161
Ein wenig Geschichte
Die Sprachen
Erste Sprache — Erster Compiler — Erster Bug
Erster Compiler von Grace Murray Hopper um 1952 für A-O.
Hopper ist auch Mutter von COBOL, für den Bereich BW.
Sie hat den ersten Bug dokumentiert.
Life was simple before World War II. After that, we had systems.
Somit ist viel zu tun! Fehler machen und Fehler suchen!
E. Baeck (Uni-DUE)
Grundlagen
10 / 161
Ein wenig Geschichte
Die Sprachen
Erste Sprache — Erster Compiler — Erster Bug
Erster Compiler von Grace Murray Hopper um 1952 für A-O.
Hopper ist auch Mutter von COBOL, für den Bereich BW.
Sie hat den ersten Bug dokumentiert.
Life was simple before World War II. After that, we had systems.
Somit ist viel zu tun! Fehler machen und Fehler suchen!
Und...?
Ein gebräuchlicher Debugger für
Webseiten und Javaskripte ist der
Firebug. Er wird bei der
Entwicklung mit dem Browser
Firefox eingesetzt.
E. Baeck (Uni-DUE)
Grundlagen
10 / 161
Ein wenig Geschichte
Die Sprachen
Was ist FORTRAN?
Die erste Version FORTRAN wurde 1957 veröffentlicht.
Entwickelt von John W. Backus bei IBM für das System IBM-704.
Ah!
FORTRAN (Kurzform für FORmula
TRANslator) war erste Sprache, mit
der man mathematische Formeln in
mathematische ähnlicher Notation als
Programm-Code eingeben konnte. Der
Compiler setzt die mathematische
Notation um in Maschinen-Code.
E. Baeck (Uni-DUE)
Grundlagen
11 / 161
Ein wenig Geschichte
Die Sprachen
Was ist FORTRAN?
Die erste Version FORTRAN wurde 1957 veröffentlicht.
Entwickelt von John W. Backus bei IBM für das System IBM-704.
Erste standardisierte Version FORTRAN 66 bzw. FORTRAN IV.
OK!
Die IBM 704 ist er erste
Serien-Computer mit einer
Fließkomma-Arithmetik. Eingeführt
von IBM um 1954. Damit war die
Entwicklung von FORTRAN der
nächste logisch zwingende Schritt.
E. Baeck (Uni-DUE)
Grundlagen
11 / 161
Ein wenig Geschichte
Die Sprachen
Was ist FORTRAN?
Die erste Version FORTRAN wurde 1957 veröffentlicht.
Entwickelt von John W. Backus bei IBM für das System IBM-704.
Erste standardisierte Version FORTRAN 66 bzw. FORTRAN IV.
Nächster Meilenstein um 1977 mit FORTRAN 77.
Und...?
Der neue ISO (International Organization for Standardization) Standard
wurde 1966 veröffentlicht, und wurde bekannt als FORTRAN 66. Sie
wurde zum ersten HLL (High Level Language) Standard der Welt.
E. Baeck (Uni-DUE)
Grundlagen
11 / 161
Ein wenig Geschichte
Die Sprachen
Was ist FORTRAN?
Die erste Version FORTRAN wurde 1957 veröffentlicht.
Entwickelt von John W. Backus bei IBM für das System IBM-704.
Erste standardisierte Version FORTRAN 66 bzw. FORTRAN IV.
Nächster Meilenstein um 1977 mit FORTRAN 77.
dann der Meilenstein um 1990 mit FORTRAN 90.
Und dann...?
1977 wurde FORTRAN 77 veröffentlicht, da FORTRAN 66 keine
strukturierte Programmierung zuließ, bedeutet keine Sprünge, schon gar
nicht zurück und Ablauf immer in einer Richtung.
E. Baeck (Uni-DUE)
Grundlagen
11 / 161
Ein wenig Geschichte
Die Sprachen
Was ist FORTRAN?
Die erste Version FORTRAN wurde 1957 veröffentlicht.
Entwickelt von John W. Backus bei IBM für das System IBM-704.
Erste standardisierte Version FORTRAN 66 bzw. FORTRAN IV.
Nächster Meilenstein um 1977 mit FORTRAN 77.
dann der Meilenstein um 1990 mit FORTRAN 90.
Aha...
1990 wurde FORTRAN 90 veröffentlicht, dass das Konzept der
objektorientierten Programmierung in FORTRAN einführte. Auch ist
anzumerken, dass erst mit FORTRAN 90 Programmspeicher dynamisch,
d.h. nach Anforderung angelegt werden konnte.
E. Baeck (Uni-DUE)
Grundlagen
11 / 161
Ein wenig Geschichte
Die Sprachen
Was ist C++?
Sehr wichtige Sprache, Wurzel vieler moderner Sprachen (Java, C#)
Entwickelt von Bjarne Stroustrup um 1979 bei Bell Labs.
E. Baeck (Uni-DUE)
Grundlagen
12 / 161
Ein wenig Geschichte
Die Sprachen
Was ist C++?
Sehr wichtige Sprache, Wurzel vieler moderner Sprachen (Java, C#)
Entwickelt von Bjarne Stroustrup um 1979 bei Bell Labs.
C++ erweitert C durch ein objektorientiertes Möglichkeiten
(Klassen).
Und...?
Stroustrup begann C mit Optionen
der Sprache Simula anzureichern.
Simula gilt als erste
objektorientierte Sprache.
E. Baeck (Uni-DUE)
Grundlagen
12 / 161
Ein wenig Geschichte
Die Sprachen
Was ist C++?
Sehr wichtige Sprache, Wurzel vieler moderner Sprachen (Java, C#)
Entwickelt von Bjarne Stroustrup um 1979 bei Bell Labs.
C++ erweitert C durch ein objektorientiertes Möglichkeiten
(Klassen).
Großteil des UNIX/LINUX System ist in C geschrieben.
What about that...
Ken Thompson and Dennis Ritchie
werden als Väter der Sprache C
geführt. Sie entwickelten C als Sprache
für ihre UNIX-Entwicklung bei Bell
Labs. Über UNIX (heute auch LINUX
fand C eine rasche Verbreitung.
E. Baeck (Uni-DUE)
Grundlagen
12 / 161
Ein wenig Geschichte
Die Sprachen
Was ist C++?
Sehr wichtige Sprache, Wurzel vieler moderner Sprachen (Java, C#)
Entwickelt von Bjarne Stroustrup um 1979 bei Bell Labs.
C++ erweitert C durch ein objektorientiertes Möglichkeiten
(Klassen).
Großteil des UNIX/LINUX System ist in C geschrieben.
Der C/C++ GCC Compiler ist gewissermaßen das Herz des LINUX
Systems.
E. Baeck (Uni-DUE)
Grundlagen
12 / 161
Ein wenig Geschichte
Die Sprachen
Was ist C++?
Sehr wichtige Sprache, Wurzel vieler moderner Sprachen (Java, C#)
Entwickelt von Bjarne Stroustrup um 1979 bei Bell Labs.
C++ erweitert C durch ein objektorientiertes Möglichkeiten
(Klassen).
Großteil des UNIX/LINUX System ist in C geschrieben.
Der C/C++ GCC Compiler ist gewissermaßen das Herz des LINUX
Systems.
E. Baeck (Uni-DUE)
Grundlagen
12 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Stellenwertsysteme
Ein Zahlensystem wird zur Darstellung von Zahlen verwendet. Eine
Zahl wird dabei nach den Regeln des jeweiligen Zahlensystems als
Folge von Ziffern beziehungsweise Zahlzeichen dargestellt.
In einem Stellenwertsystem (auch polyadisches Zahlensystem)
bestimmt die Stelle (Position) den Wert der jeweiligen Ziffer. Die
niederwertigste Position steht dabei im Allgemeinen rechts.
E. Baeck (Uni-DUE)
Grundlagen
13 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Stellenwertsysteme
Ein Zahlensystem wird zur Darstellung von Zahlen verwendet. Eine
Zahl wird dabei nach den Regeln des jeweiligen Zahlensystems als
Folge von Ziffern beziehungsweise Zahlzeichen dargestellt.
In einem Stellenwertsystem (auch polyadisches Zahlensystem)
bestimmt die Stelle (Position) den Wert der jeweiligen Ziffer. Die
niederwertigste Position steht dabei im Allgemeinen rechts.
Ein Stellenwertsystem hat eine Basis b. Jede Ziffernposition hat einen
Wert, der einer Potenz der Basis entspricht. Für die n-te Position hat
man einen Wert von bn−1 (wenn die niederwertigste Position mit 1
nummeriert ist).
E. Baeck (Uni-DUE)
Grundlagen
13 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Stellenwertsysteme
Ein Zahlensystem wird zur Darstellung von Zahlen verwendet. Eine
Zahl wird dabei nach den Regeln des jeweiligen Zahlensystems als
Folge von Ziffern beziehungsweise Zahlzeichen dargestellt.
In einem Stellenwertsystem (auch polyadisches Zahlensystem)
bestimmt die Stelle (Position) den Wert der jeweiligen Ziffer. Die
niederwertigste Position steht dabei im Allgemeinen rechts.
Ein Stellenwertsystem hat eine Basis b. Jede Ziffernposition hat einen
Wert, der einer Potenz der Basis entspricht. Für die n-te Position hat
man einen Wert von bn−1 (wenn die niederwertigste Position mit 1
nummeriert ist).
Der Zahlenwert ergibt sich wie folgt, mit zi ∈ [0, b − 1].
Zahlenwert = zn · b n + . . . + zi · b i + . . . + z0 · b 0 .
E. Baeck (Uni-DUE)
Grundlagen
(1)
13 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Stellenwertsysteme
Ein Zahlensystem wird zur Darstellung von Zahlen verwendet. Eine
Zahl wird dabei nach den Regeln des jeweiligen Zahlensystems als
Folge von Ziffern beziehungsweise Zahlzeichen dargestellt.
In einem Stellenwertsystem (auch polyadisches Zahlensystem)
bestimmt die Stelle (Position) den Wert der jeweiligen Ziffer. Die
niederwertigste Position steht dabei im Allgemeinen rechts.
Ein Stellenwertsystem hat eine Basis b. Jede Ziffernposition hat einen
Wert, der einer Potenz der Basis entspricht. Für die n-te Position hat
man einen Wert von bn−1 (wenn die niederwertigste Position mit 1
nummeriert ist).
Der Zahlenwert ergibt sich wie folgt, mit zi ∈ [0, b − 1].
Zahlenwert = zn · b n + . . . + zi · b i + . . . + z0 · b 0 .
E. Baeck (Uni-DUE)
Grundlagen
(1)
13 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Konvertierung, ein Beispiel
Konvertierung von 1425 in das Zahlensystem zur Basis b = 3.
Schritt 1: Konvertierung in das 10-System
Schritt 2a: Konvertierung in das 3-System vollständig über 10-System
Beispiel
1425 = 1 · 52 + 4 · 51 + 2 · 50
= 2510 + 2010 + 210
= 4710
E. Baeck (Uni-DUE)
Grundlagen
14 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Konvertierung, ein Beispiel
Konvertierung von 1425 in das Zahlensystem zur Basis b = 3.
Schritt 1: Konvertierung in das 10-System
Schritt 2a: Konvertierung in das 3-System vollständig über 10-System
Schritt 2b: Ziffernweise Konvertierung in das 3-System
Beispiel
4710 = 1 · 33 + 2 · 32 + 0 · 31 + 2 · 30
= 4510 + 010 + 210
; durch 3 teilbar + Rest
= 12023
; 3 · 15, 1510 = 1203
E. Baeck (Uni-DUE)
Grundlagen
14 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Konvertierung, ein Beispiel
Konvertierung von 1425 in das Zahlensystem zur Basis b = 3.
Schritt 1: Konvertierung in das 10-System
Schritt 2a: Konvertierung in das 3-System vollständig über 10-System
Schritt 2b: Ziffernweise Konvertierung in das 3-System
Beispiel
1425 = 1 · 52 + 4 · 51 + 2 · 50
= 2510 + 2010 + 210
= 2213 + 2023 + 23
= 12023
E. Baeck (Uni-DUE)
Grundlagen
14 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Konvertierung, ein Beispiel
Konvertierung einer Zahl durch b-Division
1
Division der Zahl durch die Zielbasis b.
2
Divisionsrest ist linksseitige neue Ziffer.
Beispiel: 14210 ⇒ 354b=6
142 wird durch 6 dividiert. Dies ergibt 23 Rest 4
23 wird durch 6 dividiert. Dies ergibt 3 Rest 5
3 wird durch 6 dividiert. Dies ergibt 0 Rest 3
E. Baeck (Uni-DUE)
Grundlagen
15 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Konvertierung, ein Beispiel
Konvertierung einer Zahl durch b-Division
1
Division der Zahl durch die Zielbasis b.
2
Divisionsrest ist linksseitige neue Ziffer.
3
Falls ganzzahlige Division = 0 ⇒ Ende
Beispiel: 14210 ⇒ 354b=6
142 wird durch 6 dividiert. Dies ergibt 23 Rest 4
23 wird durch 6 dividiert. Dies ergibt 3 Rest 5
3 wird durch 6 dividiert. Dies ergibt 0 Rest 3
E. Baeck (Uni-DUE)
Grundlagen
15 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Konvertierung, ein Beispiel
Konvertierung einer Zahl durch b-Division
1
Division der Zahl durch die Zielbasis b.
2
Divisionsrest ist linksseitige neue Ziffer.
3
Falls ganzzahlige Division = 0 ⇒ Ende
4
Division des letzten Divisionsergebnisses durch b.
Beispiel: 14210 ⇒ 354b=6
142 wird durch 6 dividiert. Dies ergibt 23 Rest 4
23 wird durch 6 dividiert. Dies ergibt 3 Rest 5
3 wird durch 6 dividiert. Dies ergibt 0 Rest 3
E. Baeck (Uni-DUE)
Grundlagen
15 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Konvertierung, ein Beispiel
Konvertierung einer Zahl durch b-Division
1
Division der Zahl durch die Zielbasis b.
2
Divisionsrest ist linksseitige neue Ziffer.
3
Falls ganzzahlige Division = 0 ⇒ Ende
4
Division des letzten Divisionsergebnisses durch b.
5
Divisionsrest ist linksseitige neue Ziffer.
Beispiel: 14210 ⇒ 354b=6
142 wird durch 6 dividiert. Dies ergibt 23 Rest 4
23 wird durch 6 dividiert. Dies ergibt 3 Rest 5
3 wird durch 6 dividiert. Dies ergibt 0 Rest 3
E. Baeck (Uni-DUE)
Grundlagen
15 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Konvertierung, ein Beispiel
Konvertierung einer Zahl durch b-Division
1
Division der Zahl durch die Zielbasis b.
2
Divisionsrest ist linksseitige neue Ziffer.
3
Falls ganzzahlige Division = 0 ⇒ Ende
4
Division des letzten Divisionsergebnisses durch b.
5
Divisionsrest ist linksseitige neue Ziffer.
6
Gehe zu Schritt 3.
Beispiel: 14210 ⇒ 354b=6
142 wird durch 6 dividiert. Dies ergibt 23 Rest 4
23 wird durch 6 dividiert. Dies ergibt 3 Rest 5
3 wird durch 6 dividiert. Dies ergibt 0 Rest 3
E. Baeck (Uni-DUE)
Grundlagen
15 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Konvertierung, ein Beispiel
Konvertierung einer Zahl durch b-Division
1
Division der Zahl durch die Zielbasis b.
2
Divisionsrest ist linksseitige neue Ziffer.
3
Falls ganzzahlige Division = 0 ⇒ Ende
4
Division des letzten Divisionsergebnisses durch b.
5
Divisionsrest ist linksseitige neue Ziffer.
6
Gehe zu Schritt 3.
Beispiel: 14210 ⇒ 354b=6
142 wird durch 6 dividiert. Dies ergibt 23 Rest 4
23 wird durch 6 dividiert. Dies ergibt 3 Rest 5
3 wird durch 6 dividiert. Dies ergibt 0 Rest 3
E. Baeck (Uni-DUE)
Grundlagen
15 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Spezielle Zahlensysteme
Dezimales Zahlensystem zur Basis 10.
Binäre Zahlensystem (Dualsystem, Binärsystem) zur Basis 2.
Und...
Wir haben zehn Finger an der Hand und beginnen damit zu zählen.
E. Baeck (Uni-DUE)
Grundlagen
16 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Spezielle Zahlensysteme
Dezimales Zahlensystem zur Basis 10.
Binäre Zahlensystem (Dualsystem, Binärsystem) zur Basis 2.
Oktalsystem ist Zahlensystem zur Basis 8.
Und...
Das Dualsystem wurde von Gottfried Wilhelm Leibniz am Anfang des
18. Jahrhunderts in seinem Artikel Explication de l’Arithmétique
Binaire (Histoire de l’Academie Royale des Sciences 1703,
veröffentlicht in Paris 1705,[2]) vollständig dokumentiert.
Das Dualsystem beschreibt Systeme mit 2 Zuständen. Ein/Aus.
Hell/Dunkel. 0/1.
E. Baeck (Uni-DUE)
Grundlagen
16 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Spezielle Zahlensysteme
Dezimales Zahlensystem zur Basis 10.
Binäre Zahlensystem (Dualsystem, Binärsystem) zur Basis 2.
Oktalsystem ist Zahlensystem zur Basis 8.
Hexadezimale Zahlensystem zur Basis 16.
Wir packen drei binäre Ziffern ein...
Binäre Zahlen sind aufgrund ihrer Länge unhandlich. 3 binäre Ziffern
können in eine oktale Ziffer gepackt werden, zi ∈ [0, 7], 78 = 1112
Das Oktalsystem wurde früher in der Computertechnik verwendet.
E. Baeck (Uni-DUE)
Grundlagen
16 / 161
Zahlensysteme, Bits und Bytes
Zahlensysteme
Spezielle Zahlensysteme
Dezimales Zahlensystem zur Basis 10.
Binäre Zahlensystem (Dualsystem, Binärsystem) zur Basis 2.
Oktalsystem ist Zahlensystem zur Basis 8.
Hexadezimale Zahlensystem zur Basis 16.
Wir packen vier binäre Ziffern ein...
Binäre Zahlen sind aufgrund ihrer Länge unhandlich. 4 binäre Ziffern
können in eine hexadezimale Ziffer gepackt werden, zi ∈ [0, 9, A, ..F ],
F16 = 11112
Das Hexadezimale Zahlensystem wird heute in der Computertechnik
verwendet.
E. Baeck (Uni-DUE)
Grundlagen
16 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Das Bit
Das Bit ist die elementare Einheit der Informatik.
Von Mathematiker John W. Tukey vermutlich 1946,
nach anderen Quellen schon 1943, vorgeschlagen.
E. Baeck (Uni-DUE)
Grundlagen
17 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Das Bit
Das Bit ist die elementare Einheit der Informatik.
Von Mathematiker John W. Tukey vermutlich 1946,
nach anderen Quellen schon 1943, vorgeschlagen.
Schriftlich erstmals erwähnt 1948 in Claude Shannons berühmter
Arbeit A Mathematical Theory of Communication.
E. Baeck (Uni-DUE)
Grundlagen
17 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Das Bit
Das Bit ist die elementare Einheit der Informatik.
Von Mathematiker John W. Tukey vermutlich 1946,
nach anderen Quellen schon 1943, vorgeschlagen.
Schriftlich erstmals erwähnt 1948 in Claude Shannons berühmter
Arbeit A Mathematical Theory of Communication.
George Boole verwendet das Bit als Wahrheitswert.
E. Baeck (Uni-DUE)
Grundlagen
17 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Das Bit
Das Bit ist die elementare Einheit der Informatik.
Von Mathematiker John W. Tukey vermutlich 1946,
nach anderen Quellen schon 1943, vorgeschlagen.
Schriftlich erstmals erwähnt 1948 in Claude Shannons berühmter
Arbeit A Mathematical Theory of Communication.
George Boole verwendet das Bit als Wahrheitswert.
E. Baeck (Uni-DUE)
Grundlagen
17 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Vielfache eines Bit’s
SI Präfixe
Name
Binär Präfixe nach IEC
Symbol
E. Baeck (Uni-DUE)
Wert
Name
Grundlagen
Symbol
Wert
18 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Vielfache eines Bit’s
SI Präfixe
Name
Kilobit
Binär Präfixe nach IEC
Symbol
kbit
E. Baeck (Uni-DUE)
Wert
103
Name
Kibibit
Grundlagen
Symbol
Kibit
Wert
210
18 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Vielfache eines Bit’s
SI Präfixe
Name
Kilobit
Megabit
Binär Präfixe nach IEC
Symbol
kbit
Mbit
E. Baeck (Uni-DUE)
Wert
103
106
Name
Kibibit
Mebibit
Grundlagen
Symbol
Kibit
Mibit
Wert
210
220
18 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Vielfache eines Bit’s
SI Präfixe
Name
Kilobit
Megabit
Gigabit
Binär Präfixe nach IEC
Symbol
kbit
Mbit
Gbit
E. Baeck (Uni-DUE)
Wert
103
106
109
Name
Kibibit
Mebibit
Gibibit
Grundlagen
Symbol
Kibit
Mibit
Gibit
Wert
210
220
230
18 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Vielfache eines Bit’s
SI Präfixe
Name
Kilobit
Megabit
Gigabit
Terabit
Binär Präfixe nach IEC
Symbol
kbit
Mbit
Gbit
Tbit
E. Baeck (Uni-DUE)
Wert
103
106
109
1012
Name
Kibibit
Mebibit
Gibibit
Tebibit
Grundlagen
Symbol
Kibit
Mibit
Gibit
Tibit
Wert
210
220
230
240
18 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Das Byte
Bits werden in Bytes (Bissen) zusammengefasst.
Ursprünglich Anzahl der Bits zur Kodierung eines einzelnen
Text-Schriftzeichens.
E. Baeck (Uni-DUE)
Grundlagen
19 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Das Byte
Bits werden in Bytes (Bissen) zusammengefasst.
Ursprünglich Anzahl der Bits zur Kodierung eines einzelnen
Text-Schriftzeichens.
Telex (TELeprinter EXchange) fasst 5 Bits zu einem Byte zusammen.
E. Baeck (Uni-DUE)
Grundlagen
19 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Das Byte
Bits werden in Bytes (Bissen) zusammengefasst.
Ursprünglich Anzahl der Bits zur Kodierung eines einzelnen
Text-Schriftzeichens.
Telex (TELeprinter EXchange) fasst 5 Bits zu einem Byte zusammen.
Seit IBM-PC werden 8 Bits zu einem Byte zusammen gefasst.
Keine Heimorgel...
Telex, der Fernschreiber.
Internet unserer Großeltern.
E. Baeck (Uni-DUE)
Grundlagen
19 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Das Byte
Bits werden in Bytes (Bissen) zusammengefasst.
Ursprünglich Anzahl der Bits zur Kodierung eines einzelnen
Text-Schriftzeichens.
Telex (TELeprinter EXchange) fasst 5 Bits zu einem Byte zusammen.
Seit IBM-PC werden 8 Bits zu einem Byte zusammen gefasst.
Der Abraham unser Computerwelt...
5150 oder PC wurde 1985
eingeführt. Er basiert auf dem
Intel Prozessor 8086. Typischer
Arbeitsplatz Mitte der 80iger.
E. Baeck (Uni-DUE)
Grundlagen
19 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Das Wort
In einem Wort werden mehrere Bytes zusammengefasst
Ein Wort wird verwendet, um Daten zu speichern. Das Wort ist die
elementare Speichereinheit eines Computerprogramms.
E. Baeck (Uni-DUE)
Grundlagen
20 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Das Wort
In einem Wort werden mehrere Bytes zusammengefasst
Ein Wort wird verwendet, um Daten zu speichern. Das Wort ist die
elementare Speichereinheit eines Computerprogramms.
Ganze Zahlen werden in Worten von 1, 2, 4 und 8 Bytes
abgespeichert.
Und...
Auch das unteilbare Atom, zerfällt
in kleinere Teilchen
(Elementarteilchen), wenn man
kräftig genug drauf schlägt.
E. Baeck (Uni-DUE)
Grundlagen
20 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Das Wort
In einem Wort werden mehrere Bytes zusammengefasst
Ein Wort wird verwendet, um Daten zu speichern. Das Wort ist die
elementare Speichereinheit eines Computerprogramms.
Ganze Zahlen werden in Worten von 1, 2, 4 und 8 Bytes
abgespeichert.
Fließkommazahlen werden gängiger weise in 4 oder 8 Byte Worten
abgespeichert.
Aber...
Die Verfügbarkeit der Worte ist i.A. abhängig von der Plattform. Auf
32-Bit Systemen gibt es keine 8-Byte Worte für ganze Zahlen. 1 Byte
entspricht 2 Hex-Ziffern, 2 Bytes 4 und 4 Bytes 8 Hex-Ziffern. 1 Byte
entspricht 3 oktalen-Ziffern, 3 + 3 + 2 ⇒ damit 1 Bit Verschnitt.
E. Baeck (Uni-DUE)
Grundlagen
20 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Das Wort
In einem Wort werden mehrere Bytes zusammengefasst
Ein Wort wird verwendet, um Daten zu speichern. Das Wort ist die
elementare Speichereinheit eines Computerprogramms.
Ganze Zahlen werden in Worten von 1, 2, 4 und 8 Bytes
abgespeichert.
Fließkommazahlen werden gängiger weise in 4 oder 8 Byte Worten
abgespeichert.
Bei Floats nach IEEE ist alles ein wenig komplizierter...
Vorzeichen Bit (Bit 31)
Exponenten (Bit-23 bis Bit-30)
Mantisse (Bit-0 bis Bit-22)
E. Baeck (Uni-DUE)
Grundlagen
20 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Negative Zahlen und Komplemente
Als Stellenkomplement wird eine Zahl bezeichnet, die bei einer
vorgegeben Breite die komplementäre Ziffernfolge enthält
(zkompl = b − 1 − zorg ).
b-Komplement ist Stellenkomplement +1.
Und hier zwei Beispiele...
10012 ⇒ 01102 ,
die Breite ist 4,
die Basis b = 2
E. Baeck (Uni-DUE)
12348 ⇒ 7765438 ,
die Breite ist 6,
die Basis b = 8
Grundlagen
21 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Negative Zahlen und Komplemente
Als Stellenkomplement wird eine Zahl bezeichnet, die bei einer
vorgegeben Breite die komplementäre Ziffernfolge enthält
(zkompl = b − 1 − zorg ).
b-Komplement ist Stellenkomplement +1.
Die Darstellung einer negativen Zahl ist das b-Komplement.
Das b-Komplement zu den vorherigen
10012 ⇒ 01102 + 1 = 01112 ,
die Breite ist 4,
die Basis b = 2
E. Baeck (Uni-DUE)
Beispielen...
12348 ⇒ 7765438 + 1 = 7765448 ,
die Breite ist 6,
die Basis b = 8
Grundlagen
21 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Negative Zahlen und Komplemente
Als Stellenkomplement wird eine Zahl bezeichnet, die bei einer
vorgegeben Breite die komplementäre Ziffernfolge enthält
(zkompl = b − 1 − zorg ).
b-Komplement ist Stellenkomplement +1.
Die Darstellung einer negativen Zahl ist das b-Komplement.
Mit der Darstellung negativer Zahlen als b-Komplement benötigen wir
im Rechenwerk keine Subtraktion.
Warum das denn? Ok, hier der Beweis nach a + −a = 0?...
10012 + 01112 = 100002
12348 + 7765448 = 10000008 ,
Führende Ziffer ist Überlauf und
Führende Ziffer ist Überlauf und
fällt weg ⇒ Ergebnis = 0!
fällt weg ⇒ Ergebnis = 0!
E. Baeck (Uni-DUE)
Grundlagen
21 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Negative Zahlen und Komplemente
Als Stellenkomplement wird eine Zahl bezeichnet, die bei einer
vorgegeben Breite die komplementäre Ziffernfolge enthält
(zkompl = b − 1 − zorg ).
b-Komplement ist Stellenkomplement +1.
Die Darstellung einer negativen Zahl ist das b-Komplement.
Mit der Darstellung negativer Zahlen als b-Komplement benötigen wir
im Rechenwerk keine Subtraktion.
Auf unseren gängigen Computern werden die negativen Zahlen als
b-Kopmplemente dargestellt. Dies lässt sich leicht erkennen, wenn sie
negative Zahlen z.B. im Debugger hexadezimal anzeigen lassen.
E. Baeck (Uni-DUE)
Grundlagen
21 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Negative Zahlen und Komplemente
Als Stellenkomplement wird eine Zahl bezeichnet, die bei einer
vorgegeben Breite die komplementäre Ziffernfolge enthält
(zkompl = b − 1 − zorg ).
b-Komplement ist Stellenkomplement +1.
Die Darstellung einer negativen Zahl ist das b-Komplement.
Mit der Darstellung negativer Zahlen als b-Komplement benötigen wir
im Rechenwerk keine Subtraktion.
Auf unseren gängigen Computern werden die negativen Zahlen als
b-Kopmplemente dargestellt. Dies lässt sich leicht erkennen, wenn sie
negative Zahlen z.B. im Debugger hexadezimal anzeigen lassen.
E. Baeck (Uni-DUE)
Grundlagen
21 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Wertebereich für vorzeichenlose Zahle
Bei vorzeichenlosen Zahlen entspricht das Bit-Muster des Wortes
exakt einer binären Zahl.
Der Wertebereich lässt sich damit sehr einfach mit hexadezimalen
Zahlen beschreiben.
E. Baeck (Uni-DUE)
Grundlagen
22 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Wertebereich für vorzeichenlose Zahle
Bei vorzeichenlosen Zahlen entspricht das Bit-Muster des Wortes
exakt einer binären Zahl.
Der Wertebereich lässt sich damit sehr einfach mit hexadezimalen
Zahlen beschreiben.
Damit kann die Wahl der Wortbreite bei der Programmentwicklung
sehr wichtig werden.
Und...
Bytes
1
2
4
von
02
02
02
bis
111111112
11 · · · 112
11 · · · 112
E. Baeck (Uni-DUE)
von
016
016
016
bis
FF16
FFFF16
FFFFFFFF16
Grundlagen
von
010
010
010
bis
25510
6553510
429496729510
22 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Wertebereich für vorzeichenlose Zahle
Bei vorzeichenlosen Zahlen entspricht das Bit-Muster des Wortes
exakt einer binären Zahl.
Der Wertebereich lässt sich damit sehr einfach mit hexadezimalen
Zahlen beschreiben.
Damit kann die Wahl der Wortbreite bei der Programmentwicklung
sehr wichtig werden.
Wo gibt es denn da Probleme?
Problem
EXCEL 2003, Spaltenanzahl
EXCEL 2003, Zeilenanzahl
ACCESS Datenbankgröße
E. Baeck (Uni-DUE)
Beschränkung
auf 256 beschränkt ⇒ 1 Byte
auf 65536 beschränkt ⇒ 2 Bytes
< 2 GiBytes, 4294967295/2 ≈ 2 · 109
Grundlagen
22 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Wertebereich für vorzeichenbehaftete Zahle
Die maximale Zahl ergibt sich aus der binären Zahl, die gegeben ist
aus allen Bits abzüglich des führenden (Vorzeichenbit).
Die minimale Zahl ergibt aus der um 1 inkrementieren maximalen
Zahl zuzüglich des Vorzeichens.
E. Baeck (Uni-DUE)
Grundlagen
23 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Wertebereich für vorzeichenbehaftete Zahle
Die maximale Zahl ergibt sich aus der binären Zahl, die gegeben ist
aus allen Bits abzüglich des führenden (Vorzeichenbit).
Die minimale Zahl ergibt aus der um 1 inkrementieren maximalen
Zahl zuzüglich des Vorzeichens.
Der Wertebereich lässt sich damit sehr einfach mit hexadezimalen
Zahlen beschreiben.
E. Baeck (Uni-DUE)
Grundlagen
23 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Wertebereich für vorzeichenbehaftete Zahle
Die maximale Zahl ergibt sich aus der binären Zahl, die gegeben ist
aus allen Bits abzüglich des führenden (Vorzeichenbit).
Die minimale Zahl ergibt aus der um 1 inkrementieren maximalen
Zahl zuzüglich des Vorzeichens.
Der Wertebereich lässt sich damit sehr einfach mit hexadezimalen
Zahlen beschreiben.
Die Wortbreite beschränkt die Dimension eines Programms
(z.B. Anzahl Stäbe, Anzahl Punkte).
Und...
Bytes
1
2
4
von
8016
800016
8000000016
E. Baeck (Uni-DUE)
bis
7F16
7FFF16
7FFFFFFF16
Grundlagen
von
−12810
3276810
214748364810
bis
12710
3276710
214748364710
23 / 161
Zahlensysteme, Bits und Bytes
Bits und Bytes
Wertebereich für vorzeichenbehaftete Zahle
Die maximale Zahl ergibt sich aus der binären Zahl, die gegeben ist
aus allen Bits abzüglich des führenden (Vorzeichenbit).
Die minimale Zahl ergibt aus der um 1 inkrementieren maximalen
Zahl zuzüglich des Vorzeichens.
Der Wertebereich lässt sich damit sehr einfach mit hexadezimalen
Zahlen beschreiben.
Die Wortbreite beschränkt die Dimension eines Programms
(z.B. Anzahl Stäbe, Anzahl Punkte).
Wo gab es denn Probleme?
Unter MS-DOS wurde in Berechnungsprogrammen (FE-Programme) aus
Platzgründen oftmals mit vorzeichenbehafteten 2 Byte - Nummern
adressiert. Damit ergab sich bei mehr als 32767 Objekten ein Überlauf.
E. Baeck (Uni-DUE)
Grundlagen
23 / 161
Prozedurales VBA I
3
Allgemeines
Was ist eine Skriptsprache?
VBA-Format
4
VBA-Datentypen
Datentypen
5
Operatoren
Arithmetische Operatoren
Bool’sche Operatoren
Verkettungsoperatoren
6
Verzweigungen
IF-Verzweigung
7
Schleifen
FOR-Schleife
DO-Schleife
While-Schleife
E. Baeck (Uni-DUE)
Prozedurales VBA
24 / 161
Prozedurales VBA II
8
Felder
Statische Felder
Dynamische Felder
9
Formel Kompilationen
Kompilationsregeln
10
Programmablaufplan PAP
Symbole
Anwendung
11
Funktionen, Unterprogramme
Allgemeines
Unterprogramme
Funktionen
Rekursive Funktionen
12
Datenstrukturen
Modellierungsschritte
E. Baeck (Uni-DUE)
Prozedurales VBA
25 / 161
Prozedurales VBA III
Datenstrukturen
ER-Diagramm
Stabwerk
Plattenträger
13
Dateien
Textdateien
Beispiel
E. Baeck (Uni-DUE)
Prozedurales VBA
26 / 161
Allgemeines
Allgemeines
E. Baeck (Uni-DUE)
Prozedurales VBA
27 / 161
Allgemeines
Was ist eine Skriptsprache?
Was ist eine Skriptsprache?
Eine Skriptsprache umfasst eine Menge von Anweisungen, z.B.
Wiederholungen und Abfragen.
Eine Skriptsprache ist in der Lage, Daten zu speichern und zu
manipulieren (Variablen).
E. Baeck (Uni-DUE)
Prozedurales VBA
28 / 161
Allgemeines
Was ist eine Skriptsprache?
Was ist eine Skriptsprache?
Eine Skriptsprache umfasst eine Menge von Anweisungen, z.B.
Wiederholungen und Abfragen.
Eine Skriptsprache ist in der Lage, Daten zu speichern und zu
manipulieren (Variablen).
Eine Skriptsprache enthält eine Menge von Operatoren zur
Bearbeitung von Datenobjekten.
E. Baeck (Uni-DUE)
Prozedurales VBA
28 / 161
Allgemeines
Was ist eine Skriptsprache?
Was ist eine Skriptsprache?
Eine Skriptsprache umfasst eine Menge von Anweisungen, z.B.
Wiederholungen und Abfragen.
Eine Skriptsprache ist in der Lage, Daten zu speichern und zu
manipulieren (Variablen).
Eine Skriptsprache enthält eine Menge von Operatoren zur
Bearbeitung von Datenobjekten.
Ein Programm wird in Textform in einem beliebigen Text-Editor
erstellt.
E. Baeck (Uni-DUE)
Prozedurales VBA
28 / 161
Allgemeines
Was ist eine Skriptsprache?
Was ist eine Skriptsprache?
Eine Skriptsprache umfasst eine Menge von Anweisungen, z.B.
Wiederholungen und Abfragen.
Eine Skriptsprache ist in der Lage, Daten zu speichern und zu
manipulieren (Variablen).
Eine Skriptsprache enthält eine Menge von Operatoren zur
Bearbeitung von Datenobjekten.
Ein Programm wird in Textform in einem beliebigen Text-Editor
erstellt.
Das Programm wird als Liste von Anweisungen (auch wiederholend)
von Beginn zum Ende hin sequentiell abgearbeitet.
E. Baeck (Uni-DUE)
Prozedurales VBA
28 / 161
Allgemeines
Was ist eine Skriptsprache?
Was ist eine Skriptsprache?
Eine Skriptsprache umfasst eine Menge von Anweisungen, z.B.
Wiederholungen und Abfragen.
Eine Skriptsprache ist in der Lage, Daten zu speichern und zu
manipulieren (Variablen).
Eine Skriptsprache enthält eine Menge von Operatoren zur
Bearbeitung von Datenobjekten.
Ein Programm wird in Textform in einem beliebigen Text-Editor
erstellt.
Das Programm wird als Liste von Anweisungen (auch wiederholend)
von Beginn zum Ende hin sequentiell abgearbeitet.
Ziel einer Skriptsprache ist es, Prozesse zu automatisieren.
E. Baeck (Uni-DUE)
Prozedurales VBA
28 / 161
Allgemeines
Was ist eine Skriptsprache?
Was ist eine Skriptsprache?
Eine Skriptsprache umfasst eine Menge von Anweisungen, z.B.
Wiederholungen und Abfragen.
Eine Skriptsprache ist in der Lage, Daten zu speichern und zu
manipulieren (Variablen).
Eine Skriptsprache enthält eine Menge von Operatoren zur
Bearbeitung von Datenobjekten.
Ein Programm wird in Textform in einem beliebigen Text-Editor
erstellt.
Das Programm wird als Liste von Anweisungen (auch wiederholend)
von Beginn zum Ende hin sequentiell abgearbeitet.
Ziel einer Skriptsprache ist es, Prozesse zu automatisieren.
Skriptprogramme werden zumeist interpretierend ausgeführt (keine
Kompilation).
E. Baeck (Uni-DUE)
Prozedurales VBA
28 / 161
Allgemeines
Was ist eine Skriptsprache?
Was ist eine Skriptsprache?
Eine Skriptsprache umfasst eine Menge von Anweisungen, z.B.
Wiederholungen und Abfragen.
Eine Skriptsprache ist in der Lage, Daten zu speichern und zu
manipulieren (Variablen).
Eine Skriptsprache enthält eine Menge von Operatoren zur
Bearbeitung von Datenobjekten.
Ein Programm wird in Textform in einem beliebigen Text-Editor
erstellt.
Das Programm wird als Liste von Anweisungen (auch wiederholend)
von Beginn zum Ende hin sequentiell abgearbeitet.
Ziel einer Skriptsprache ist es, Prozesse zu automatisieren.
Skriptprogramme werden zumeist interpretierend ausgeführt (keine
Kompilation).
E. Baeck (Uni-DUE)
Prozedurales VBA
28 / 161
Allgemeines
Was ist eine Skriptsprache?
Welche Skriptsprachen gibt es?
BATCH-Skripte, Listen von Anweisungen, die in einer Konsole
ausgeführt werden können.
StandAlone Skriptsprachen (ohne Anbindung an eine Anwendung).
Automatisches setzen eines Pfades in der Konsole
:: Kommentarzeile
:: Setzen der Pfaderweiterung fuer MinGW-Compiler
:: 64bit OS W7
path=%path%;c:\program files (x86)\MinGW\bin;
E. Baeck (Uni-DUE)
Prozedurales VBA
29 / 161
Allgemeines
Was ist eine Skriptsprache?
Welche Skriptsprachen gibt es?
BATCH-Skripte, Listen von Anweisungen, die in einer Konsole
ausgeführt werden können.
StandAlone Skriptsprachen (ohne Anbindung an eine Anwendung).
Eingebettete Skriptsprachen. Zur Automation von Programmabläufen.
Beispiele sind...
Konsolenskripte: BAT (Windows), bash (Linux)
Python, TCL, LUA, etc.
E. Baeck (Uni-DUE)
Prozedurales VBA
29 / 161
Allgemeines
Was ist eine Skriptsprache?
Welche Skriptsprachen gibt es?
BATCH-Skripte, Listen von Anweisungen, die in einer Konsole
ausgeführt werden können.
StandAlone Skriptsprachen (ohne Anbindung an eine Anwendung).
Eingebettete Skriptsprachen. Zur Automation von Programmabläufen.
Beispiele sind...
Python in ANSYS/ABAQUS/KRATOS (FE-Programme)
VBA in MS-Office/AutoCAD u.a. Anwendungen
LUA in LaTeX (luaLaTeX, Satzprogramm)
TCL in openSees (Opensource FE-Programm)
E. Baeck (Uni-DUE)
Prozedurales VBA
29 / 161
Allgemeines
VBA-Format
Format der VBA Sprache
Skript ist eine einfache Textdatei (*.bas: Basic).
Die Anweisungen sind nicht case sensitiv.
E. Baeck (Uni-DUE)
Prozedurales VBA
30 / 161
Allgemeines
VBA-Format
Format der VBA Sprache
Skript ist eine einfache Textdatei (*.bas: Basic).
Die Anweisungen sind nicht case sensitiv.
Eine Anweisung wird durch kein Abschlusszeichen beendet.
A ist gleich a!
DIM A AS INTEGER
a = 5
E. Baeck (Uni-DUE)
Prozedurales VBA
30 / 161
Allgemeines
VBA-Format
Format der VBA Sprache
Skript ist eine einfache Textdatei (*.bas: Basic).
Die Anweisungen sind nicht case sensitiv.
Eine Anweisung wird durch kein Abschlusszeichen beendet.
Mehrere Anweisungen in einer Zeile werden durch ein : getrennt.
A ist gleich a!
DIM A AS INTEGER
a = 5
E. Baeck (Uni-DUE)
Prozedurales VBA
30 / 161
Allgemeines
VBA-Format
Format der VBA Sprache
Skript ist eine einfache Textdatei (*.bas: Basic).
Die Anweisungen sind nicht case sensitiv.
Eine Anweisung wird durch kein Abschlusszeichen beendet.
Mehrere Anweisungen in einer Zeile werden durch ein : getrennt.
Eine Zeile wird durch die nächste erweitert, wenn sie mit
abgeschlossen wird.
Mehrere Anweisungen in einer Zeile!
dim a as integer
dim b as integer
a = 5 : b = 4
E. Baeck (Uni-DUE)
Prozedurales VBA
30 / 161
Allgemeines
VBA-Format
Format der VBA Sprache
Skript ist eine einfache Textdatei (*.bas: Basic).
Die Anweisungen sind nicht case sensitiv.
Eine Anweisung wird durch kein Abschlusszeichen beendet.
Mehrere Anweisungen in einer Zeile werden durch ein : getrennt.
Eine Zeile wird durch die nächste erweitert, wenn sie mit
abgeschlossen wird.
Zeile wird fort gesetzt!
DIM A AS INTEGER
a = 5
+ 4
E. Baeck (Uni-DUE)
Prozedurales VBA
30 / 161
VBA-Datentypen
VBA-Datentypen
E. Baeck (Uni-DUE)
Prozedurales VBA
31 / 161
VBA-Datentypen
Datentypen
Elementare Datentypen
Datentyp
Byte
Bytes
1
E. Baeck (Uni-DUE)
Suffix
Beschreibung
0 - 255
Prozedurales VBA
32 / 161
VBA-Datentypen
Datentypen
Elementare Datentypen
Datentyp
Byte
Boolean
Bytes
1
2
E. Baeck (Uni-DUE)
Suffix
Beschreibung
0 - 255
Wahrheitswert (-1:TRUE, ffff; 0:FALSE)
Prozedurales VBA
32 / 161
VBA-Datentypen
Datentypen
Elementare Datentypen
Datentyp
Byte
Boolean
Integer
Bytes
1
2
2
E. Baeck (Uni-DUE)
Suffix
%
Beschreibung
0 - 255
Wahrheitswert (-1:TRUE, ffff; 0:FALSE)
Ganze Zahl (z.B. n%)
Prozedurales VBA
32 / 161
VBA-Datentypen
Datentypen
Elementare Datentypen
Datentyp
Byte
Boolean
Integer
Long
Bytes
1
2
2
4
E. Baeck (Uni-DUE)
Suffix
%
&
Beschreibung
0 - 255
Wahrheitswert (-1:TRUE, ffff; 0:FALSE)
Ganze Zahl (z.B. n%)
Ganze Zahl (z.B. n&)
Prozedurales VBA
32 / 161
VBA-Datentypen
Datentypen
Elementare Datentypen
Datentyp
Byte
Boolean
Integer
Long
Single
Bytes
1
2
2
4
4
E. Baeck (Uni-DUE)
Suffix
%
&
!
Beschreibung
0 - 255
Wahrheitswert (-1:TRUE, ffff; 0:FALSE)
Ganze Zahl (z.B. n%)
Ganze Zahl (z.B. n&)
Gleitkommazahl (7 Stellen genau)
Prozedurales VBA
32 / 161
VBA-Datentypen
Datentypen
Elementare Datentypen
Datentyp
Byte
Boolean
Integer
Long
Single
Double
Bytes
1
2
2
4
4
8
E. Baeck (Uni-DUE)
Suffix
%
&
!
#
Beschreibung
0 - 255
Wahrheitswert (-1:TRUE, ffff; 0:FALSE)
Ganze Zahl (z.B. n%)
Ganze Zahl (z.B. n&)
Gleitkommazahl (7 Stellen genau)
Gleitkommazahl (16 Stellen genau)
Prozedurales VBA
32 / 161
VBA-Datentypen
Datentypen
Elementare Datentypen
Datentyp
Byte
Boolean
Integer
Long
Single
Double
String
Bytes
1
2
2
4
4
8
E. Baeck (Uni-DUE)
Suffix
%
&
!
#
$
Beschreibung
0 - 255
Wahrheitswert (-1:TRUE, ffff; 0:FALSE)
Ganze Zahl (z.B. n%)
Ganze Zahl (z.B. n&)
Gleitkommazahl (7 Stellen genau)
Gleitkommazahl (16 Stellen genau)
Variable Länge. Max. 2 ∗ 109 Zeichen.
Prozedurales VBA
32 / 161
VBA-Datentypen
Datentypen
Elementare Datentypen
Datentyp
Byte
Boolean
Integer
Long
Single
Double
String
Variant
Bytes
1
2
2
4
4
8
E. Baeck (Uni-DUE)
Suffix
%
&
!
#
$
Beschreibung
0 - 255
Wahrheitswert (-1:TRUE, ffff; 0:FALSE)
Ganze Zahl (z.B. n%)
Ganze Zahl (z.B. n&)
Gleitkommazahl (7 Stellen genau)
Gleitkommazahl (16 Stellen genau)
Variable Länge. Max. 2 ∗ 109 Zeichen.
Container für alles Mögliche
Prozedurales VBA
32 / 161
VBA-Datentypen
Datentypen
Elementare Datentypen
Datentyp
Byte
Boolean
Integer
Long
Single
Double
String
Variant
Object
Bytes
1
2
2
4
4
8
4
E. Baeck (Uni-DUE)
Suffix
%
&
!
#
$
Beschreibung
0 - 255
Wahrheitswert (-1:TRUE, ffff; 0:FALSE)
Ganze Zahl (z.B. n%)
Ganze Zahl (z.B. n&)
Gleitkommazahl (7 Stellen genau)
Gleitkommazahl (16 Stellen genau)
Variable Länge. Max. 2 ∗ 109 Zeichen.
Container für alles Mögliche
Verweis auf ein Objekt-Instanz
Prozedurales VBA
32 / 161
VBA-Datentypen
Datentypen
Elementare Datentypen
Datentyp
Byte
Boolean
Integer
Long
Single
Double
String
Variant
Object
Bytes
1
2
2
4
4
8
4
E. Baeck (Uni-DUE)
Suffix
%
&
!
#
$
Beschreibung
0 - 255
Wahrheitswert (-1:TRUE, ffff; 0:FALSE)
Ganze Zahl (z.B. n%)
Ganze Zahl (z.B. n&)
Gleitkommazahl (7 Stellen genau)
Gleitkommazahl (16 Stellen genau)
Variable Länge. Max. 2 ∗ 109 Zeichen.
Container für alles Mögliche
Verweis auf ein Objekt-Instanz
Prozedurales VBA
32 / 161
VBA-Datentypen
Datentypen
Darstellung der ganzen Zahlen durch Bits
Ein vorzeichenloses voll gesetztes Halb-Byte 11112
Ein vorzeichenloses voll gesetztes Byte FF16
E. Baeck (Uni-DUE)
Prozedurales VBA
F16
1510
25510
33 / 161
VBA-Datentypen
Datentypen
Darstellung der ganzen Zahlen durch Bits
Ein vorzeichenloses voll gesetztes Halb-Byte 11112
Ein vorzeichenloses voll gesetztes Byte FF16
F16
1510
25510
Ein vorzeichenbehaftetes positiv voll gesetztes Halb-Byte
01112
716
710
E. Baeck (Uni-DUE)
Prozedurales VBA
33 / 161
VBA-Datentypen
Datentypen
Darstellung der ganzen Zahlen durch Bits
Ein vorzeichenloses voll gesetztes Halb-Byte 11112
Ein vorzeichenloses voll gesetztes Byte FF16
F16
1510
25510
Ein vorzeichenbehaftetes positiv voll gesetztes Halb-Byte
01112
716
710
Ein vorzeichenbehaftetes voll gesetztes Byte 7FF
E. Baeck (Uni-DUE)
Prozedurales VBA
12710
33 / 161
VBA-Datentypen
Datentypen
Darstellung der ganzen Zahlen durch Bits
Ein vorzeichenloses voll gesetztes Halb-Byte 11112
Ein vorzeichenloses voll gesetztes Byte FF16
F16
1510
25510
Ein vorzeichenbehaftetes positiv voll gesetztes Halb-Byte
01112
716
710
Ein vorzeichenbehaftetes voll gesetztes Byte 7FF
12710
Vorzeichenbehaftete kleinste Zahl im Halb-Byte
10002
816
−810
E. Baeck (Uni-DUE)
Prozedurales VBA
33 / 161
VBA-Datentypen
Datentypen
Darstellung der ganzen Zahlen durch Bits
Ein vorzeichenloses voll gesetztes Halb-Byte 11112
Ein vorzeichenloses voll gesetztes Byte FF16
F16
1510
25510
Ein vorzeichenbehaftetes positiv voll gesetztes Halb-Byte
01112
716
710
Ein vorzeichenbehaftetes voll gesetztes Byte 7FF
12710
Vorzeichenbehaftete kleinste Zahl im Halb-Byte
10002
816
−810
Vorzeichenbehaftete kleinste Zahl in einem Byte 80F
E. Baeck (Uni-DUE)
Prozedurales VBA
−12810
33 / 161
VBA-Datentypen
Datentypen
Darstellung der ganzen Zahlen durch Bits
Ein vorzeichenloses voll gesetztes Halb-Byte 11112
Ein vorzeichenloses voll gesetztes Byte FF16
F16
1510
25510
Ein vorzeichenbehaftetes positiv voll gesetztes Halb-Byte
01112
716
710
Ein vorzeichenbehaftetes voll gesetztes Byte 7FF
12710
Vorzeichenbehaftete kleinste Zahl im Halb-Byte
10002
816
−810
Vorzeichenbehaftete kleinste Zahl in einem Byte 80F
E. Baeck (Uni-DUE)
Prozedurales VBA
−12810
33 / 161
VBA-Datentypen
Datentypen
Wertebereiche der Basisdatentypen
Datentyp
Byte
Bytes
1
E. Baeck (Uni-DUE)
Wertebereich
00
Prozedurales VBA
FF
34 / 161
VBA-Datentypen
Datentypen
Wertebereiche der Basisdatentypen
Datentyp
Byte
Bytes
1
Integer
2
E. Baeck (Uni-DUE)
Wertebereich
80
Prozedurales VBA
00
FF
00
7F
FF
34 / 161
VBA-Datentypen
Datentypen
Wertebereiche der Basisdatentypen
Datentyp
Byte
Bytes
1
Integer
2
Boolean
2
E. Baeck (Uni-DUE)
Wertebereich
80
00
00
00
FF
00
7F
FF
FF
FF
= false
Prozedurales VBA
= true
34 / 161
VBA-Datentypen
Datentypen
Wertebereiche der Basisdatentypen
Datentyp
Byte
Bytes
1
Integer
2
Boolean
2
Long
4
E. Baeck (Uni-DUE)
Wertebereich
80
00
80
00
00
00
FF
00
7F
FF
FF
FF
7F
FF
= false
00
Prozedurales VBA
00
= true
FF
FF
34 / 161
VBA-Datentypen
Datentypen
Wertebereiche der Basisdatentypen
Datentyp
Byte
Bytes
1
Integer
2
Boolean
2
Long
4
Single
4
E. Baeck (Uni-DUE)
Wertebereich
80
00
00
00
FF
00
7F
FF
FF
FF
= false
= true
80
00
00
00
7F
FF
FF
FF
minimaler Wert: ±1.175494351 · 10−38
maximaler Wert: ±3.402823466 · 10+38
1 Bit Vorzeichen, 8 Bits Exponent, 23 Bits Mantisse
Prozedurales VBA
34 / 161
VBA-Datentypen
Datentypen
Wertebereiche der Basisdatentypen
Datentyp
Byte
Bytes
1
Integer
2
Boolean
2
Long
4
Single
4
Double
8
E. Baeck (Uni-DUE)
Wertebereich
80
00
00
00
FF
00
7F
FF
FF
FF
= false
= true
80
00
00
00
7F
FF
FF
FF
minimaler Wert: ±1.175494351 · 10−38
maximaler Wert: ±3.402823466 · 10+38
1 Bit Vorzeichen, 8 Bits Exponent, 23 Bits Mantisse
minimaler Wert: ±1.7976931348623157 · 10−308
maximaler Wert: ±1.7976931348623157 · 10+308
1 Bit Vorzeichen, 11 Bits Exponent, 52 Bits Mantisse
Prozedurales VBA
34 / 161
VBA-Datentypen
Datentypen
Wertebereiche der Basisdatentypen
Datentyp
Byte
Bytes
1
Integer
2
Boolean
2
Long
4
Single
4
Double
8
E. Baeck (Uni-DUE)
Wertebereich
80
00
00
00
FF
00
7F
FF
FF
FF
= false
= true
80
00
00
00
7F
FF
FF
FF
minimaler Wert: ±1.175494351 · 10−38
maximaler Wert: ±3.402823466 · 10+38
1 Bit Vorzeichen, 8 Bits Exponent, 23 Bits Mantisse
minimaler Wert: ±1.7976931348623157 · 10−308
maximaler Wert: ±1.7976931348623157 · 10+308
1 Bit Vorzeichen, 11 Bits Exponent, 52 Bits Mantisse
Prozedurales VBA
34 / 161
VBA-Datentypen
Datentypen
Deklaration von Variablen
Variablen können implizit durch Zuweisung erzeugt werden.
Es wird ein ⇒ Variant-Typ verwendet!
Der Typ einer Variablen kann durch Anhängen eines Suffixes an die
Variablenbezeichnung fest gelegt werden. Die Variable wird durch
Zuweisung eines Datenelements erzeugt.
Wie sieht das denn aus?
a1 = 5
a2 = "Hallo Du!"
a3 = 3.14
E. Baeck (Uni-DUE)
a1 ist integer in variant Variable.
a2 ist string in variant Variable.
a3 ist double in variant Variable.
Prozedurales VBA
35 / 161
VBA-Datentypen
Datentypen
Deklaration von Variablen
Variablen können implizit durch Zuweisung erzeugt werden.
Es wird ein ⇒ Variant-Typ verwendet!
Der Typ einer Variablen kann durch Anhängen eines Suffixes an die
Variablenbezeichnung fest gelegt werden. Die Variable wird durch
Zuweisung eines Datenelements erzeugt.
Die explizite Deklaration erfolgt mit der Anweisung
dim [name] as [datentyp]
Wie
a1%
a2$
a3#
sieht das denn aus?
= 5
= "Hallo Du!"
= 3.14
E. Baeck (Uni-DUE)
a1% ist eine integer Variable.
a2$ ist eine string Variable.
a3# ist eine double Variable.
Prozedurales VBA
35 / 161
VBA-Datentypen
Datentypen
Deklaration von Variablen
Variablen können implizit durch Zuweisung erzeugt werden.
Es wird ein ⇒ Variant-Typ verwendet!
Der Typ einer Variablen kann durch Anhängen eines Suffixes an die
Variablenbezeichnung fest gelegt werden. Die Variable wird durch
Zuweisung eines Datenelements erzeugt.
Die explizite Deklaration erfolgt mit der Anweisung
dim [name] as [datentyp]
Die Anweisung option explicit erzwingt eine explizite Deklaration.
Werden Variablen implizit deklariert, wird ein Fehler ausgegeben.
Wie
dim
dim
dim
sieht das denn aus?
a1 as integer
a2 as string
a3 as double
E. Baeck (Uni-DUE)
a1 ist eine integer Variable.
a2 ist eine string Variable.
a3 ist eine double Variable.
Prozedurales VBA
35 / 161
VBA-Datentypen
Datentypen
Deklaration von Variablen
Variablen können implizit durch Zuweisung erzeugt werden.
Es wird ein ⇒ Variant-Typ verwendet!
Der Typ einer Variablen kann durch Anhängen eines Suffixes an die
Variablenbezeichnung fest gelegt werden. Die Variable wird durch
Zuweisung eines Datenelements erzeugt.
Die explizite Deklaration erfolgt mit der Anweisung
dim [name] as [datentyp]
Die Anweisung option explicit erzwingt eine explizite Deklaration.
Werden Variablen implizit deklariert, wird ein Fehler ausgegeben.
Wie
dim
dim
dim
sieht das denn aus?
a1 as integer
a2 as string
a3 as double
E. Baeck (Uni-DUE)
a1 ist eine integer Variable.
a2 ist eine string Variable.
a3 ist eine double Variable.
Prozedurales VBA
35 / 161
Operatoren
Operatoren
E. Baeck (Uni-DUE)
Prozedurales VBA
36 / 161
Operatoren
Arithmetische Operatoren
Arithmetische Operatoren
Arithmetische Operatoren halten sich weitgehend an die
mathematische Notation.
Potenzierung als Operator verfügbar. Besser als C!
Operator
+
*
/
^
\
mod
Beispiel
x = y+2
x = y-2
x = y*2
x = y/2
x = 4^2
x = 5 \ 2
x = 3 mod 2
E. Baeck (Uni-DUE)
Anmerkung
Addition zweier Werte.
Subtraktion zweier Werte.
Multiplikation zweier Werte.
Division zweier Werte.
Potenzierung (x=16).
Ganzzahlige Division (x=1).
Rest aus ganzzahliger Division (x=1).
Prozedurales VBA
37 / 161
Operatoren
Arithmetische Operatoren
Arithmetische Operatoren
Arithmetische Operatoren halten sich weitgehend an die
mathematische Notation.
Potenzierung als Operator verfügbar. Besser als C!
mod und \ werden z.B. bei Zahlensystemkonvertierung benötigt.
Operator
+
*
/
^
\
mod
Beispiel
x = y+2
x = y-2
x = y*2
x = y/2
x = 4^2
x = 5 \ 2
x = 3 mod 2
E. Baeck (Uni-DUE)
Anmerkung
Addition zweier Werte.
Subtraktion zweier Werte.
Multiplikation zweier Werte.
Division zweier Werte.
Potenzierung (x=16).
Ganzzahlige Division (x=1).
Rest aus ganzzahliger Division (x=1).
Prozedurales VBA
37 / 161
Operatoren
Arithmetische Operatoren
Arithmetische Operatoren
Arithmetische Operatoren halten sich weitgehend an die
mathematische Notation.
Potenzierung als Operator verfügbar. Besser als C!
mod und \ werden z.B. bei Zahlensystemkonvertierung benötigt.
Operator
+
*
/
^
\
mod
Beispiel
x = y+2
x = y-2
x = y*2
x = y/2
x = 4^2
x = 5 \ 2
x = 3 mod 2
E. Baeck (Uni-DUE)
Anmerkung
Addition zweier Werte.
Subtraktion zweier Werte.
Multiplikation zweier Werte.
Division zweier Werte.
Potenzierung (x=16).
Ganzzahlige Division (x=1).
Rest aus ganzzahliger Division (x=1).
Prozedurales VBA
37 / 161
Operatoren
Bool’sche Operatoren
Vergleichsoperatoren
Vergleichsoperatoren halten sich weitgehend an die mathematische
Notation.
Sie werden in Abfragen eingesetzt.
Operator
<
>
<=
>=
=
<>
Beispiel
x = 2 < 3
x = 2 > 3
x = 2 <= 3
x = 2 >= 3
x = (2 = 3)
x = (2 <> 3)
E. Baeck (Uni-DUE)
Anmerkung
Kleiner-Operator (x=true).
Größer-Operator (x=false).
Kleiner-Gleich-Operator (x=true).
Größer-Gleich-Operator (x=false).
Gleichheits-Operator (x=false).
Ungleichheits-Operator (x=true).
Prozedurales VBA
38 / 161
Operatoren
Bool’sche Operatoren
Vergleichsoperatoren
Vergleichsoperatoren halten sich weitgehend an die mathematische
Notation.
Sie werden in Abfragen eingesetzt.
Bitte gleich beachten. Weicht ab von der C-Welt (==).
Operator
<
>
<=
>=
=
<>
Beispiel
x = 2 < 3
x = 2 > 3
x = 2 <= 3
x = 2 >= 3
x = (2 = 3)
x = (2 <> 3)
E. Baeck (Uni-DUE)
Anmerkung
Kleiner-Operator (x=true).
Größer-Operator (x=false).
Kleiner-Gleich-Operator (x=true).
Größer-Gleich-Operator (x=false).
Gleichheits-Operator (x=false).
Ungleichheits-Operator (x=true).
Prozedurales VBA
38 / 161
Operatoren
Bool’sche Operatoren
Vergleichsoperatoren
Vergleichsoperatoren halten sich weitgehend an die mathematische
Notation.
Sie werden in Abfragen eingesetzt.
Bitte gleich beachten. Weicht ab von der C-Welt (==).
Bitte ungleich beachten. Weicht ab von der C-Welt (!=).
Operator
<
>
<=
>=
=
<>
Beispiel
x = 2 < 3
x = 2 > 3
x = 2 <= 3
x = 2 >= 3
x = (2 = 3)
x = (2 <> 3)
E. Baeck (Uni-DUE)
Anmerkung
Kleiner-Operator (x=true).
Größer-Operator (x=false).
Kleiner-Gleich-Operator (x=true).
Größer-Gleich-Operator (x=false).
Gleichheits-Operator (x=false).
Ungleichheits-Operator (x=true).
Prozedurales VBA
38 / 161
Operatoren
Bool’sche Operatoren
Vergleichsoperatoren
Vergleichsoperatoren halten sich weitgehend an die mathematische
Notation.
Sie werden in Abfragen eingesetzt.
Bitte gleich beachten. Weicht ab von der C-Welt (==).
Bitte ungleich beachten. Weicht ab von der C-Welt (!=).
!!! Vorsicht !!!
Die Zuweisung = verwendet den selben Operator wie die Gleichheit.
Operator
<
>
<=
>=
=
<>
Beispiel
x = 2 < 3
x = 2 > 3
x = 2 <= 3
x = 2 >= 3
x = (2 = 3)
x = (2 <> 3)
E. Baeck (Uni-DUE)
Anmerkung
Kleiner-Operator (x=true).
Größer-Operator (x=false).
Kleiner-Gleich-Operator (x=true).
Größer-Gleich-Operator (x=false).
Gleichheits-Operator (x=false).
Ungleichheits-Operator (x=true).
Prozedurales VBA
38 / 161
Operatoren
Bool’sche Operatoren
Vergleichsoperatoren
Vergleichsoperatoren halten sich weitgehend an die mathematische
Notation.
Sie werden in Abfragen eingesetzt.
Bitte gleich beachten. Weicht ab von der C-Welt (==).
Bitte ungleich beachten. Weicht ab von der C-Welt (!=).
!!! Vorsicht !!!
Die Zuweisung = verwendet den selben Operator wie die Gleichheit.
Operator
<
>
<=
>=
=
<>
Beispiel
x = 2 < 3
x = 2 > 3
x = 2 <= 3
x = 2 >= 3
x = (2 = 3)
x = (2 <> 3)
E. Baeck (Uni-DUE)
Anmerkung
Kleiner-Operator (x=true).
Größer-Operator (x=false).
Kleiner-Gleich-Operator (x=true).
Größer-Gleich-Operator (x=false).
Gleichheits-Operator (x=false).
Ungleichheits-Operator (x=true).
Prozedurales VBA
38 / 161
Operatoren
Bool’sche Operatoren
Operatoren für Bool’sche Ausdrücke
Folgende Operatoren verknüpfen bool’sche Ausdrücke.
Die Notation lehnt sich an, an die FORTRAN-Operatoren.
Operator
not
and
or
xor
equ
Beispiel
x = not (2 < 3)
x = (2<3) and (4<5)
x = (2<3) or (4>5)
x = (2<3) xor (4<5)
x = (2>3) equ (4>5)
E. Baeck (Uni-DUE)
Anmerkung
Kleiner-Operator (x=false).
UND-Operator (x=true).
ODER-Operator (x=true).
EXL-ODER-Operator (x=false).
Gleichheits-Operator (x=true).
Prozedurales VBA
39 / 161
Operatoren
Bool’sche Operatoren
Operatoren für Bool’sche Ausdrücke
Folgende Operatoren verknüpfen bool’sche Ausdrücke.
Die Notation lehnt sich an, an die FORTRAN-Operatoren.
C beeinflusste Sprachen gehen einen vollkommen anderen Weg.
Operator
not
and
or
xor
equ
Beispiel
x = not (2 < 3)
x = (2<3) and (4<5)
x = (2<3) or (4>5)
x = (2<3) xor (4<5)
x = (2>3) equ (4>5)
E. Baeck (Uni-DUE)
Anmerkung
Kleiner-Operator (x=false).
UND-Operator (x=true).
ODER-Operator (x=true).
EXL-ODER-Operator (x=false).
Gleichheits-Operator (x=true).
Prozedurales VBA
39 / 161
Operatoren
Bool’sche Operatoren
Operatoren für Bool’sche Ausdrücke
Folgende Operatoren verknüpfen bool’sche Ausdrücke.
Die Notation lehnt sich an, an die FORTRAN-Operatoren.
C beeinflusste Sprachen gehen einen vollkommen anderen Weg.
Operator
not
and
or
xor
equ
Beispiel
x = not (2 < 3)
x = (2<3) and (4<5)
x = (2<3) or (4>5)
x = (2<3) xor (4<5)
x = (2>3) equ (4>5)
E. Baeck (Uni-DUE)
Anmerkung
Kleiner-Operator (x=false).
UND-Operator (x=true).
ODER-Operator (x=true).
EXL-ODER-Operator (x=false).
Gleichheits-Operator (x=true).
Prozedurales VBA
39 / 161
Operatoren
Verkettungsoperatoren
Verkettungsoperatoren
Zeichenketten werden in VBA mit dem + Operator verkettet.
In C sind hierfür spezielle Konvertierungsfunktionen erforderlich.
Operator
+
Beispiel
x = "Hallo " + "Welt"
&
x = "summe=" & (1+2)
E. Baeck (Uni-DUE)
Anmerkung
Verketten
(x="Hallo
Verketten
(x="summe
Prozedurales VBA
Text und
Welt").
Text und
= 3").
Text
Wert
40 / 161
Operatoren
Verkettungsoperatoren
Verkettungsoperatoren
Zeichenketten werden in VBA mit dem + Operator verkettet.
In C sind hierfür spezielle Konvertierungsfunktionen erforderlich.
In VBA kann man andererseits nur mit Aufwand Tabellen schreiben.
Operator
+
Beispiel
x = "Hallo " + "Welt"
&
x = "summe=" & (1+2)
E. Baeck (Uni-DUE)
Anmerkung
Verketten
(x="Hallo
Verketten
(x="summe
Prozedurales VBA
Text und
Welt").
Text und
= 3").
Text
Wert
40 / 161
Operatoren
Verkettungsoperatoren
Verkettungsoperatoren
Zeichenketten werden in VBA mit dem + Operator verkettet.
In C sind hierfür spezielle Konvertierungsfunktionen erforderlich.
In VBA kann man andererseits nur mit Aufwand Tabellen schreiben.
Arbeiten mit Fließkommazahlen ist für MS eher peripher.
Operator
+
Beispiel
x = "Hallo " + "Welt"
&
x = "summe=" & (1+2)
E. Baeck (Uni-DUE)
Anmerkung
Verketten
(x="Hallo
Verketten
(x="summe
Prozedurales VBA
Text und
Welt").
Text und
= 3").
Text
Wert
40 / 161
Operatoren
Verkettungsoperatoren
Verkettungsoperatoren
Zeichenketten werden in VBA mit dem + Operator verkettet.
In C sind hierfür spezielle Konvertierungsfunktionen erforderlich.
In VBA kann man andererseits nur mit Aufwand Tabellen schreiben.
Arbeiten mit Fließkommazahlen ist für MS eher peripher.
Operator
+
Beispiel
x = "Hallo " + "Welt"
&
x = "summe=" & (1+2)
E. Baeck (Uni-DUE)
Anmerkung
Verketten
(x="Hallo
Verketten
(x="summe
Prozedurales VBA
Text und
Welt").
Text und
= 3").
Text
Wert
40 / 161
Verzweigungen
Verzweigungen
E. Baeck (Uni-DUE)
Prozedurales VBA
41 / 161
Verzweigungen
IF-Verzweigung
IF -Verzweigungen
Die klassische Verzweigung erfolgt in VBA mit if.
Hierbei sind einige Varianten möglich.
Die Verzweigung wird mit if eingeleitet. Nach einem bool’schen
Ausdruck wird der Code Block mit then eingeleitet. Der Abschluss
erfolgt mit end if
E. Baeck (Uni-DUE)
Prozedurales VBA
42 / 161
Verzweigungen
IF-Verzweigung
IF -Verzweigungen
Die klassische Verzweigung erfolgt in VBA mit if.
Hierbei sind einige Varianten möglich.
Die Verzweigung wird mit if eingeleitet. Nach einem bool’schen
Ausdruck wird der Code Block mit then eingeleitet. Der Abschluss
erfolgt mit end if
Für einzeilige if Anweisungen kann auf einen Abschluss mit end if
verzichtet werden.
Das mehrzeilige If
if (i=4) then
i = i+2 : i = i/2
end if
E. Baeck (Uni-DUE)
Zwei und mehr Anweisungen wie
hier sind mit end if abzuschließen.
Prozedurales VBA
42 / 161
Verzweigungen
IF-Verzweigung
IF -Verzweigungen
Die klassische Verzweigung erfolgt in VBA mit if.
Hierbei sind einige Varianten möglich.
Die Verzweigung wird mit if eingeleitet. Nach einem bool’schen
Ausdruck wird der Code Block mit then eingeleitet. Der Abschluss
erfolgt mit end if
Für einzeilige if Anweisungen kann auf einen Abschluss mit end if
verzichtet werden.
Optional kann mit else ein Anweisungsblock eingefügt werden.
Das einzeilige If
if (i=4) then i = i+2
E. Baeck (Uni-DUE)
Für i = 4 wird i um 2
inkrementiert.
Prozedurales VBA
42 / 161
Verzweigungen
IF-Verzweigung
IF -Verzweigungen
Die klassische Verzweigung erfolgt in VBA mit if.
Hierbei sind einige Varianten möglich.
Die Verzweigung wird mit if eingeleitet. Nach einem bool’schen
Ausdruck wird der Code Block mit then eingeleitet. Der Abschluss
erfolgt mit end if
Für einzeilige if Anweisungen kann auf einen Abschluss mit end if
verzichtet werden.
Optional kann mit else ein Anweisungsblock eingefügt werden.
Zweifache Verzweigung mit mehrhzeiligen Code-Blöcken
Für i = 4 wird i um 2
if (i=4) then
inkrementiert, ansonsten um 5.
i = i+2
else
i = i+5
end if
E. Baeck (Uni-DUE)
Prozedurales VBA
42 / 161
Verzweigungen
IF-Verzweigung
Mehrfachverzweigung mit IF -Anweisung
Mit elseif können beliebig viele Verzweigungen aufgebaut werden.
Zu beachten ist, dass elseif zusammen geschrieben wird und end if
aus zwei Worten besteht.
Verzweigung bei der Lösung einer quadratischen Gleichung
⇐ Eine reele Lösung.
if
(d = 0) then
x = -b / (2.*a)
⇐ Zwei reele Lösungen.
elseif (d > 0) then
x1 = (-b +sqr(d))/ (2.*a)
x2 = (-b -sqr(d))/ (2.*a)
⇐ Keine reele Lösung.
else
debug.print "Keine reelen Lösungen"
end if
E. Baeck (Uni-DUE)
Prozedurales VBA
43 / 161
Verzweigungen
IF-Verzweigung
Mehrfachverzweigung mit IF -Anweisung
Mit elseif können beliebig viele Verzweigungen aufgebaut werden.
Zu beachten ist, dass elseif zusammen geschrieben wird und end if
aus zwei Worten besteht.
Verzweigung bei der Lösung einer quadratischen Gleichung
⇐ Eine reele Lösung.
if
(d = 0) then
x = -b / (2.*a)
⇐ Zwei reele Lösungen.
elseif (d > 0) then
x1 = (-b +sqr(d))/ (2.*a)
x2 = (-b -sqr(d))/ (2.*a)
⇐ Keine reele Lösung.
else
debug.print "Keine reelen Lösungen"
end if
E. Baeck (Uni-DUE)
Prozedurales VBA
43 / 161
Schleifen
Schleifen
E. Baeck (Uni-DUE)
Prozedurales VBA
44 / 161
Schleifen
FOR-Schleife
Explizite Wiederholungen: die FOR-Schleife
Indizierte Wiederholungen können mit einer for - Schleife
implementiert werden. Sie wird mit next abgeschlossen.
Die Index-Variable wird zunächst initialisiert.
Und hier das Beispiel: Summe aller geraden Zahlen von 4 bis 16
s = 0
for i=4 to 16 step 2
s = s + i
next
E. Baeck (Uni-DUE)
Prozedurales VBA
45 / 161
Schleifen
FOR-Schleife
Explizite Wiederholungen: die FOR-Schleife
Indizierte Wiederholungen können mit einer for - Schleife
implementiert werden. Sie wird mit next abgeschlossen.
Die Index-Variable wird zunächst initialisiert.
to legt den Endwert des Schleifenindexes gesetzt.
Und hier das Beispiel: Summe aller geraden Zahlen von 4 bis 16
s = 0
for i=4 to 16 step 2
s = s + i
next
E. Baeck (Uni-DUE)
Prozedurales VBA
45 / 161
Schleifen
FOR-Schleife
Explizite Wiederholungen: die FOR-Schleife
Indizierte Wiederholungen können mit einer for - Schleife
implementiert werden. Sie wird mit next abgeschlossen.
Die Index-Variable wird zunächst initialisiert.
to legt den Endwert des Schleifenindexes gesetzt.
step legt die Schrittweite fest. Wird sie nicht vorgegeben, so wird die
Standardschrittweite 1 verwendet.
Und hier das Beispiel: Summe aller geraden Zahlen von 4 bis 16
s = 0
for i=4 to 16 step 2
s = s + i
next
E. Baeck (Uni-DUE)
Prozedurales VBA
45 / 161
Schleifen
FOR-Schleife
Explizite Wiederholungen: die FOR-Schleife
Indizierte Wiederholungen können mit einer for - Schleife
implementiert werden. Sie wird mit next abgeschlossen.
Die Index-Variable wird zunächst initialisiert.
to legt den Endwert des Schleifenindexes gesetzt.
step legt die Schrittweite fest. Wird sie nicht vorgegeben, so wird die
Standardschrittweite 1 verwendet.
Alle Anweisungen zwischen der for und der next -Zeile werden in der
Schleife ausgeführt.
Und hier das Beispiel: Summe aller geraden Zahlen von 4 bis 16
s = 0
for i=4 to 16 step 2
s = s + i
next
E. Baeck (Uni-DUE)
Prozedurales VBA
45 / 161
Schleifen
FOR-Schleife
Explizite Wiederholungen: die FOR-Schleife
Indizierte Wiederholungen können mit einer for - Schleife
implementiert werden. Sie wird mit next abgeschlossen.
Die Index-Variable wird zunächst initialisiert.
to legt den Endwert des Schleifenindexes gesetzt.
step legt die Schrittweite fest. Wird sie nicht vorgegeben, so wird die
Standardschrittweite 1 verwendet.
Alle Anweisungen zwischen der for und der next -Zeile werden in der
Schleife ausgeführt.
Und hier das Beispiel: Summe aller geraden Zahlen von 4 bis 16
s = 0
for i=4 to 16 step 2
s = s + i
next
E. Baeck (Uni-DUE)
Prozedurales VBA
45 / 161
Schleifen
FOR-Schleife
Ein Beispiel, die Fakultät mit For Schleife
Es ist die Faktultät für eine beliebige natürliche Zahl n zu ermitteln.
Die Berechnung erfolgt nach folgender Beziehnung.
n! = 1 · 2 · · · · · (n − 1) · n =
n
Y
i
i=1
E. Baeck (Uni-DUE)
Prozedurales VBA
46 / 161
Schleifen
FOR-Schleife
Ein Beispiel, die Fakultät mit For Schleife
Es ist die Faktultät für eine beliebige natürliche Zahl n zu ermitteln.
Die Berechnung erfolgt nach folgender Beziehnung.
n! = 1 · 2 · · · · · (n − 1) · n =
n
Y
i
i=1
Wir sehen in i den Schleifenindex einer for-Schleife.
E. Baeck (Uni-DUE)
Prozedurales VBA
46 / 161
Schleifen
FOR-Schleife
Ein Beispiel, die Fakultät mit For Schleife
Es ist die Faktultät für eine beliebige natürliche Zahl n zu ermitteln.
Die Berechnung erfolgt nach folgender Beziehnung.
n! = 1 · 2 · · · · · (n − 1) · n =
n
Y
i
i=1
Wir sehen in i den Schleifenindex einer for-Schleife.
Die Schleife läuft bei einer Vorbesetzung von 1 von i = 2 bis n.
E. Baeck (Uni-DUE)
Prozedurales VBA
46 / 161
Schleifen
FOR-Schleife
Ein Beispiel, die Fakultät mit For Schleife
Es ist die Faktultät für eine beliebige natürliche Zahl n zu ermitteln.
Die Berechnung erfolgt nach folgender Beziehnung.
n! = 1 · 2 · · · · · (n − 1) · n =
n
Y
i
i=1
Wir sehen in i den Schleifenindex einer for-Schleife.
Die Schleife läuft bei einer Vorbesetzung von 1 von i = 2 bis n.
Hier das Programm...
dim j
dim i
dim n
n = 4
for i
f =
next
as integer
as integer
as integer
: f = 1
= 2 to n
f*i
E. Baeck (Uni-DUE)
Alle Variablen werden explizit deklariert. f, n, i
intitialisieren. Das Produkt ist mit 1 zu
initialisieren. Der neue Wert von f ist der alte
Wert von f multipliziert mit dem
Simmationsindex i. Der Summantionsindex ist
explizit zu inkrementieren.
Prozedurales VBA
46 / 161
Schleifen
FOR-Schleife
Abbruch einer For Schleife
Eine for Schleife wird mit der Anweisung exit for vorzeitig
abgebrochen.
Es gibt keine Anweisung um nur einen Schleifendurchgang
abzubrechen. Brutaler Ausweg wäre ein goto zum Schleifenende.
Summe aller ungeraden Zahlen, deren Summe kleiner ist als 7
s = 0
For i = 1 To 10 Step 2
If s + i > 7 Then Exit For
s = s + i
Next
E. Baeck (Uni-DUE)
⇐ hier wird abgebrochen, wenn die
Summe größer ist als 7.
Prozedurales VBA
47 / 161
Schleifen
FOR-Schleife
Abbruch einer For Schleife
Eine for Schleife wird mit der Anweisung exit for vorzeitig
abgebrochen.
Es gibt keine Anweisung um nur einen Schleifendurchgang
abzubrechen. Brutaler Ausweg wäre ein goto zum Schleifenende.
Ein goto führt einen Sprung aus zu einer Sprungmarke. Eine
Sprungmarke ist gegeben durch eine Bezeichnung abgeschlossen
durch einen :.
Summe gerader Zahlen ohne Step
s = 0
for i=1 to 10
if i mod 2 > 0 then goto nextfor
s = s + i
nextfor:
next
E. Baeck (Uni-DUE)
Prozedurales VBA
⇐ hier wird die Schleife
übersprungen, wenn ein
ungerades i vorliegt.
47 / 161
Schleifen
FOR-Schleife
Abbruch einer For Schleife
Eine for Schleife wird mit der Anweisung exit for vorzeitig
abgebrochen.
Es gibt keine Anweisung um nur einen Schleifendurchgang
abzubrechen. Brutaler Ausweg wäre ein goto zum Schleifenende.
Ein goto führt einen Sprung aus zu einer Sprungmarke. Eine
Sprungmarke ist gegeben durch eine Bezeichnung abgeschlossen
durch einen :.
Summe gerader Zahlen ohne Step
s = 0
for i=1 to 10
if i mod 2 > 0 then goto nextfor
s = s + i
nextfor:
next
E. Baeck (Uni-DUE)
Prozedurales VBA
⇐ hier wird die Schleife
übersprungen, wenn ein
ungerades i vorliegt.
47 / 161
Schleifen
DO-Schleife
Implizite Wiederholungen: die DO-Schleife
Implizite Wiederholungen werden mit einer do - Schleife
implementiert. Sie wird mit loop abgeschlossen.
Die Abbruchbedingung kann mit while oder until an den Anfang oder
das Ende der Schleife gesetzt werden.
Und hier das Beispiel: Summe aller geraden Zahlen von 4 bis 16
s = 0 : i = 4
s = 0 : i = 4
do while i <= 16
do
s = s + i
s = s + i
i = i +2
i = i +2
loop
loop while i < 16
E. Baeck (Uni-DUE)
Prozedurales VBA
48 / 161
Schleifen
DO-Schleife
Implizite Wiederholungen: die DO-Schleife
Implizite Wiederholungen werden mit einer do - Schleife
implementiert. Sie wird mit loop abgeschlossen.
Die Abbruchbedingung kann mit while oder until an den Anfang oder
das Ende der Schleife gesetzt werden.
Wird auf while oder until verzichtet ist der Abbruch der Schleife
explizit zu codiert.
Und hier das Beispiel: Summe aller geraden Zahlen von 4 bis 16
s = 0 : i = 4
s = 0 : i = 4
do while i <= 16
do
s = s + i
s = s + i
i = i +2
i = i +2
loop
loop while i < 16
E. Baeck (Uni-DUE)
Prozedurales VBA
48 / 161
Schleifen
DO-Schleife
Implizite Wiederholungen: die DO-Schleife
Implizite Wiederholungen werden mit einer do - Schleife
implementiert. Sie wird mit loop abgeschlossen.
Die Abbruchbedingung kann mit while oder until an den Anfang oder
das Ende der Schleife gesetzt werden.
Wird auf while oder until verzichtet ist der Abbruch der Schleife
explizit zu codiert.
Eine do - Schleife ohne Abbruchbedinung ist eine Endlos-Schleife.
Und hier das Beispiel: Summe aller geraden Zahlen von 4 bis 16
s = 0 : i = 4
s = 0 : i = 4
do until i > 16
do
s = s + i
s = s + i
i = i +2
i = i +2
loop
loop until i >= 16
E. Baeck (Uni-DUE)
Prozedurales VBA
48 / 161
Schleifen
DO-Schleife
Implizite Wiederholungen: die DO-Schleife
Implizite Wiederholungen werden mit einer do - Schleife
implementiert. Sie wird mit loop abgeschlossen.
Die Abbruchbedingung kann mit while oder until an den Anfang oder
das Ende der Schleife gesetzt werden.
Wird auf while oder until verzichtet ist der Abbruch der Schleife
explizit zu codiert.
Eine do - Schleife ohne Abbruchbedinung ist eine Endlos-Schleife.
Mit exit do wird die Schleife abgebrochen.
Und hier das Beispiel: Summe aller geraden Zahlen von 4 bis 16
s = 0 : i = 4
s = 0 : i = 4
do until i > 16
do
s = s + i
s = s + i
i = i +2
i = i +2
loop
loop until i >= 16
E. Baeck (Uni-DUE)
Prozedurales VBA
48 / 161
Schleifen
DO-Schleife
Implizite Wiederholungen: die DO-Schleife
Implizite Wiederholungen werden mit einer do - Schleife
implementiert. Sie wird mit loop abgeschlossen.
Die Abbruchbedingung kann mit while oder until an den Anfang oder
das Ende der Schleife gesetzt werden.
Wird auf while oder until verzichtet ist der Abbruch der Schleife
explizit zu codiert.
Eine do - Schleife ohne Abbruchbedinung ist eine Endlos-Schleife.
Mit exit do wird die Schleife abgebrochen.
Und hier das Beispiel: Summe aller geraden Zahlen von 4 bis 16
s = 0 : i = 4
s = 0 : i = 4
do until i > 16
do
s = s + i
s = s + i
i = i +2
i = i +2
loop
loop until i >= 16
E. Baeck (Uni-DUE)
Prozedurales VBA
48 / 161
Schleifen
DO-Schleife
Ein Beispiel, die Fakultät mit do Schleife
Es ist die Faktultät für eine beliebige natürliche Zahl n zu ermitteln.
Die Berechnung erfolgt nach folgender Beziehnung.
n! = 1 · 2 · · · · · (n − 1) · n =
n
Y
i
i=1
E. Baeck (Uni-DUE)
Prozedurales VBA
49 / 161
Schleifen
DO-Schleife
Ein Beispiel, die Fakultät mit do Schleife
Es ist die Faktultät für eine beliebige natürliche Zahl n zu ermitteln.
Die Berechnung erfolgt nach folgender Beziehnung.
n! = 1 · 2 · · · · · (n − 1) · n =
n
Y
i
i=1
Der Summationsindex ist bei einer do-Schleife explizit mit zu führen.
E. Baeck (Uni-DUE)
Prozedurales VBA
49 / 161
Schleifen
DO-Schleife
Ein Beispiel, die Fakultät mit do Schleife
Es ist die Faktultät für eine beliebige natürliche Zahl n zu ermitteln.
Die Berechnung erfolgt nach folgender Beziehnung.
n! = 1 · 2 · · · · · (n − 1) · n =
n
Y
i
i=1
Der Summationsindex ist bei einer do-Schleife explizit mit zu führen.
Die Schleife läuft bei einer Vorbesetzung von 1 von i = 2 bis n.
E. Baeck (Uni-DUE)
Prozedurales VBA
49 / 161
Schleifen
DO-Schleife
Ein Beispiel, die Fakultät mit do Schleife
Es ist die Faktultät für eine beliebige natürliche Zahl n zu ermitteln.
Die Berechnung erfolgt nach folgender Beziehnung.
n! = 1 · 2 · · · · · (n − 1) · n =
n
Y
i
i=1
Der Summationsindex ist bei einer do-Schleife explizit mit zu führen.
Die Schleife läuft bei einer Vorbesetzung von 1 von i = 2 bis n.
Hier das Programm...
dim j as integer
dim i as integer
dim n as integer
n = 4 : f = 1 : i = 2
do while i<= n
f = f*i : i = i+1
loop
E. Baeck (Uni-DUE)
Alle Variablen werden explizit deklariert.
f ist das Ergebnis,
n die Eingabe und i der Schleifenindex.
Das Produkt ist mit 1 zu initialisieren. Der neue
Wert von f ist der alte Wert von f multipliziert
mit dem aktuellen Schleifenindexwert.
Prozedurales VBA
49 / 161
Schleifen
DO-Schleife
Abbruch einer Do Schleife
Eine do Schleife wird mit der Anweisung exit do vorzeitig
abgebrochen.
Es gibt keine Anweisung um nur einen Schleifendurchgang
abzubrechen. Brutaler Ausweg wäre ein goto zum Schleifenende.
Summe aller ungeraden Zahlen, deren Summe kleiner ist als 7
s = 0 : i = 1
do while i <= 10
If s + i > 7 Then Exit Do
s = s + i : i = i +2
Loop
E. Baeck (Uni-DUE)
⇐ hier wird abgebrochen, wenn die
Summe größer ist als 7.
Prozedurales VBA
50 / 161
Schleifen
DO-Schleife
Abbruch einer Do Schleife
Eine do Schleife wird mit der Anweisung exit do vorzeitig
abgebrochen.
Es gibt keine Anweisung um nur einen Schleifendurchgang
abzubrechen. Brutaler Ausweg wäre ein goto zum Schleifenende.
Summe gerader Zahlen ohne Step
s = 0 : i = 1
do while i <= 10
if i mod 2 > 0 then goto nextdo
s = s + i
nextdo:
loop
E. Baeck (Uni-DUE)
Prozedurales VBA
⇐ hier wird die Schleife
übersprungen, wenn ein
ungerades i vorliegt.
50 / 161
Schleifen
While-Schleife
Implizite Wiederholungen: die While-Schleife
Die while-Schleife ist eine vereinfachte Version der do-Schleife.
while (Bedingung) : Anweisungen : wend
Summe aller Zahlen von 1 bis 10: While und Do
s = 0 : i = 1
s = 0 : i = 1
while i <= 10
do while i <= 10
s = s + i
s = s + i
wend
loop
E. Baeck (Uni-DUE)
Prozedurales VBA
51 / 161
Schleifen
While-Schleife
Implizite Wiederholungen: die While-Schleife
Die while-Schleife ist eine vereinfachte Version der do-Schleife.
while (Bedingung) : Anweisungen : wend
Es gibt keine Anweisung (abgesehen von goto), um eine while-Schleife
vorzeitig zu beenden.
Summe aller Zahlen von 1 bis 10: While und Do
s = 0 : i = 1
s = 0 : i = 1
while i <= 10
do while i <= 10
s = s + i
s = s + i
wend
loop
E. Baeck (Uni-DUE)
Prozedurales VBA
51 / 161
Schleifen
While-Schleife
Implizite Wiederholungen: die While-Schleife
Die while-Schleife ist eine vereinfachte Version der do-Schleife.
while (Bedingung) : Anweisungen : wend
Es gibt keine Anweisung (abgesehen von goto), um eine while-Schleife
vorzeitig zu beenden.
Summe aller Zahlen von 1 bis 10: While und Do
s = 0 : i = 1
s = 0 : i = 1
while i <= 10
do while i <= 10
s = s + i
s = s + i
wend
loop
E. Baeck (Uni-DUE)
Prozedurales VBA
51 / 161
Felder
Felder
E. Baeck (Uni-DUE)
Prozedurales VBA
52 / 161
Felder
Statische Felder
Statische Felder
Statische Felder sind indizierte Variablen (Vektoren und Matrizen),
deren Größe in der Deklaration fest vorgegeben wird.
Felder sind Gruppen von Daten des selben Datentyps.
Ein Vektor und eine Matrix des 3-dimensionalen Raums
dim vektor(1 to 3) as double
dim drehmat(1 to 3, 1 to 3) as double
E. Baeck (Uni-DUE)
Prozedurales VBA
53 / 161
Felder
Statische Felder
Statische Felder
Statische Felder sind indizierte Variablen (Vektoren und Matrizen),
deren Größe in der Deklaration fest vorgegeben wird.
Felder sind Gruppen von Daten des selben Datentyps.
Die Größe statischer Felder kann nicht zur Programmlaufzeit
verändert werden.
Ein Vektor und eine Matrix des 3-dimensionalen Raums
dim vektor(1 to 3) as double
dim drehmat(1 to 3, 1 to 3) as double
E. Baeck (Uni-DUE)
Prozedurales VBA
53 / 161
Felder
Statische Felder
Statische Felder
Statische Felder sind indizierte Variablen (Vektoren und Matrizen),
deren Größe in der Deklaration fest vorgegeben wird.
Felder sind Gruppen von Daten des selben Datentyps.
Die Größe statischer Felder kann nicht zur Programmlaufzeit
verändert werden.
Verwendung nur sinnvoll, wenn Vektor/Matrix-Dimensionen
unverändert sind.
Ein Vektor und eine Matrix des 3-dimensionalen Raums
dim vektor(1 to 3) as double
dim drehmat(1 to 3, 1 to 3) as double
E. Baeck (Uni-DUE)
Prozedurales VBA
53 / 161
Felder
Statische Felder
Statische Felder
Statische Felder sind indizierte Variablen (Vektoren und Matrizen),
deren Größe in der Deklaration fest vorgegeben wird.
Felder sind Gruppen von Daten des selben Datentyps.
Die Größe statischer Felder kann nicht zur Programmlaufzeit
verändert werden.
Verwendung nur sinnvoll, wenn Vektor/Matrix-Dimensionen
unverändert sind.
Der Indexbereich kann beliebig fest gelegt werden.
Ein Vektor und eine Matrix des 3-dimensionalen Raums
dim vektor(1 to 3) as double
dim drehmat(1 to 3, 1 to 3) as double
E. Baeck (Uni-DUE)
Prozedurales VBA
53 / 161
Felder
Statische Felder
Statische Felder
Statische Felder sind indizierte Variablen (Vektoren und Matrizen),
deren Größe in der Deklaration fest vorgegeben wird.
Felder sind Gruppen von Daten des selben Datentyps.
Die Größe statischer Felder kann nicht zur Programmlaufzeit
verändert werden.
Verwendung nur sinnvoll, wenn Vektor/Matrix-Dimensionen
unverändert sind.
Der Indexbereich kann beliebig fest gelegt werden.
Häufige Fehler sind Feldzugriffe mit Indexwerten, die außerhalb des
zulässigen Bereichs liegen. ⇒ Programmabsturz!
Ein Vektor und eine Matrix des 3-dimensionalen Raums
dim vektor(1 to 3) as double
dim drehmat(1 to 3, 1 to 3) as double
E. Baeck (Uni-DUE)
Prozedurales VBA
53 / 161
Felder
Statische Felder
Statische Felder
Statische Felder sind indizierte Variablen (Vektoren und Matrizen),
deren Größe in der Deklaration fest vorgegeben wird.
Felder sind Gruppen von Daten des selben Datentyps.
Die Größe statischer Felder kann nicht zur Programmlaufzeit
verändert werden.
Verwendung nur sinnvoll, wenn Vektor/Matrix-Dimensionen
unverändert sind.
Der Indexbereich kann beliebig fest gelegt werden.
Häufige Fehler sind Feldzugriffe mit Indexwerten, die außerhalb des
zulässigen Bereichs liegen. ⇒ Programmabsturz!
Ein Vektor und eine Matrix des 3-dimensionalen Raums
dim vektor(1 to 3) as double
dim drehmat(1 to 3, 1 to 3) as double
E. Baeck (Uni-DUE)
Prozedurales VBA
53 / 161
Felder
Statische Felder
Verwendung statische Felder
Ein statisches Feld wird ähnlich einer einfachen Variablen deklariert.
Der Variablenbezeichnung folgt die Angabe der zulässigen Indexwerte.
Skalarprodukt zweier Vektoren
Dim a(1 To 3) As
Dim b(1 To 3) As
a(1) = 1: a(2) =
b(1) = 0: b(2) =
s = 0
For i = 1 To 3
s = s + a(i)
Next
E. Baeck (Uni-DUE)
Double
Double
1: a(3) = 0
1: b(3) = 1
* b(i)
⇐ Deklarationen
⇐ Initialisierungen
⇐ Schleife zur Berechnung
des Skalarprodukts
Prozedurales VBA
54 / 161
Felder
Statische Felder
Verwendung statische Felder
Ein statisches Feld wird ähnlich einer einfachen Variablen deklariert.
Der Variablenbezeichnung folgt die Angabe der zulässigen Indexwerte.
Die Indexbereichsangabe erfolgt durch (Startindex to Endindex).
Skalarprodukt zweier Vektoren
Dim a(1 To 3) As
Dim b(1 To 3) As
a(1) = 1: a(2) =
b(1) = 0: b(2) =
s = 0
For i = 1 To 3
s = s + a(i)
Next
E. Baeck (Uni-DUE)
Double
Double
1: a(3) = 0
1: b(3) = 1
* b(i)
⇐ Deklarationen
⇐ Initialisierungen
⇐ Schleife zur Berechnung
des Skalarprodukts
Prozedurales VBA
54 / 161
Felder
Statische Felder
Verwendung statische Felder
Ein statisches Feld wird ähnlich einer einfachen Variablen deklariert.
Der Variablenbezeichnung folgt die Angabe der zulässigen Indexwerte.
Die Indexbereichsangabe erfolgt durch (Startindex to Endindex).
Zugriffe auf die Elemente eines Feldes erfolgen durch Angabe des
entsprechenden Indexwertes in runden Klammern.
Skalarprodukt zweier Vektoren
Dim a(1 To 3) As
Dim b(1 To 3) As
a(1) = 1: a(2) =
b(1) = 0: b(2) =
s = 0
For i = 1 To 3
s = s + a(i)
Next
E. Baeck (Uni-DUE)
Double
Double
1: a(3) = 0
1: b(3) = 1
* b(i)
⇐ Deklarationen
⇐ Initialisierungen
⇐ Schleife zur Berechnung
des Skalarprodukts
Prozedurales VBA
54 / 161
Felder
Statische Felder
Verwendung statische Felder
Ein statisches Feld wird ähnlich einer einfachen Variablen deklariert.
Der Variablenbezeichnung folgt die Angabe der zulässigen Indexwerte.
Die Indexbereichsangabe erfolgt durch (Startindex to Endindex).
Zugriffe auf die Elemente eines Feldes erfolgen durch Angabe des
entsprechenden Indexwertes in runden Klammern.
Skalarprodukt zweier Vektoren
Dim a(1 To 3) As
Dim b(1 To 3) As
a(1) = 1: a(2) =
b(1) = 0: b(2) =
s = 0
For i = 1 To 3
s = s + a(i)
Next
E. Baeck (Uni-DUE)
Double
Double
1: a(3) = 0
1: b(3) = 1
* b(i)
⇐ Deklarationen
⇐ Initialisierungen
⇐ Schleife zur Berechnung
des Skalarprodukts
Prozedurales VBA
54 / 161
Felder
Dynamische Felder
Dynamische Felder
Statische Felder sind nicht an die Problemdimension anzupassen.
Dynamische Felder werden in zwei Schritten erzeugt.
E. Baeck (Uni-DUE)
Prozedurales VBA
55 / 161
Felder
Dynamische Felder
Dynamische Felder
Statische Felder sind nicht an die Problemdimension anzupassen.
Dynamische Felder werden in zwei Schritten erzeugt.
1
Deklaration ohne Indexbereich.
E. Baeck (Uni-DUE)
Prozedurales VBA
55 / 161
Felder
Dynamische Felder
Dynamische Felder
Statische Felder sind nicht an die Problemdimension anzupassen.
Dynamische Felder werden in zwei Schritten erzeugt.
1
2
Deklaration ohne Indexbereich.
Dimensionierung zur Laufzeit.
Deklaration dynamischer Felder, Vektor und Matrix
Hier kein Unterschied zwischen
dim vektor() as double
Vektor und Matrix.
dim matrix() as double
E. Baeck (Uni-DUE)
Prozedurales VBA
55 / 161
Felder
Dynamische Felder
Dynamische Felder
Statische Felder sind nicht an die Problemdimension anzupassen.
Dynamische Felder werden in zwei Schritten erzeugt.
1
2
Deklaration ohne Indexbereich.
Dimensionierung zur Laufzeit.
Statische und dynamische Felder haben gleiches Zugriffsverhalten.
Dimensionierung, Allokierung der dynamischer Felder, Vektor und Matrix
Der Unterschied in Vektor
dim vektor() as double
und Matrix liegt in der
dim matrix() as double
n = 3 : m = 4
Dimensionierung.
redim vektor(1 to n)
redim matrix(1 to m, 1 to n)
E. Baeck (Uni-DUE)
Prozedurales VBA
55 / 161
Felder
Dynamische Felder
Dynamische Felder
Statische Felder sind nicht an die Problemdimension anzupassen.
Dynamische Felder werden in zwei Schritten erzeugt.
1
2
Deklaration ohne Indexbereich.
Dimensionierung zur Laufzeit.
Statische und dynamische Felder haben gleiches Zugriffsverhalten.
Dynamische Felder können zur Laufzeit neu dimensioniert werden.
Statisches und dynamisches Feld
dim vektor1(1 to 3) as double
dim vektor2() as double
n = 3
redim vektor2(1 to n)
s = vektor1(1) + vektor2(1)
E. Baeck (Uni-DUE)
Prozedurales VBA
⇐ statisch!
⇐ dynamisch!
⇐ Dimensionierung!
⇐ Gleicher Zugriff!
55 / 161
Felder
Dynamische Felder
Dynamische Felder
Statische Felder sind nicht an die Problemdimension anzupassen.
Dynamische Felder werden in zwei Schritten erzeugt.
1
2
Deklaration ohne Indexbereich.
Dimensionierung zur Laufzeit.
Statische und dynamische Felder haben gleiches Zugriffsverhalten.
Dynamische Felder können zur Laufzeit neu dimensioniert werden.
Automatisches
Deallokieren im Gegensatz zu C/C++
Vorsicht
beim Umdimensionieren!
dim vektor1(1 to 2) as double
dim vektor2() as double
redim vektor2(1 to 2)
redim vektor1(1 to 3)
redim vektor2(1 to 3)
E. Baeck (Uni-DUE)
Prozedurales VBA
⇐ statisch!
⇐ dynamisch!
⇐ ok!
⇐ Fehler!
⇐ ok!
55 / 161
Felder
Dynamische Felder
Dynamische Felder
Statische Felder sind nicht an die Problemdimension anzupassen.
Dynamische Felder werden in zwei Schritten erzeugt.
1
2
Deklaration ohne Indexbereich.
Dimensionierung zur Laufzeit.
Statische und dynamische Felder haben gleiches Zugriffsverhalten.
Dynamische Felder können zur Laufzeit neu dimensioniert werden.
Automatisches Deallokieren im Gegensatz zu C/C++
E. Baeck (Uni-DUE)
Prozedurales VBA
55 / 161
Formel Kompilationen
Formel Kompilationen
E. Baeck (Uni-DUE)
Prozedurales VBA
56 / 161
Formel Kompilationen
Kompilationsregeln
Umsetzung einer mathematischen Notation in eine Schleife
Eine einfache Summe
10
X
(i)
i=1
E. Baeck (Uni-DUE)
Prozedurales VBA
57 / 161
Formel Kompilationen
Kompilationsregeln
Umsetzung einer mathematischen Notation in eine Schleife
Eine einfache Summe
10
X
(i)
i=1
E. Baeck (Uni-DUE)
s = 0
for i=1 to 10
s = s + i
next
Prozedurales VBA
57 / 161
Formel Kompilationen
Kompilationsregeln
Umsetzung einer mathematischen Notation in eine Schleife
Eine einfache Summe
10
X
(i)
s = 0
for i=1 to 10
s = s + i
next
i=1
Länge eines transformierten Vektors
E. Baeck (Uni-DUE)
Prozedurales VBA
57 / 161
Formel Kompilationen
Kompilationsregeln
Umsetzung einer mathematischen Notation in eine Schleife
Eine einfache Summe
10
X
(i)
s = 0
for i=1 to 10
s = s + i
next
i=1
Länge eines transformierten Vektors
L = A · v 

2  21
n
n
X
X

=
(a(i, j) · v (j)) 
i=1
j=1
E. Baeck (Uni-DUE)
Prozedurales VBA
57 / 161
Formel Kompilationen
Kompilationsregeln
Umsetzung einer mathematischen Notation in eine Schleife
Eine einfache Summe
10
X
(i)
s = 0
for i=1 to 10
s = s + i
next
i=1
Länge eines transformierten Vektors
L = A · v 

2  21
n
n
X
X

=
(a(i, j) · v (j)) 
i=1
j=1
E. Baeck (Uni-DUE)
L = 0
for i=1 to n
s = 0
for j=1 to n
s = s + a(i,j)*v(j)
next
L = L +s^2
next
L = sqr(L)
Prozedurales VBA
57 / 161
Formel Kompilationen
Kompilationsregeln
Umsetzung einer mathematischen Notation in eine Schleife
Eine einfache Summe
10
X
(i)
s = 0
for i=1 to 10
s = s + i
next
i=1
Länge eines transformierten Vektors
L = A · v 

2  21
n
n
X
X

=
(a(i, j) · v (j)) 
i=1
j=1
E. Baeck (Uni-DUE)
L = 0
for i=1 to n
s = 0
for j=1 to n
s = s + a(i,j)*v(j)
next
L = L +s^2
next
L = sqr(L)
Prozedurales VBA
57 / 161
Programmablaufplan PAP
Programmablaufplan PAP
E. Baeck (Uni-DUE)
Prozedurales VBA
58 / 161
Programmablaufplan PAP
Symbole
Symbole eines Programmablaufplans
Symbole des Programmablaufplans (PAP) definiert in DIN 66001.
Verwendung auch zur Darstellung allgemeiner Prozesse.
E. Baeck (Uni-DUE)
Prozedurales VBA
59 / 161
Programmablaufplan PAP
Symbole
Symbole eines Programmablaufplans
Symbole des Programmablaufplans (PAP) definiert in DIN 66001.
Verwendung auch zur Darstellung allgemeiner Prozesse.
Wichtigste Symbole zur Darstellung eines Programmablaufs
E. Baeck (Uni-DUE)
Prozedurales VBA
59 / 161
Programmablaufplan PAP
Symbole
Symbole eines Programmablaufplans
Symbole des Programmablaufplans (PAP) definiert in DIN 66001.
Verwendung auch zur Darstellung allgemeiner Prozesse.
Wichtigste Symbole zur Darstellung eines Programmablaufs
E. Baeck (Uni-DUE)
Prozedurales VBA
59 / 161
Programmablaufplan PAP
Symbole
Symbole eines Programmablaufplans
Symbole des Programmablaufplans (PAP) definiert in DIN 66001.
Verwendung auch zur Darstellung allgemeiner Prozesse.
Wichtigste Symbole zur Darstellung eines Programmablaufs
Start- und Stop-Positionen des Programms
E. Baeck (Uni-DUE)
Prozedurales VBA
59 / 161
Programmablaufplan PAP
Symbole
Symbole eines Programmablaufplans
Symbole des Programmablaufplans (PAP) definiert in DIN 66001.
Verwendung auch zur Darstellung allgemeiner Prozesse.
Wichtigste Symbole zur Darstellung eines Programmablaufs
Start- und Stop-Positionen des Programms
Ein- bzw. Ausgabenoperationen (Tastatur, Bildschirm,
Dateien, etc.)
E. Baeck (Uni-DUE)
Prozedurales VBA
59 / 161
Programmablaufplan PAP
Symbole
Symbole eines Programmablaufplans
Symbole des Programmablaufplans (PAP) definiert in DIN 66001.
Verwendung auch zur Darstellung allgemeiner Prozesse.
Wichtigste Symbole zur Darstellung eines Programmablaufs
Start- und Stop-Positionen des Programms
Ein- bzw. Ausgabenoperationen (Tastatur, Bildschirm,
Dateien, etc.)
Verbindungen der PAP-Elemente. Flussrichtung.
E. Baeck (Uni-DUE)
Prozedurales VBA
59 / 161
Programmablaufplan PAP
Symbole
Symbole eines Programmablaufplans
Symbole des Programmablaufplans (PAP) definiert in DIN 66001.
Verwendung auch zur Darstellung allgemeiner Prozesse.
Wichtigste Symbole zur Darstellung eines Programmablaufs
Start- und Stop-Positionen des Programms
Ein- bzw. Ausgabenoperationen (Tastatur, Bildschirm,
Dateien, etc.)
Verbindungen der PAP-Elemente. Flussrichtung.
Verzweigungen bzw. Entscheidungen.
E. Baeck (Uni-DUE)
Prozedurales VBA
59 / 161
Programmablaufplan PAP
Symbole
Symbole eines Programmablaufplans
Symbole des Programmablaufplans (PAP) definiert in DIN 66001.
Verwendung auch zur Darstellung allgemeiner Prozesse.
Wichtigste Symbole zur Darstellung eines Programmablaufs
Start- und Stop-Positionen des Programms
Ein- bzw. Ausgabenoperationen (Tastatur, Bildschirm,
Dateien, etc.)
Verbindungen der PAP-Elemente. Flussrichtung.
Verzweigungen bzw. Entscheidungen.
Untereinheiten zur Strukturierung (Funktionen und Unterprogramme)
E. Baeck (Uni-DUE)
Prozedurales VBA
59 / 161
Programmablaufplan PAP
Symbole
Symbole eines Programmablaufplans
Symbole des Programmablaufplans (PAP) definiert in DIN 66001.
Verwendung auch zur Darstellung allgemeiner Prozesse.
Wichtigste Symbole zur Darstellung eines Programmablaufs
Start- und Stop-Positionen des Programms
Ein- bzw. Ausgabenoperationen (Tastatur, Bildschirm,
Dateien, etc.)
Verbindungen der PAP-Elemente. Flussrichtung.
Verzweigungen bzw. Entscheidungen.
Untereinheiten zur Strukturierung (Funktionen und Unterprogramme)
E. Baeck (Uni-DUE)
Prozedurales VBA
59 / 161
Programmablaufplan PAP
Anwendung
PAP-Anwendung, die quadratische Gleichung
Die allgemeine Form der quadratischen Gleichung lautet
a · x2 + b · x + c = 0
E. Baeck (Uni-DUE)
Prozedurales VBA
60 / 161
Programmablaufplan PAP
Anwendung
PAP-Anwendung, die quadratische Gleichung
Die allgemeine Form der quadratischen Gleichung lautet
a · x2 + b · x + c = 0
Das Problem zerfällt in die folgenden Fälle.
E. Baeck (Uni-DUE)
Prozedurales VBA
60 / 161
Programmablaufplan PAP
Anwendung
PAP-Anwendung, die quadratische Gleichung
Die allgemeine Form der quadratischen Gleichung lautet
a · x2 + b · x + c = 0
Das Problem zerfällt in die folgenden Fälle.
a 6= 0
E. Baeck (Uni-DUE)
Quadratischer Fall, zwei Lösungen
Prozedurales VBA
60 / 161
Programmablaufplan PAP
Anwendung
PAP-Anwendung, die quadratische Gleichung
Die allgemeine Form der quadratischen Gleichung lautet
a · x2 + b · x + c = 0
Das Problem zerfällt in die folgenden Fälle.
a 6= 0
a = 0 ∧ b 6= 0
E. Baeck (Uni-DUE)
Quadratischer Fall, zwei Lösungen
Linearer Fall, eine Lösung
Prozedurales VBA
60 / 161
Programmablaufplan PAP
Anwendung
PAP-Anwendung, die quadratische Gleichung
Die allgemeine Form der quadratischen Gleichung lautet
a · x2 + b · x + c = 0
Das Problem zerfällt in die folgenden Fälle.
a 6= 0
a=0∧b =
6 0
a = 0 ∧ b = 0 ∧ c 6= 0
E. Baeck (Uni-DUE)
Quadratischer Fall, zwei Lösungen
Linearer Fall, eine Lösung
Konstanter Fall, keine Lösung
Prozedurales VBA
60 / 161
Programmablaufplan PAP
Anwendung
PAP-Anwendung, die quadratische Gleichung
Die allgemeine Form der quadratischen Gleichung lautet
a · x2 + b · x + c = 0
Das Problem zerfällt in die folgenden Fälle.
a 6= 0
a=0∧b =
6 0
a=0∧b =0∧c =
6 0
a=0∧b =0∧c =0
E. Baeck (Uni-DUE)
Quadratischer Fall, zwei Lösungen
Linearer Fall, eine Lösung
Konstanter Fall, keine Lösung
Konstanter Fall, unendlich viele Lösungen
Prozedurales VBA
60 / 161
Programmablaufplan PAP
Anwendung
PAP-Anwendung, die quadratische Gleichung
Die allgemeine Form der quadratischen Gleichung lautet
a · x2 + b · x + c = 0
Das Problem zerfällt in die folgenden Fälle.
a 6= 0
a=0∧b =
6 0
a=0∧b =0∧c =
6 0
a=0∧b =0∧c =0
E. Baeck (Uni-DUE)
Quadratischer Fall, zwei Lösungen
Linearer Fall, eine Lösung
Konstanter Fall, keine Lösung
Konstanter Fall, unendlich viele Lösungen
Prozedurales VBA
60 / 161
Programmablaufplan PAP
Anwendung
Anwendung der PAP auf die quadratische Gleichung
a · x2 + b · x + c = 0
Start
E. Baeck (Uni-DUE)
Prozedurales VBA
61 / 161
Programmablaufplan PAP
Anwendung
Anwendung der PAP auf die quadratische Gleichung
a · x2 + b · x + c = 0
Start
a=0
E. Baeck (Uni-DUE)
Prozedurales VBA
61 / 161
Programmablaufplan PAP
Anwendung
Anwendung der PAP auf die quadratische Gleichung
a · x2 + b · x + c = 0
Start
ja
a=0
E. Baeck (Uni-DUE)
b=0
Prozedurales VBA
61 / 161
Programmablaufplan PAP
Anwendung
Anwendung der PAP auf die quadratische Gleichung
a · x2 + b · x + c = 0
Start
ja
a=0
E. Baeck (Uni-DUE)
ja
b=0
c =0
Prozedurales VBA
61 / 161
Programmablaufplan PAP
Anwendung
Anwendung der PAP auf die quadratische Gleichung
a · x2 + b · x + c = 0
Start
ja
a=0
E. Baeck (Uni-DUE)
ja
b=0
ja
c =0
Prozedurales VBA
Unendlich
viele
Lösungen
Stop
61 / 161
Programmablaufplan PAP
Anwendung
Anwendung der PAP auf die quadratische Gleichung
a · x2 + b · x + c = 0
Start
ja
a=0
ja
b=0
ja
c =0
Unendlich
viele
Lösungen
Stop
nein
Keine
Lösung
E. Baeck (Uni-DUE)
Prozedurales VBA
Stop
61 / 161
Programmablaufplan PAP
Anwendung
Anwendung der PAP auf die quadratische Gleichung
a · x2 + b · x + c = 0
Start
ja
a=0
ja
x =
E. Baeck (Uni-DUE)
Unendlich
viele
Lösungen
Stop
nein
nein
− bc
ja
c =0
b=0
Stop
Keine
Lösung
Prozedurales VBA
Stop
61 / 161
Programmablaufplan PAP
Anwendung
Anwendung der PAP auf die quadratische Gleichung
a · x2 + b · x + c = 0
Start
ja
a=0
ja
d = b2 − 4 · a · c
E. Baeck (Uni-DUE)
x =
− bc
Unendlich
viele
Lösungen
Stop
nein
nein
nein
ja
c =0
b=0
Stop
Keine
Lösung
Prozedurales VBA
Stop
61 / 161
Programmablaufplan PAP
Anwendung
Anwendung der PAP auf die quadratische Gleichung
a · x2 + b · x + c = 0
Start
ja
a=0
ja
d = b2 − 4 · a · c
x =
− bc
Unendlich
viele
Lösungen
Stop
nein
nein
nein
ja
c =0
b=0
Stop
Keine
Lösung
Stop
d <0
E. Baeck (Uni-DUE)
Prozedurales VBA
61 / 161
Programmablaufplan PAP
Anwendung
Anwendung der PAP auf die quadratische Gleichung
a · x2 + b · x + c = 0
Start
ja
ja
a=0
d = b2 − 4 · a · c
ja
x =
− bc
Keine
Lösung
Stop
Stop
Stop
√
−d
x1,2 = −b±i
2·a
E. Baeck (Uni-DUE)
Unendlich
viele
Lösungen
nein
nein
nein
d <0
ja
c =0
b=0
Stop
Prozedurales VBA
61 / 161
Programmablaufplan PAP
Anwendung
Anwendung der PAP auf die quadratische Gleichung
a · x2 + b · x + c = 0
Start
ja
ja
a=0
d = b2 − 4 · a · c
ja
x =
− bc
Unendlich
viele
Lösungen
Stop
nein
nein
nein
d <0
ja
c =0
b=0
Keine
Lösung
Stop
Stop
√
−d
x1,2 = −b±i
2·a
Stop
nein
x1,2 =
√
−b± d
2·a
E. Baeck (Uni-DUE)
Stop
Prozedurales VBA
61 / 161
Funktionen, Unterprogramme
Funktionen, Unterprogramme
E. Baeck (Uni-DUE)
Prozedurales VBA
62 / 161
Funktionen, Unterprogramme
Allgemeines
Unterprogramme und Funktionen
Programm-Code sollte in Unterprogramme strukturiert werden.
Vermeiden von Spagetti-Code.
E. Baeck (Uni-DUE)
Prozedurales VBA
63 / 161
Funktionen, Unterprogramme
Allgemeines
Unterprogramme und Funktionen
Programm-Code sollte in Unterprogramme strukturiert werden.
Vermeiden von Spagetti-Code.
Maximale Programmlänge ca. 30-40 Zeilen.
E. Baeck (Uni-DUE)
Prozedurales VBA
63 / 161
Funktionen, Unterprogramme
Allgemeines
Unterprogramme und Funktionen
Programm-Code sollte in Unterprogramme strukturiert werden.
Vermeiden von Spagetti-Code.
Maximale Programmlänge ca. 30-40 Zeilen.
Unterprogramme und Funktionen sind gekapselte, wieder verwendbare
Programmmodule.
E. Baeck (Uni-DUE)
Prozedurales VBA
63 / 161
Funktionen, Unterprogramme
Allgemeines
Unterprogramme und Funktionen
Programm-Code sollte in Unterprogramme strukturiert werden.
Vermeiden von Spagetti-Code.
Maximale Programmlänge ca. 30-40 Zeilen.
Unterprogramme und Funktionen sind gekapselte, wieder verwendbare
Programmmodule.
Parameter werden über die Liste der formalen Parameter vom
aufrufenden Programm übergeben.
E. Baeck (Uni-DUE)
Prozedurales VBA
63 / 161
Funktionen, Unterprogramme
Allgemeines
Unterprogramme und Funktionen
Programm-Code sollte in Unterprogramme strukturiert werden.
Vermeiden von Spagetti-Code.
Maximale Programmlänge ca. 30-40 Zeilen.
Unterprogramme und Funktionen sind gekapselte, wieder verwendbare
Programmmodule.
Parameter werden über die Liste der formalen Parameter vom
aufrufenden Programm übergeben.
Prinzipiell gibt es zwei Übergabearten
E. Baeck (Uni-DUE)
Prozedurales VBA
63 / 161
Funktionen, Unterprogramme
Allgemeines
Unterprogramme und Funktionen
Programm-Code sollte in Unterprogramme strukturiert werden.
Vermeiden von Spagetti-Code.
Maximale Programmlänge ca. 30-40 Zeilen.
Unterprogramme und Funktionen sind gekapselte, wieder verwendbare
Programmmodule.
Parameter werden über die Liste der formalen Parameter vom
aufrufenden Programm übergeben.
Prinzipiell gibt es zwei Übergabearten
1
Per Adresse (Reference):
Das Unterprogramm arbeitet mit dem Speicher des aufrufenden und
kann diesen überschreiben.
E. Baeck (Uni-DUE)
Prozedurales VBA
63 / 161
Funktionen, Unterprogramme
Allgemeines
Unterprogramme und Funktionen
Programm-Code sollte in Unterprogramme strukturiert werden.
Vermeiden von Spagetti-Code.
Maximale Programmlänge ca. 30-40 Zeilen.
Unterprogramme und Funktionen sind gekapselte, wieder verwendbare
Programmmodule.
Parameter werden über die Liste der formalen Parameter vom
aufrufenden Programm übergeben.
Prinzipiell gibt es zwei Übergabearten
1
2
Per Adresse (Reference):
Das Unterprogramm arbeitet mit dem Speicher des aufrufenden und
kann diesen überschreiben.
Per Wert (Value):
Das Unterprogramm arbeitet mit dem Wert eines übergebenen
Parameters. Der Speicher des aufrufenden Programms ist nicht
erreichbar (ReadOnly).
E. Baeck (Uni-DUE)
Prozedurales VBA
63 / 161
Funktionen, Unterprogramme
Allgemeines
Unterprogramme und Funktionen
Programm-Code sollte in Unterprogramme strukturiert werden.
Vermeiden von Spagetti-Code.
Maximale Programmlänge ca. 30-40 Zeilen.
Unterprogramme und Funktionen sind gekapselte, wieder verwendbare
Programmmodule.
Parameter werden über die Liste der formalen Parameter vom
aufrufenden Programm übergeben.
Prinzipiell gibt es zwei Übergabearten
1
2
Per Adresse (Reference):
Das Unterprogramm arbeitet mit dem Speicher des aufrufenden und
kann diesen überschreiben.
Per Wert (Value):
Das Unterprogramm arbeitet mit dem Wert eines übergebenen
Parameters. Der Speicher des aufrufenden Programms ist nicht
erreichbar (ReadOnly).
E. Baeck (Uni-DUE)
Prozedurales VBA
63 / 161
Funktionen, Unterprogramme
Unterprogramme
Das Unterprogramm Sub
Ein Unterprogramm wird mit dem Schlüssel Sub eingeleitet.
Ein Unterprogramm hat einen eindeutigen zulässigen Namen.
E. Baeck (Uni-DUE)
Prozedurales VBA
64 / 161
Funktionen, Unterprogramme
Unterprogramme
Das Unterprogramm Sub
Ein Unterprogramm wird mit dem Schlüssel Sub eingeleitet.
Ein Unterprogramm hat einen eindeutigen zulässigen Namen.
Ein Unterprogramm wird mit dem Schlüssel end sub abgeschlossen.
Zulässige VBA Bezeichnungen
enthalten keine Leerzeichen!
enthalten keine Operatoren (+,-,*,/,etc)
dürfen nicht mit einer Ziffer (0-9) beginnen.
E. Baeck (Uni-DUE)
Prozedurales VBA
64 / 161
Funktionen, Unterprogramme
Unterprogramme
Das Unterprogramm Sub
Ein Unterprogramm wird mit dem Schlüssel Sub eingeleitet.
Ein Unterprogramm hat einen eindeutigen zulässigen Namen.
Ein Unterprogramm wird mit dem Schlüssel end sub abgeschlossen.
Ein Unterprogramm wird mit dem Schlüssel exit sub verlassen.
E. Baeck (Uni-DUE)
Prozedurales VBA
64 / 161
Funktionen, Unterprogramme
Unterprogramme
Das Unterprogramm Sub
Ein Unterprogramm wird mit dem Schlüssel Sub eingeleitet.
Ein Unterprogramm hat einen eindeutigen zulässigen Namen.
Ein Unterprogramm wird mit dem Schlüssel end sub abgeschlossen.
Ein Unterprogramm wird mit dem Schlüssel exit sub verlassen.
Parameter werden Komma separiert in runde Klammern gesetzt.
E. Baeck (Uni-DUE)
Prozedurales VBA
64 / 161
Funktionen, Unterprogramme
Unterprogramme
Das Unterprogramm Sub
Ein Unterprogramm wird mit dem Schlüssel Sub eingeleitet.
Ein Unterprogramm hat einen eindeutigen zulässigen Namen.
Ein Unterprogramm wird mit dem Schlüssel end sub abgeschlossen.
Ein Unterprogramm wird mit dem Schlüssel exit sub verlassen.
Parameter werden Komma separiert in runde Klammern gesetzt.
Parameter können auch explizit deklariert werden.
Parameterliste ohne Deklartion
Sub SubName (var1, var2)
...
End Sub
E. Baeck (Uni-DUE)
⇐ Sub Start mit Parameterliste,
Parameter ohne Deklaration.
⇐ Sub Ende
Prozedurales VBA
64 / 161
Funktionen, Unterprogramme
Unterprogramme
Das Unterprogramm Sub
Ein Unterprogramm wird mit dem Schlüssel Sub eingeleitet.
Ein Unterprogramm hat einen eindeutigen zulässigen Namen.
Ein Unterprogramm wird mit dem Schlüssel end sub abgeschlossen.
Ein Unterprogramm wird mit dem Schlüssel exit sub verlassen.
Parameter werden Komma separiert in runde Klammern gesetzt.
Parameter können auch explizit deklariert werden.
Parameterliste von Aufruf und aufgerufenem Programm MUSS
übereinstimmen.
Parameterliste mit Deklaration
Sub SubName (var1 as Integer, var2 as Double)
...
Parameter mit Deklaration.
End Sub
⇐ Sub Ende
E. Baeck (Uni-DUE)
Prozedurales VBA
64 / 161
Funktionen, Unterprogramme
Unterprogramme
Das Unterprogramm Sub
Ein Unterprogramm wird mit dem Schlüssel Sub eingeleitet.
Ein Unterprogramm hat einen eindeutigen zulässigen Namen.
Ein Unterprogramm wird mit dem Schlüssel end sub abgeschlossen.
Ein Unterprogramm wird mit dem Schlüssel exit sub verlassen.
Parameter werden Komma separiert in runde Klammern gesetzt.
Parameter können auch explizit deklariert werden.
Parameterliste von Aufruf und aufgerufenem Programm MUSS
übereinstimmen.
Bei Unstimmigkeiten kann das Programm abstürzen.
E. Baeck (Uni-DUE)
Prozedurales VBA
64 / 161
Funktionen, Unterprogramme
Unterprogramme
Das Unterprogramm Sub
Ein Unterprogramm wird mit dem Schlüssel Sub eingeleitet.
Ein Unterprogramm hat einen eindeutigen zulässigen Namen.
Ein Unterprogramm wird mit dem Schlüssel end sub abgeschlossen.
Ein Unterprogramm wird mit dem Schlüssel exit sub verlassen.
Parameter werden Komma separiert in runde Klammern gesetzt.
Parameter können auch explizit deklariert werden.
Parameterliste von Aufruf und aufgerufenem Programm MUSS
übereinstimmen.
Bei Unstimmigkeiten kann das Programm abstürzen.
E. Baeck (Uni-DUE)
Prozedurales VBA
64 / 161
Funktionen, Unterprogramme
Unterprogramme
Aufruf eines Unterprogramms Sub
Ein Unterprogramm wird klassisch wie auch in FORTRAN mit
call [Name](Parameterliste) aufgerufen.
Alternativ kann ein Unterprogramm ohne call aufgerufen werden. In
diesem Fall entfallen die runden Klammern der Parameterliste.
Zwei gleichwertige Sub Aufrufe
MsgBox "Fibonacci-Zahl von " & i & " nicht zu berechnen (Überlauf!)",
vbCritical, "Fehler"
Call MsgBox("Fibonacci-Zahl von " & i & " nicht zu berechnen (Überlauf!)",
vbCritical, "Fehler")
E. Baeck (Uni-DUE)
Prozedurales VBA
65 / 161
Funktionen, Unterprogramme
Unterprogramme
Aufruf eines Unterprogramms Sub
Ein Unterprogramm wird klassisch wie auch in FORTRAN mit
call [Name](Parameterliste) aufgerufen.
Alternativ kann ein Unterprogramm ohne call aufgerufen werden. In
diesem Fall entfallen die runden Klammern der Parameterliste.
Die Parameterliste ist eine Komma separierte Reihe von
Übergabeparametern.
Zwei gleichwertige Sub Aufrufe
MsgBox "Fibonacci-Zahl von " & i & " nicht zu berechnen (Überlauf!)",
vbCritical, "Fehler"
Call MsgBox("Fibonacci-Zahl von " & i & " nicht zu berechnen (Überlauf!)",
vbCritical, "Fehler")
E. Baeck (Uni-DUE)
Prozedurales VBA
65 / 161
Funktionen, Unterprogramme
Unterprogramme
Aufruf eines Unterprogramms Sub
Ein Unterprogramm wird klassisch wie auch in FORTRAN mit
call [Name](Parameterliste) aufgerufen.
Alternativ kann ein Unterprogramm ohne call aufgerufen werden. In
diesem Fall entfallen die runden Klammern der Parameterliste.
Die Parameterliste ist eine Komma separierte Reihe von
Übergabeparametern.
Zwei gleichwertige Sub Aufrufe
MsgBox "Fibonacci-Zahl von " & i & " nicht zu berechnen (Überlauf!)",
vbCritical, "Fehler"
Call MsgBox("Fibonacci-Zahl von " & i & " nicht zu berechnen (Überlauf!)",
vbCritical, "Fehler")
E. Baeck (Uni-DUE)
Prozedurales VBA
65 / 161
Funktionen, Unterprogramme
Unterprogramme
Beispiel Matrix-Multiplikation
Das Unterprogramm MatMult erhält die zu multiplizierenden
Matrizen a und b als Eingangsgrößen sowie deren Dimension N.
Die Ergebnismatrix c wird ebenfalls übergeben.
Die Übergabe erfolgt standardmäßig per Referenz.
E. Baeck (Uni-DUE)
Prozedurales VBA
66 / 161
Funktionen, Unterprogramme
Unterprogramme
Beispiel Matrix-Multiplikation
Das Unterprogramm MatMult erhält die zu multiplizierenden
Matrizen a und b als Eingangsgrößen sowie deren Dimension N.
Die Ergebnismatrix c wird ebenfalls übergeben.
Die Übergabe erfolgt standardmäßig per Referenz.
2 Schleifen sind erforderlich, um alle ci,j anzusprechen.
Multiplikation quadratischer Matrizen, 3 geschachtelte Schleifen
c =a·b
ci,j =
N
X
ai,k · bk,j
⇐ Matrixgleichung
⇐ Berechnung der Komponenten
k=1
E. Baeck (Uni-DUE)
Prozedurales VBA
66 / 161
Funktionen, Unterprogramme
Unterprogramme
Beispiel Matrix-Multiplikation
Das Unterprogramm MatMult erhält die zu multiplizierenden
Matrizen a und b als Eingangsgrößen sowie deren Dimension N.
Die Ergebnismatrix c wird ebenfalls übergeben.
Die Übergabe erfolgt standardmäßig per Referenz.
2 Schleifen sind erforderlich, um alle ci,j anzusprechen.
Die Berechnung von ci,j (Skalarprodukt) benötigt eine weitere.
Multiplikation quadratischer Matrizen, 3 geschachtelte Schleifen
c =a·b
ci,j =
N
X
ai,k · bk,j
⇐ Matrixgleichung
⇐ Berechnung der Komponenten
k=1
E. Baeck (Uni-DUE)
Prozedurales VBA
66 / 161
Funktionen, Unterprogramme
Unterprogramme
Beispiel Matrix-Multiplikation
Das Unterprogramm MatMult erhält die zu multiplizierenden
Matrizen a und b als Eingangsgrößen sowie deren Dimension N.
Die Ergebnismatrix c wird ebenfalls übergeben.
Die Übergabe erfolgt standardmäßig per Referenz.
2 Schleifen sind erforderlich, um alle ci,j anzusprechen.
Die Berechnung von ci,j (Skalarprodukt) benötigt eine weitere.
Die Parameterliste enthält somit 4 Parameter (3 Matrizen und deren
Dimension).
Multiplikation quadratischer Matrizen, 3 geschachtelte Schleifen
c =a·b
ci,j =
N
X
ai,k · bk,j
⇐ Matrixgleichung
⇐ Berechnung der Komponenten
k=1
E. Baeck (Uni-DUE)
Prozedurales VBA
66 / 161
Funktionen, Unterprogramme
Unterprogramme
Beispiel Matrix-Multiplikation
Das Unterprogramm MatMult erhält die zu multiplizierenden
Matrizen a und b als Eingangsgrößen sowie deren Dimension N.
Die Ergebnismatrix c wird ebenfalls übergeben.
Die Übergabe erfolgt standardmäßig per Referenz.
2 Schleifen sind erforderlich, um alle ci,j anzusprechen.
Die Berechnung von ci,j (Skalarprodukt) benötigt eine weitere.
Die Parameterliste enthält somit 4 Parameter (3 Matrizen und deren
Dimension).
Programmrahmen des Unterprogramms
Sub MatMult(a() As Double, b() As Double, c() As Double, n As Integer)
...
End Sub
E. Baeck (Uni-DUE)
Prozedurales VBA
66 / 161
Funktionen, Unterprogramme
Unterprogramme
Die Implementierung
Sub test()
Dim a(1 To 3, 1 To 3) As Double
Dim b(1 To 3, 1 To 3) As Double
Dim c(1 To 3, 1 To 3) As Double
... Initialisierung
Call MatMult(a, b, c, 3)
End Sub
’ hier das Unterprogramm
Sub MatMult(a() As Double, b() As Double, c() As Double, n As Integer)
For i = 1 To n
For j = 1 To n
c(i, j) = 0
For k = 1 To n
c(i, j) = c(i, j) + a(i, k) * b(k, j)
Next
Next
Next
End Sub
E. Baeck (Uni-DUE)
Prozedurales VBA
67 / 161
Funktionen, Unterprogramme
Funktionen
Syntax einer Funktion
Ein Funktion wird mit dem Schlüssel Function eingeleitet.
Ein Funktion hat einen eindeutigen zulässigen Namen.
E. Baeck (Uni-DUE)
Prozedurales VBA
68 / 161
Funktionen, Unterprogramme
Funktionen
Syntax einer Funktion
Ein Funktion wird mit dem Schlüssel Function eingeleitet.
Ein Funktion hat einen eindeutigen zulässigen Namen.
Ein Funktion wird mit dem Schlüssel end function abgeschlossen.
E. Baeck (Uni-DUE)
Prozedurales VBA
68 / 161
Funktionen, Unterprogramme
Funktionen
Syntax einer Funktion
Ein Funktion wird mit dem Schlüssel Function eingeleitet.
Ein Funktion hat einen eindeutigen zulässigen Namen.
Ein Funktion wird mit dem Schlüssel end function abgeschlossen.
Ein Funktion wird mit dem Schlüssel exit function verlassen.
E. Baeck (Uni-DUE)
Prozedurales VBA
68 / 161
Funktionen, Unterprogramme
Funktionen
Syntax einer Funktion
Ein Funktion wird mit dem Schlüssel Function eingeleitet.
Ein Funktion hat einen eindeutigen zulässigen Namen.
Ein Funktion wird mit dem Schlüssel end function abgeschlossen.
Ein Funktion wird mit dem Schlüssel exit function verlassen.
Parameter werden Komma separiert in runde Klammern gesetzt.
E. Baeck (Uni-DUE)
Prozedurales VBA
68 / 161
Funktionen, Unterprogramme
Funktionen
Syntax einer Funktion
Ein Funktion wird mit dem Schlüssel Function eingeleitet.
Ein Funktion hat einen eindeutigen zulässigen Namen.
Ein Funktion wird mit dem Schlüssel end function abgeschlossen.
Ein Funktion wird mit dem Schlüssel exit function verlassen.
Parameter werden Komma separiert in runde Klammern gesetzt.
Parameter können auch explizit deklariert werden.
E. Baeck (Uni-DUE)
Prozedurales VBA
68 / 161
Funktionen, Unterprogramme
Funktionen
Syntax einer Funktion
Ein Funktion wird mit dem Schlüssel Function eingeleitet.
Ein Funktion hat einen eindeutigen zulässigen Namen.
Ein Funktion wird mit dem Schlüssel end function abgeschlossen.
Ein Funktion wird mit dem Schlüssel exit function verlassen.
Parameter werden Komma separiert in runde Klammern gesetzt.
Parameter können auch explizit deklariert werden.
Unterschied zum Unterprogramm ist die Rückgabe eines Wertes.
E. Baeck (Uni-DUE)
Prozedurales VBA
68 / 161
Funktionen, Unterprogramme
Funktionen
Syntax einer Funktion
Ein Funktion wird mit dem Schlüssel Function eingeleitet.
Ein Funktion hat einen eindeutigen zulässigen Namen.
Ein Funktion wird mit dem Schlüssel end function abgeschlossen.
Ein Funktion wird mit dem Schlüssel exit function verlassen.
Parameter werden Komma separiert in runde Klammern gesetzt.
Parameter können auch explizit deklariert werden.
Unterschied zum Unterprogramm ist die Rückgabe eines Wertes.
Der Typ des Rückgabewertes wird mit As [Datentyp] festgelegt.
E. Baeck (Uni-DUE)
Prozedurales VBA
68 / 161
Funktionen, Unterprogramme
Funktionen
Syntax einer Funktion
Ein Funktion wird mit dem Schlüssel Function eingeleitet.
Ein Funktion hat einen eindeutigen zulässigen Namen.
Ein Funktion wird mit dem Schlüssel end function abgeschlossen.
Ein Funktion wird mit dem Schlüssel exit function verlassen.
Parameter werden Komma separiert in runde Klammern gesetzt.
Parameter können auch explizit deklariert werden.
Unterschied zum Unterprogramm ist die Rückgabe eines Wertes.
Der Typ des Rückgabewertes wird mit As [Datentyp] festgelegt.
Parameterliste von Aufruf und aufgerufenem Programm MUSS
übereinstimmen.
E. Baeck (Uni-DUE)
Prozedurales VBA
68 / 161
Funktionen, Unterprogramme
Funktionen
Syntax einer Funktion
Ein Funktion wird mit dem Schlüssel Function eingeleitet.
Ein Funktion hat einen eindeutigen zulässigen Namen.
Ein Funktion wird mit dem Schlüssel end function abgeschlossen.
Ein Funktion wird mit dem Schlüssel exit function verlassen.
Parameter werden Komma separiert in runde Klammern gesetzt.
Parameter können auch explizit deklariert werden.
Unterschied zum Unterprogramm ist die Rückgabe eines Wertes.
Der Typ des Rückgabewertes wird mit As [Datentyp] festgelegt.
Parameterliste von Aufruf und aufgerufenem Programm MUSS
übereinstimmen.
Bei Unstimmigkeiten kann Programm abstürzen.
E. Baeck (Uni-DUE)
Prozedurales VBA
68 / 161
Funktionen, Unterprogramme
Funktionen
Syntax einer Funktion
Ein Funktion wird mit dem Schlüssel Function eingeleitet.
Ein Funktion hat einen eindeutigen zulässigen Namen.
Ein Funktion wird mit dem Schlüssel end function abgeschlossen.
Ein Funktion wird mit dem Schlüssel exit function verlassen.
Parameter werden Komma separiert in runde Klammern gesetzt.
Parameter können auch explizit deklariert werden.
Unterschied zum Unterprogramm ist die Rückgabe eines Wertes.
Der Typ des Rückgabewertes wird mit As [Datentyp] festgelegt.
Parameterliste von Aufruf und aufgerufenem Programm MUSS
übereinstimmen.
Bei Unstimmigkeiten kann Programm abstürzen.
E. Baeck (Uni-DUE)
Prozedurales VBA
68 / 161
Funktionen, Unterprogramme
Funktionen
Beispiel Linearer Interpolator
Gegeben sind zwei Punkte im 2 dimensionalen Raum ((x, y ): p 1 , p 2 ).
Gegeben sind der x-Wert x3 eines zu interpolierenden Punktes.
E. Baeck (Uni-DUE)
Prozedurales VBA
69 / 161
Funktionen, Unterprogramme
Funktionen
Beispiel Linearer Interpolator
Gegeben sind zwei Punkte im 2 dimensionalen Raum ((x, y ): p 1 , p 2 ).
Gegeben sind der x-Wert x3 eines zu interpolierenden Punktes.
Interpolation über den x-Wert mit der Einheitskoordinate ξ.
y3 = (1 − ξ) · y1 + ξ · y2
x3 − x1
, mit ξ ∈ [0, 1]
ξ=
x2 − x1
E. Baeck (Uni-DUE)
Prozedurales VBA
69 / 161
Funktionen, Unterprogramme
Funktionen
Beispiel Linearer Interpolator
Gegeben sind zwei Punkte im 2 dimensionalen Raum ((x, y ): p 1 , p 2 ).
Gegeben sind der x-Wert x3 eines zu interpolierenden Punktes.
Interpolation über den x-Wert mit der Einheitskoordinate ξ.
y3 = (1 − ξ) · y1 + ξ · y2
x3 − x1
, mit ξ ∈ [0, 1]
ξ=
x2 − x1
Die Ortsvektoren p 1 , p 2 und der x3 -Wert werden übergeben.
E. Baeck (Uni-DUE)
Prozedurales VBA
69 / 161
Funktionen, Unterprogramme
Funktionen
Beispiel Linearer Interpolator
Gegeben sind zwei Punkte im 2 dimensionalen Raum ((x, y ): p 1 , p 2 ).
Gegeben sind der x-Wert x3 eines zu interpolierenden Punktes.
Interpolation über den x-Wert mit der Einheitskoordinate ξ.
y3 = (1 − ξ) · y1 + ξ · y2
x3 − x1
, mit ξ ∈ [0, 1]
ξ=
x2 − x1
Die Ortsvektoren p 1 , p 2 und der x3 -Wert werden übergeben.
Rückgabe ist der interpolierte y-Wert.
E. Baeck (Uni-DUE)
Prozedurales VBA
69 / 161
Funktionen, Unterprogramme
Funktionen
Beispiel Linearer Interpolator
Gegeben sind zwei Punkte im 2 dimensionalen Raum ((x, y ): p 1 , p 2 ).
Gegeben sind der x-Wert x3 eines zu interpolierenden Punktes.
Interpolation über den x-Wert mit der Einheitskoordinate ξ.
y3 = (1 − ξ) · y1 + ξ · y2
x3 − x1
, mit ξ ∈ [0, 1]
ξ=
x2 − x1
Die Ortsvektoren p 1 , p 2 und der x3 -Wert werden übergeben.
Rückgabe ist der interpolierte y-Wert.
E. Baeck (Uni-DUE)
Prozedurales VBA
69 / 161
Funktionen, Unterprogramme
Funktionen
Die Implementierung
Formeln
y3 = (1 − ξ) · y1 + ξ · y2
x3 − x1
ξ=
, mit ξ ∈ [0, 1]
x2 − x1
Implementierung
Sub test()
Dim p1(1 To 2) As Double
Dim p2(1 To 2) As Double
Dim p3(1 To 2) As Double
p2(1) = 1#: p2(2) = 2#
p3(1) = 0.5
p3(2) = Interpol(p1, p2, p3(1))
End Sub
’ hier die Funktion
Function Interpol(p1() As Double, p2() As Double, x As Double) As Double
xi = (x - p1(1)) / (p2(1) - p1(1))
Interpol = (1 - xi) * p1(2) + xi * p2(2)
End Function
E. Baeck (Uni-DUE)
Prozedurales VBA
70 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Rekursive Funktionen
Eine rekursive Funktion ist durch sich selbst definiert.
Eine rekursive Funktion braucht eine Abbruchbedingung.
E. Baeck (Uni-DUE)
Prozedurales VBA
71 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Rekursive Funktionen
Eine rekursive Funktion ist durch sich selbst definiert.
Eine rekursive Funktion braucht eine Abbruchbedingung.
Eine fehlende Abbruchbedingung führt zur unendlichen Aufruffolge.
E. Baeck (Uni-DUE)
Prozedurales VBA
71 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Rekursive Funktionen
Eine rekursive Funktion ist durch sich selbst definiert.
Eine rekursive Funktion braucht eine Abbruchbedingung.
Eine fehlende Abbruchbedingung führt zur unendlichen Aufruffolge.
Eine unendliche Aufruffolge bringt das Programm zum Absturz, da
der Rückweg unendlich aufwendig wird. Es führt zum Stack-Overflow.
E. Baeck (Uni-DUE)
Prozedurales VBA
71 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Rekursive Funktionen
Eine rekursive Funktion ist durch sich selbst definiert.
Eine rekursive Funktion braucht eine Abbruchbedingung.
Eine fehlende Abbruchbedingung führt zur unendlichen Aufruffolge.
Eine unendliche Aufruffolge bringt das Programm zum Absturz, da
der Rückweg unendlich aufwendig wird. Es führt zum Stack-Overflow.
Einfaches Beispiel ist die Fakultät
n! = n · (n − 1)!
1! = 1 , Abbruchbedingung am Ende der Aufruffolge
E. Baeck (Uni-DUE)
Prozedurales VBA
71 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Rekursive Funktionen
Eine rekursive Funktion ist durch sich selbst definiert.
Eine rekursive Funktion braucht eine Abbruchbedingung.
Eine fehlende Abbruchbedingung führt zur unendlichen Aufruffolge.
Eine unendliche Aufruffolge bringt das Programm zum Absturz, da
der Rückweg unendlich aufwendig wird. Es führt zum Stack-Overflow.
Einfaches Beispiel ist die Fakultät
n! = n · (n − 1)!
1! = 1 , Abbruchbedingung am Ende der Aufruffolge
E. Baeck (Uni-DUE)
Prozedurales VBA
71 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Rekursive Implementierung der Fakultät
Formeln
n! = n · (n − 1)!
1! = 1 , Abbruchbedingung
Implementierung
Sub test()
Dim f As Long
f = fakultaet(4)
End Sub
’ hier die Funktion
Function fakultaet(n As Integer) As Long
If n > 1 Then
fakultaet = n * fakultaet(n - 1)
Else
fakultaet = 1
End If
End Function
E. Baeck (Uni-DUE)
Prozedurales VBA
72 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Rekursive Implementierung der Fibunacci-Zahlen
Formeln
fn = fn−1 + fn−2 , für n > 1
f0 = 0 und f1 = 1
Implementierung
Sub fibrectest()
n = fibrec(8)
Debug.Print n
End Sub
’ hier die Funktion
Function fibrec(n) As Long
If n > 1 Then
fibrec = fibrec(n - 1) + fibrec(n - 2)
ElseIf n = 1 Then
fibrec = 1
Else
fibrec = 0
End If
End Function
E. Baeck (Uni-DUE)
Prozedurales VBA
73 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Bewertung rekursiver Implementierungen
Vorteil der rekursiven Implementierung ist oftmals die Nähe zur
mathematischen Definition.
Oft ist die rekursive Implementierung SEHR unwirtschaftlich.
E. Baeck (Uni-DUE)
Prozedurales VBA
74 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Bewertung rekursiver Implementierungen
Vorteil der rekursiven Implementierung ist oftmals die Nähe zur
mathematischen Definition.
Oft ist die rekursive Implementierung SEHR unwirtschaftlich.
Iterativ benötigt Fibunacci n − 1 Schleifendurchläufe.
E. Baeck (Uni-DUE)
Prozedurales VBA
74 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Bewertung rekursiver Implementierungen
Vorteil der rekursiven Implementierung ist oftmals die Nähe zur
mathematischen Definition.
Oft ist die rekursive Implementierung SEHR unwirtschaftlich.
Iterativ benötigt Fibunacci n − 1 Schleifendurchläufe.
Rekursiv verdoppelt sich der Aufruf auf jeder Stufe, sodass ≈ 2n−4
Aufrufe erfolgen.
E. Baeck (Uni-DUE)
Prozedurales VBA
74 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Bewertung rekursiver Implementierungen
Vorteil der rekursiven Implementierung ist oftmals die Nähe zur
mathematischen Definition.
Oft ist die rekursive Implementierung SEHR unwirtschaftlich.
Iterativ benötigt Fibunacci n − 1 Schleifendurchläufe.
Rekursiv verdoppelt sich der Aufruf auf jeder Stufe, sodass ≈ 2n−4
Aufrufe erfolgen.
f40 legt EXCEL bereits lahm (netter Test!).
Aufruf-Explusion bei rekursivem Fibunacci
f0
f1
f2
f3
f4
...
:1
:1
:3
:5
:9
Aufrufe
Aufrufe
Aufrufe (f0 ), (f1 )
Aufrufe (f1 ), (f2 ) → (f1 )
Aufrufe (f2 ) → (f1 ), (f3 ) → (f2 ) → (f1 )
E. Baeck (Uni-DUE)
f10
f20
f30
f40
Prozedurales VBA
:170
:21891 Aufrufe
:2692537 Aufrufe (2 · 106 )
:331160281 Aufrufe (3 · 108 )
74 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Bewertung rekursiver Implementierungen
Vorteil der rekursiven Implementierung ist oftmals die Nähe zur
mathematischen Definition.
Oft ist die rekursive Implementierung SEHR unwirtschaftlich.
Iterativ benötigt Fibunacci n − 1 Schleifendurchläufe.
Rekursiv verdoppelt sich der Aufruf auf jeder Stufe, sodass ≈ 2n−4
Aufrufe erfolgen.
f40 legt EXCEL bereits lahm (netter Test!).
Ist Performance notwendig, sollten iterative Implementierungen
gewählt werden.
E. Baeck (Uni-DUE)
Prozedurales VBA
74 / 161
Funktionen, Unterprogramme
Rekursive Funktionen
Bewertung rekursiver Implementierungen
Vorteil der rekursiven Implementierung ist oftmals die Nähe zur
mathematischen Definition.
Oft ist die rekursive Implementierung SEHR unwirtschaftlich.
Iterativ benötigt Fibunacci n − 1 Schleifendurchläufe.
Rekursiv verdoppelt sich der Aufruf auf jeder Stufe, sodass ≈ 2n−4
Aufrufe erfolgen.
f40 legt EXCEL bereits lahm (netter Test!).
Ist Performance notwendig, sollten iterative Implementierungen
gewählt werden.
E. Baeck (Uni-DUE)
Prozedurales VBA
74 / 161
Datenstrukturen
Datenstrukturen
E. Baeck (Uni-DUE)
Prozedurales VBA
75 / 161
Datenstrukturen
Modellierungsschritte
Modellierungsschritte
Prozessorregister in ASSEMBLER, sehr Hardware nah!
Elementare Datentypen, auch noch Hardware nah!
ASSEMBLER nah an der Hardware
Der Aufbau des Prozessors spielt eine entscheidende Rolle. Das Problem
ist an die Hardware anzupassen!
E. Baeck (Uni-DUE)
Prozedurales VBA
76 / 161
Datenstrukturen
Modellierungsschritte
Modellierungsschritte
Prozessorregister in ASSEMBLER, sehr Hardware nah!
Elementare Datentypen, auch noch Hardware nah!
Felder elementarer Datentypen, ein Schritt weiter.
Elementare Datentypen
Die Daten des zu modellierenden Problems sind auf elementare Einheiten
herunter zu brechen. Wir sind i.A. noch weit weg von der Systemstruktur.
E. Baeck (Uni-DUE)
Prozedurales VBA
76 / 161
Datenstrukturen
Modellierungsschritte
Modellierungsschritte
Prozessorregister in ASSEMBLER, sehr Hardware nah!
Elementare Datentypen, auch noch Hardware nah!
Felder elementarer Datentypen, ein Schritt weiter.
Datenstrukturen, Schritt hin zur OOP.
Fehlder elementarer Datentypen
Abgesehen von Vektoren und Matrizen sind wir immer noch ein Stück
entfernt von der Systemstruktur.
E. Baeck (Uni-DUE)
Prozedurales VBA
76 / 161
Datenstrukturen
Modellierungsschritte
Modellierungsschritte
Prozessorregister in ASSEMBLER, sehr Hardware nah!
Elementare Datentypen, auch noch Hardware nah!
Felder elementarer Datentypen, ein Schritt weiter.
Datenstrukturen, Schritt hin zur OOP.
Klassen bzw. Objekt, Ankunft bei OOP.
Datenstrukturen
Im Rahmen von Datenstrukturen kann aus den elementaren Datentypen
ein Datenobjekt zusammen gestellt werden, das die Objekte eines Systems
beschreiben kann.
E. Baeck (Uni-DUE)
Prozedurales VBA
76 / 161
Datenstrukturen
Modellierungsschritte
Modellierungsschritte
Prozessorregister in ASSEMBLER, sehr Hardware nah!
Elementare Datentypen, auch noch Hardware nah!
Felder elementarer Datentypen, ein Schritt weiter.
Datenstrukturen, Schritt hin zur OOP.
Klassen bzw. Objekt, Ankunft bei OOP.
Klassenmodul, das Objekt in VBA
Ein Objekt (Klassenmodul) vereint die Daten eines Systems mit dessen
Verhalten (Funktionen und Unterprogramme). Beispiel wäre ein Punkt
beschrieben durch Koordinaten, Farbe und eine Verschiebungsmethode
(Move).
E. Baeck (Uni-DUE)
Prozedurales VBA
76 / 161
Datenstrukturen
Datenstrukturen
Datenstrukturen
Datenstrukturen implementieren benutzerdefinierte Datentypen.
Eine Datenstruktur wird durch eine Bezeichnung beschrieben.
E. Baeck (Uni-DUE)
Prozedurales VBA
77 / 161
Datenstrukturen
Datenstrukturen
Datenstrukturen
Datenstrukturen implementieren benutzerdefinierte Datentypen.
Eine Datenstruktur wird durch eine Bezeichnung beschrieben.
Eine Datenstruktur wird mit dem Schlüssel Type eingeleitet.
E. Baeck (Uni-DUE)
Prozedurales VBA
77 / 161
Datenstrukturen
Datenstrukturen
Datenstrukturen
Datenstrukturen implementieren benutzerdefinierte Datentypen.
Eine Datenstruktur wird durch eine Bezeichnung beschrieben.
Eine Datenstruktur wird mit dem Schlüssel Type eingeleitet.
Eine Datenstruktur wird mit dem Schlüssel End Type abgeschlossen.
Ein Punkt, Beispiel einer Datenstruktur
Type Punkt
x(1 To 3) As Double
f As Integer
c As String
End Type
...
dim p as Punkt
...
p.f
= 1
p.x(1) = 2
E. Baeck (Uni-DUE)
’ Koordinaten
’ Farbe
’ Ein Kommentar
Prozedurales VBA
77 / 161
Datenstrukturen
Datenstrukturen
Datenstrukturen
Datenstrukturen implementieren benutzerdefinierte Datentypen.
Eine Datenstruktur wird durch eine Bezeichnung beschrieben.
Eine Datenstruktur wird mit dem Schlüssel Type eingeleitet.
Eine Datenstruktur wird mit dem Schlüssel End Type abgeschlossen.
Der Zugriff auf die Elemente erfolgt mit . Notation.
Ein Punkt, Beispiel einer Datenstruktur
Type Punkt
x(1 To 3) As Double
f As Integer
c As String
End Type
...
dim p as Punkt
...
p.f
= 1
p.x(1) = 2
E. Baeck (Uni-DUE)
’ Koordinaten
’ Farbe
’ Ein Kommentar
Prozedurales VBA
77 / 161
Datenstrukturen
Datenstrukturen
Datenstrukturen
Datenstrukturen implementieren benutzerdefinierte Datentypen.
Eine Datenstruktur wird durch eine Bezeichnung beschrieben.
Eine Datenstruktur wird mit dem Schlüssel Type eingeleitet.
Eine Datenstruktur wird mit dem Schlüssel End Type abgeschlossen.
Der Zugriff auf die Elemente erfolgt mit . Notation.
Ein Punkt, Beispiel einer Datenstruktur
Type Punkt
x(1 To 3) As Double
f As Integer
c As String
End Type
...
dim p as Punkt
...
p.f
= 1
p.x(1) = 2
E. Baeck (Uni-DUE)
’ Koordinaten
’ Farbe
’ Ein Kommentar
Prozedurales VBA
77 / 161
Datenstrukturen
ER-Diagramm
Entity-Relationship-Modell
Das ER-Modell ist De-facto-Standard der Datenmodellierung.
Das ER-Modell wurde 1976 von Peter Chen vorgestellt.
E. Baeck (Uni-DUE)
Prozedurales VBA
78 / 161
Datenstrukturen
ER-Diagramm
Entity-Relationship-Modell
Das ER-Modell ist De-facto-Standard der Datenmodellierung.
Das ER-Modell wurde 1976 von Peter Chen vorgestellt.
Es besteht aus Entities (Objekten der Realität),
E. Baeck (Uni-DUE)
Prozedurales VBA
78 / 161
Datenstrukturen
ER-Diagramm
Entity-Relationship-Modell
Das ER-Modell ist De-facto-Standard der Datenmodellierung.
Das ER-Modell wurde 1976 von Peter Chen vorgestellt.
Es besteht aus Entities (Objekten der Realität),
Relationships (Beziehungen),
Entity 1
E. Baeck (Uni-DUE)
Entity 2
Prozedurales VBA
78 / 161
Datenstrukturen
ER-Diagramm
Entity-Relationship-Modell
Das ER-Modell ist De-facto-Standard der Datenmodellierung.
Das ER-Modell wurde 1976 von Peter Chen vorgestellt.
Es besteht aus Entities (Objekten der Realität),
Relationships (Beziehungen),
Attributes (Eigenschaften) und
Entity 1
E. Baeck (Uni-DUE)
Relationship
Entity 2
Prozedurales VBA
78 / 161
Datenstrukturen
ER-Diagramm
Entity-Relationship-Modell
Das ER-Modell ist De-facto-Standard der Datenmodellierung.
Das ER-Modell wurde 1976 von Peter Chen vorgestellt.
Es besteht aus Entities (Objekten der Realität),
Relationships (Beziehungen),
Attributes (Eigenschaften) und
Kardinalitäten (Objektanzahl in einer Liste)
Attribut 1
Attribut 2
Attribut 1
Entity 1
Relationship
Entity 2
Attribut 3
E. Baeck (Uni-DUE)
Attribut 2
Attribut 3
Prozedurales VBA
78 / 161
Datenstrukturen
ER-Diagramm
Entity-Relationship-Modell
Das ER-Modell ist De-facto-Standard der Datenmodellierung.
Das ER-Modell wurde 1976 von Peter Chen vorgestellt.
Es besteht aus Entities (Objekten der Realität),
Relationships (Beziehungen),
Attributes (Eigenschaften) und
Kardinalitäten (Objektanzahl in einer Liste)
Fehlt eine Beziehung so ist dies hier als enthält zu sehen.
Attribut 1
Attribut 2
Attribut 1
Entity 1
1
Relationship
*
Entity 2
Attribut 3
E. Baeck (Uni-DUE)
Attribut 2
Attribut 3
Prozedurales VBA
78 / 161
Datenstrukturen
ER-Diagramm
Entity-Relationship-Modell
Das ER-Modell ist De-facto-Standard der Datenmodellierung.
Das ER-Modell wurde 1976 von Peter Chen vorgestellt.
Es besteht aus Entities (Objekten der Realität),
Relationships (Beziehungen),
Attributes (Eigenschaften) und
Kardinalitäten (Objektanzahl in einer Liste)
Fehlt eine Beziehung so ist dies hier als enthält zu sehen.
Attribut 1
Attribut 2
Attribut 1
Entity 1
1
Relationship
*
Entity 2
Attribut 3
E. Baeck (Uni-DUE)
Attribut 2
Attribut 3
Prozedurales VBA
78 / 161
Datenstrukturen
Stabwerk
Modellierung eines Stabwerks
Das folgende Stabwerk ist als ER-Diagramm zu modellieren.
Aus dem ER-Diagramm sind die VBA-Datenstrukturen abzuleiten.
E. Baeck (Uni-DUE)
Prozedurales VBA
79 / 161
Datenstrukturen
Stabwerk
Modellierung eines Stabwerks
Das folgende Stabwerk ist als ER-Diagramm zu modellieren.
E-Modul
Träger
Fläche
Flächenmoment
21000
IPB 140
43
1510
kN/cm2
cm2
cm4
Aus dem ER-Diagramm sind die VBA-Datenstrukturen abzuleiten.
Im Rahmen eines VBA-Codes ist das Stabwerk zu beschreiben.
E. Baeck (Uni-DUE)
Prozedurales VBA
79 / 161
Datenstrukturen
Stabwerk
Modellierung eines Stabwerks
Das folgende Stabwerk ist als ER-Diagramm zu modellieren.
E-Modul
Träger
Fläche
Flächenmoment
21000
IPB 140
43
1510
kN/cm2
cm2
cm4
Aus dem ER-Diagramm sind die VBA-Datenstrukturen abzuleiten.
Im Rahmen eines VBA-Codes ist das Stabwerk zu beschreiben.
E. Baeck (Uni-DUE)
Prozedurales VBA
79 / 161
Datenstrukturen
Stabwerk
Analyse und Aufbau des ER-Diagramms
Zunächst haben wir das Stabwerk.
Das Stabwerk besteht aus Stäben.
Stabwerk
E. Baeck (Uni-DUE)
Prozedurales VBA
80 / 161
Datenstrukturen
Stabwerk
Analyse und Aufbau des ER-Diagramms
Zunächst haben wir das Stabwerk.
Das Stabwerk besteht aus Stäben.
Ein Stab verbindet jeweils zwei Knoten.
Stabwerk
E. Baeck (Uni-DUE)
Stab
Prozedurales VBA
80 / 161
Datenstrukturen
Stabwerk
Analyse und Aufbau des ER-Diagramms
Zunächst haben wir das Stabwerk.
Das Stabwerk besteht aus Stäben.
Ein Stab verbindet jeweils zwei Knoten.
Ein Knoten enthält ein Lager.
Stabwerk
E. Baeck (Uni-DUE)
Stab
Knoten
Prozedurales VBA
80 / 161
Datenstrukturen
Stabwerk
Analyse und Aufbau des ER-Diagramms
Zunächst haben wir das Stabwerk.
Das Stabwerk besteht aus Stäben.
Ein Stab verbindet jeweils zwei Knoten.
Ein Knoten enthält ein Lager.
Enthält ein Stab zwei Knoten, ergeben sich, falls keine Referenzen
verwendet werden, Redundanzen. Knoten werden mehrfach
gespeichert. 2 Stäbe, 4 Knoten, Knoten 2 zweifach!
Stabwerk
E. Baeck (Uni-DUE)
Stab
Knoten
Prozedurales VBA
Lager
80 / 161
Datenstrukturen
Stabwerk
Analyse und Aufbau des ER-Diagramms
Zunächst haben wir das Stabwerk.
Das Stabwerk besteht aus Stäben.
Ein Stab verbindet jeweils zwei Knoten.
Ein Knoten enthält ein Lager.
Enthält ein Stab zwei Knoten, ergeben sich, falls keine Referenzen
verwendet werden, Redundanzen. Knoten werden mehrfach
gespeichert. 2 Stäbe, 4 Knoten, Knoten 2 zweifach!
Werden die Objekte über ihre Nummer verknüpft, kann man
Redundanzen vermeiden. FE-Variante
Stabwerk
E. Baeck (Uni-DUE)
1
2
Stab
1
2
Prozedurales VBA
Knoten
1
1
Lager
80 / 161
Datenstrukturen
Stabwerk
Analyse und Aufbau des ER-Diagramms
Zunächst haben wir das Stabwerk.
Das Stabwerk besteht aus Stäben.
Ein Stab verbindet jeweils zwei Knoten.
Ein Knoten enthält ein Lager.
Enthält ein Stab zwei Knoten, ergeben sich, falls keine Referenzen
verwendet werden, Redundanzen. Knoten werden mehrfach
gespeichert. 2 Stäbe, 4 Knoten, Knoten 2 zweifach!
Werden die Objekte über ihre Nummer verknüpft, kann man
Redundanzen vermeiden. FE-Variante
Stabwerk
1
2
1
1
Stab
1
3
Knoten
E. Baeck (Uni-DUE)
Prozedurales VBA
Lager
80 / 161
Datenstrukturen
Stabwerk
Objektanalyse der Stäbe
Der Stab hat eine Nummer ne.
Der Stab hat die Nummern der anschließenden Knoten nk.
ne
E. Baeck (Uni-DUE)
Stab
Type stab
ne As Integer
End Type
Prozedurales VBA
81 / 161
Datenstrukturen
Stabwerk
Objektanalyse der Stäbe
Der Stab hat eine Nummer ne.
Der Stab hat die Nummern der anschließenden Knoten nk.
Das Material des Stabes wird beschrieben durch den E-Modul E .
ne
Stab
Type stab
ne As Integer
nk(1 To 2 ) As Integer
End Type
nk(1 : 2)
E. Baeck (Uni-DUE)
Prozedurales VBA
81 / 161
Datenstrukturen
Stabwerk
Objektanalyse der Stäbe
Der Stab hat eine Nummer ne.
Der Stab hat die Nummern der anschließenden Knoten nk.
Das Material des Stabes wird beschrieben durch den E-Modul E .
Die Stabquerschnitte werden in 2d beschrieben durch die Flache A
und durch das Flächenträgheitsmoment I .
ne
Stab
nk(1 : 2)
E
E. Baeck (Uni-DUE)
Type stab
ne As Integer
nk(1 To 2 ) As Integer
E As Double
End Type
Prozedurales VBA
81 / 161
Datenstrukturen
Stabwerk
Objektanalyse der Stäbe
Der Stab hat eine Nummer ne.
Der Stab hat die Nummern der anschließenden Knoten nk.
Das Material des Stabes wird beschrieben durch den E-Modul E .
Die Stabquerschnitte werden in 2d beschrieben durch die Flache A
und durch das Flächenträgheitsmoment I .
Vorsicht:
double für dimensionierte Größen, integer für abzählbare Größen.
ne
Stab
nk(1 : 2)
I
E
E. Baeck (Uni-DUE)
A
Type stab
ne As Integer
nk(1 To 2 ) As Integer
E As Double
A As Double
I As Double
End Type
Prozedurales VBA
81 / 161
Datenstrukturen
Stabwerk
Objektanalyse der Stäbe
Der Stab hat eine Nummer ne.
Der Stab hat die Nummern der anschließenden Knoten nk.
Das Material des Stabes wird beschrieben durch den E-Modul E .
Die Stabquerschnitte werden in 2d beschrieben durch die Flache A
und durch das Flächenträgheitsmoment I .
Vorsicht:
double für dimensionierte Größen, integer für abzählbare Größen.
ne
Stab
nk(1 : 2)
I
E
E. Baeck (Uni-DUE)
A
Type stab
ne As Integer
nk(1 To 2 ) As Integer
E As Double
A As Double
I As Double
End Type
Prozedurales VBA
81 / 161
Datenstrukturen
Stabwerk
Objektanalyse der Knoten
Der Knoten hat eine Nummer nk.
Der Knoten hat ein Knotenfeld x.
Type knoten
nk As Integer
nk
Knoten
End Type
E. Baeck (Uni-DUE)
Prozedurales VBA
82 / 161
Datenstrukturen
Stabwerk
Objektanalyse der Knoten
Der Knoten hat eine Nummer nk.
Der Knoten hat ein Knotenfeld x.
Der Knoten enthält ein Lagerobjekt L.
nk
Knoten
x(1 : 2)
Type knoten
nk As Integer
x(1 To 2) As Double
End Type
E. Baeck (Uni-DUE)
Prozedurales VBA
82 / 161
Datenstrukturen
Stabwerk
Objektanalyse der Knoten
Der Knoten hat eine Nummer nk.
Der Knoten hat ein Knotenfeld x.
Der Knoten enthält ein Lagerobjekt L.
nk
Knoten
1
1
x(1 : 2)
Type knoten
nk As Integer
x(1 To 2) As Double
L As Lager
End Type
L
E. Baeck (Uni-DUE)
Prozedurales VBA
82 / 161
Datenstrukturen
Stabwerk
Objektanalyse der Lager
Kennwerte des Lagers: 0=verschieblich, 1=fest.
Lager Verschiebung in x, tx .
E. Baeck (Uni-DUE)
Prozedurales VBA
83 / 161
Datenstrukturen
Stabwerk
Objektanalyse der Lager
Kennwerte des Lagers: 0=verschieblich, 1=fest.
Lager Verschiebung in x, tx .
Lager Verschiebung in z, tz .
Type lager
tx as Integer
tx
Lager
End Type
E. Baeck (Uni-DUE)
Prozedurales VBA
83 / 161
Datenstrukturen
Stabwerk
Objektanalyse der Lager
Kennwerte des Lagers: 0=verschieblich, 1=fest.
Lager Verschiebung in x, tx .
Lager Verschiebung in z, tz .
Lager Verdrehung um y, ry .
tx
Lager
tz
Type lager
tx as Integer
tz as Integer
End Type
E. Baeck (Uni-DUE)
Prozedurales VBA
83 / 161
Datenstrukturen
Stabwerk
Objektanalyse der Lager
Kennwerte des Lagers: 0=verschieblich, 1=fest.
Lager Verschiebung in x, tx .
Lager Verschiebung in z, tz .
Lager Verdrehung um y, ry .
tx
Lager
ry
E. Baeck (Uni-DUE)
tz
Type lager
tx as Integer
tz as Integer
ry as Integer
End Type
Prozedurales VBA
83 / 161
Datenstrukturen
Stabwerk
ER-Gesamtdiagramm
Das Diagramm wird aus den Teildiagrammen zusammen gesetzt.
ne
Stabwerk
1
2
nk(1 : 2)
Stab
A
E
I
Lager
tx
ry
tz
1
3
nk
Knoten
1
1
x(1 : 2)
E. Baeck (Uni-DUE)
Prozedurales VBA
84 / 161
Datenstrukturen
Stabwerk
Implementierung des Stabwerks
Type Punkt
x(1 To 3) As Double
f As Integer
c As String
End Type
Type stab
ne As Integer
nk(1 To 2) As Integer
E As Double
A As Double
I As Double
End Type
Type lager
tx As Integer
ty As Integer
ry As Integer
End Type
Type knoten
nk As Integer
x(1 To 2) As Double
L As lager
End Type
Type stabwerk
s(1 To 2) As stab
k(1 To 3) As knoten
End Type
E. Baeck (Uni-DUE)
Sub stabwerk()
Dim sw As stabwerk
’ Elemente
sw.s(1).ne = 1
sw.s(1).nk(1) = 1
sw.s(1).nk(2) = 2
sw.s(2).ne = 2
sw.s(2).nk(1) = 2
sw.s(2).nk(2) = 3
’ Knoten und Lager
sw.k(1).nk = 1
sw.k(1).L.tx = 1
sw.k(1).L.tz = 1
sw.k(1).L.ry = 1
sw.k(2).nk = 2
sw.k(2).x(2) = 400
sw.k(3).nk = 3
sw.k(3).x(1) = 200
sw.k(3).x(2) = 400
’ Material: E
sw.s(1).E = 21000
sw.s(2).E = 21000
’ Profilwerte: A, I
sw.s(1).A = 43
sw.s(2).A = 43
sw.s(1).I = 1510
sw.s(2).I = 1510
End Sub
Prozedurales VBA
85 / 161
Datenstrukturen
Plattenträger
Plattenträger, Beispiel einer kleinen FE Struktur
Der folgende Träger ist als ER-Diagramm zu modellieren.
Aus dem ER-Diagramm sind die VBA-Datenstrukturen abzuleiten.
E. Baeck (Uni-DUE)
Prozedurales VBA
86 / 161
Datenstrukturen
Plattenträger
Plattenträger, Beispiel einer kleinen FE Struktur
Der folgende Träger ist als ER-Diagramm zu modellieren.
E-Modul
Plattendicke
21000
10
N/mm2
mm
Aus dem ER-Diagramm sind die VBA-Datenstrukturen abzuleiten.
Die Geometrie des Plattenträgers ist in VBA zu beschreiben.
E. Baeck (Uni-DUE)
Prozedurales VBA
86 / 161
Datenstrukturen
Plattenträger
Plattenträger, Beispiel einer kleinen FE Struktur
Der folgende Träger ist als ER-Diagramm zu modellieren.
E-Modul
Plattendicke
21000
10
N/mm2
mm
Aus dem ER-Diagramm sind die VBA-Datenstrukturen abzuleiten.
Die Geometrie des Plattenträgers ist in VBA zu beschreiben.
E. Baeck (Uni-DUE)
Prozedurales VBA
86 / 161
Datenstrukturen
Plattenträger
Analyse und Aufbau des ER-Diagramms
Der Träger umfasst alles und wird allgemein als System bezeichnet
Das System besteht hier aus zwei Dreiecken.
System
E. Baeck (Uni-DUE)
Prozedurales VBA
87 / 161
Datenstrukturen
Plattenträger
Analyse und Aufbau des ER-Diagramms
Der Träger umfasst alles und wird allgemein als System bezeichnet
Das System besteht hier aus zwei Dreiecken.
In der Finiten Element Methode werden Elemente mit beliebiger
Geometrie eingeführt. Das Dreieck ist eines von ihnen.
System
E. Baeck (Uni-DUE)
1
1..*
Element
Prozedurales VBA
87 / 161
Datenstrukturen
Plattenträger
Analyse und Aufbau des ER-Diagramms
Der Träger umfasst alles und wird allgemein als System bezeichnet
Das System besteht hier aus zwei Dreiecken.
In der Finiten Element Methode werden Elemente mit beliebiger
Geometrie eingeführt. Das Dreieck ist eines von ihnen.
Die Geometrie eines Elements wird durch Knoten beschrieben.
System
E. Baeck (Uni-DUE)
1
1..*
Element
Prozedurales VBA
87 / 161
Datenstrukturen
Plattenträger
Analyse und Aufbau des ER-Diagramms
Der Träger umfasst alles und wird allgemein als System bezeichnet
Das System besteht hier aus zwei Dreiecken.
In der Finiten Element Methode werden Elemente mit beliebiger
Geometrie eingeführt. Das Dreieck ist eines von ihnen.
Die Geometrie eines Elements wird durch Knoten beschrieben.
Die Lagerung der Knoten wird durch Lager beschrieben.
System
E. Baeck (Uni-DUE)
1
1..*
Element
1
1..*
Prozedurales VBA
Knoten
87 / 161
Datenstrukturen
Plattenträger
Analyse und Aufbau des ER-Diagramms
Der Träger umfasst alles und wird allgemein als System bezeichnet
Das System besteht hier aus zwei Dreiecken.
In der Finiten Element Methode werden Elemente mit beliebiger
Geometrie eingeführt. Das Dreieck ist eines von ihnen.
Die Geometrie eines Elements wird durch Knoten beschrieben.
Die Lagerung der Knoten wird durch Lager beschrieben.
Das Referenz-Modell verknüpft die einzelnen Objekte mit ihren
Adressen (pointer).
System
E. Baeck (Uni-DUE)
1
1..*
Element
1
1..*
Prozedurales VBA
Knoten
1
0..1
Lager
87 / 161
Datenstrukturen
Plattenträger
Analyse und Aufbau des ER-Diagramms
Der Träger umfasst alles und wird allgemein als System bezeichnet
Das System besteht hier aus zwei Dreiecken.
In der Finiten Element Methode werden Elemente mit beliebiger
Geometrie eingeführt. Das Dreieck ist eines von ihnen.
Die Geometrie eines Elements wird durch Knoten beschrieben.
Die Lagerung der Knoten wird durch Lager beschrieben.
Das Referenz-Modell verknüpft die einzelnen Objekte mit ihren
Adressen (pointer).
System
E. Baeck (Uni-DUE)
1
1..*
Element
1
1..*
Prozedurales VBA
Knoten
1
0..1
Lager
87 / 161
Datenstrukturen
Plattenträger
Zusätzliche Objekte einer FE-Struktur im ER-Diagramms
Die geometrischen Eigenschaften der Elemente sind nicht ausreichend.
Elemente werden um ein Material ergänzt (Elastizität, Plastizität)
System
E. Baeck (Uni-DUE)
1
1..*
Element
1
1..*
Prozedurales VBA
Knoten
1
0..1
Lager
88 / 161
Datenstrukturen
Plattenträger
Zusätzliche Objekte einer FE-Struktur im ER-Diagramms
Die geometrischen Eigenschaften der Elemente sind nicht ausreichend.
Elemente werden um ein Material ergänzt (Elastizität, Plastizität)
Es gibt Hilfselemente ohne Material (z.B. Starrkörperkopplung)
System
1
1..*
Element
1
1..*
Knoten
1
0..1
Lager
1
0..*
Material
E. Baeck (Uni-DUE)
Prozedurales VBA
88 / 161
Datenstrukturen
Plattenträger
Zusätzliche Objekte einer FE-Struktur im ER-Diagramms
Die geometrischen Eigenschaften der Elemente sind nicht ausreichend.
Elemente werden um ein Material ergänzt (Elastizität, Plastizität)
Es gibt Hilfselemente ohne Material (z.B. Starrkörperkopplung)
... und Elemente mehr mehreren Materialien (z.B. Verbundwerkstoff)
System
1
1..*
Element
1
1..*
Knoten
1
0..1
Lager
1
0..*
Material
E. Baeck (Uni-DUE)
Prozedurales VBA
88 / 161
Datenstrukturen
Plattenträger
Zusätzliche Objekte einer FE-Struktur im ER-Diagramms
Die geometrischen Eigenschaften der Elemente sind nicht ausreichend.
Elemente werden um ein Material ergänzt (Elastizität, Plastizität)
Es gibt Hilfselemente ohne Material (z.B. Starrkörperkopplung)
... und Elemente mehr mehreren Materialien (z.B. Verbundwerkstoff)
Elemente ergänzt z.T. durch Querschnittswerten (Balken, Schalen)
System
1
1..*
Element
1
1..*
Knoten
1
0..1
Lager
1
0..*
Material
E. Baeck (Uni-DUE)
Prozedurales VBA
88 / 161
Datenstrukturen
Plattenträger
Zusätzliche Objekte einer FE-Struktur im ER-Diagramms
Die geometrischen Eigenschaften der Elemente sind nicht ausreichend.
Elemente werden um ein Material ergänzt (Elastizität, Plastizität)
Es gibt Hilfselemente ohne Material (z.B. Starrkörperkopplung)
... und Elemente mehr mehreren Materialien (z.B. Verbundwerkstoff)
Elemente ergänzt z.T. durch Querschnittswerten (Balken, Schalen)
Belastungen auf Knoten/Elemente (Punktlast, Druck, Eigengewicht)
1
System
1..*
1
0..1
Querschnittswerte
E. Baeck (Uni-DUE)
Element
1
1..*
Knoten
1
0..1
Lager
1
0..*
Material
Prozedurales VBA
88 / 161
Datenstrukturen
Plattenträger
Zusätzliche Objekte einer FE-Struktur im ER-Diagramms
Die geometrischen Eigenschaften der Elemente sind nicht ausreichend.
Elemente werden um ein Material ergänzt (Elastizität, Plastizität)
Es gibt Hilfselemente ohne Material (z.B. Starrkörperkopplung)
... und Elemente mehr mehreren Materialien (z.B. Verbundwerkstoff)
Elemente ergänzt z.T. durch Querschnittswerten (Balken, Schalen)
Belastungen auf Knoten/Elemente (Punktlast, Druck, Eigengewicht)
Die Eigenschaften sind in einer Verfeinerung fest zu legen.
Elementlast
Knotenlast
0..*
0..*
1
1
System
1..*
1
0..1
Querschnittswerte
E. Baeck (Uni-DUE)
1
Element
1
1..*
Knoten
1
0..1
Lager
1
0..*
Material
Prozedurales VBA
88 / 161
Datenstrukturen
Plattenträger
Zusätzliche Objekte einer FE-Struktur im ER-Diagramms
Die geometrischen Eigenschaften der Elemente sind nicht ausreichend.
Elemente werden um ein Material ergänzt (Elastizität, Plastizität)
Es gibt Hilfselemente ohne Material (z.B. Starrkörperkopplung)
... und Elemente mehr mehreren Materialien (z.B. Verbundwerkstoff)
Elemente ergänzt z.T. durch Querschnittswerten (Balken, Schalen)
Belastungen auf Knoten/Elemente (Punktlast, Druck, Eigengewicht)
Die Eigenschaften sind in einer Verfeinerung fest zu legen.
Elementlast
Knotenlast
0..*
0..*
1
1
System
1..*
1
0..1
Querschnittswerte
E. Baeck (Uni-DUE)
1
Element
1
1..*
Knoten
1
0..1
Lager
1
0..*
Material
Prozedurales VBA
88 / 161
Dateien
Dateien
E. Baeck (Uni-DUE)
Prozedurales VBA
89 / 161
Dateien
Textdateien
Aufbau einer Textdatei
Eine Datei ist eine lineare Menge von Bytes.
Eine Textdatei besteht nur aus darstellbaren Zeichen.
Textdatei in einem HEX-Editor
Die Datei wurde im UNI-Code
Format abgespeichert, d.h. für jedes
Zeichen werden zwei Bytes (4
Hex-Ziffern) verwendet.
Der Zeilenumbruch erfolgt mit
0D00 0A00.
E. Baeck (Uni-DUE)
Prozedurales VBA
90 / 161
Dateien
Textdateien
Aufbau einer Textdatei
Eine Datei ist eine lineare Menge von Bytes.
Eine Textdatei besteht nur aus darstellbaren Zeichen.
Struktur der Datei durch Steuerzeichen (Zeilen- bzw. Seitenumbruch).
Textdatei in einem HEX-Editor
Die Datei wurde im UNI-Code
Format abgespeichert, d.h. für jedes
Zeichen werden zwei Bytes (4
Hex-Ziffern) verwendet.
Der Zeilenumbruch erfolgt mit
0D00 0A00.
E. Baeck (Uni-DUE)
Prozedurales VBA
90 / 161
Dateien
Textdateien
Aufbau einer Textdatei
Eine Datei ist eine lineare Menge von Bytes.
Eine Textdatei besteht nur aus darstellbaren Zeichen.
Struktur der Datei durch Steuerzeichen (Zeilen- bzw. Seitenumbruch).
Eine Textdatei kann mit einem einfachen Editor bearbeitet werden.
Textdatei in einem HEX-Editor
Die Datei wurde im UNI-Code
Format abgespeichert, d.h. für jedes
Zeichen werden zwei Bytes (4
Hex-Ziffern) verwendet.
Der Zeilenumbruch erfolgt mit
0D00 0A00.
E. Baeck (Uni-DUE)
Prozedurales VBA
90 / 161
Dateien
Textdateien
Aufbau einer Textdatei
Eine Datei ist eine lineare Menge von Bytes.
Eine Textdatei besteht nur aus darstellbaren Zeichen.
Struktur der Datei durch Steuerzeichen (Zeilen- bzw. Seitenumbruch).
Eine Textdatei kann mit einem einfachen Editor bearbeitet werden.
Textdatei in einem HEX-Editor
Die Datei wurde im UNI-Code
Format abgespeichert, d.h. für jedes
Zeichen werden zwei Bytes (4
Hex-Ziffern) verwendet.
Der Zeilenumbruch erfolgt mit
0D00 0A00.
E. Baeck (Uni-DUE)
Prozedurales VBA
90 / 161
Dateien
Textdateien
Kommandos zur Bearbeitung einer Textdatei
Open Öffnen einer Datei.
Input Einlesen von Daten aus einer Datei.
Öffnen einer Textdatei
Open "bsp1.txt" For Input As #1 Öffnen zum Lesen, Kanal 1
Open "bsp2.txt" For Output As #2 Öffnen zum Schreiben, Kanal 2
Open "bsp3.txt" For Append As #3 Öffnen zur Ergänzung, Kanal 3
E. Baeck (Uni-DUE)
Prozedurales VBA
91 / 161
Dateien
Textdateien
Kommandos zur Bearbeitung einer Textdatei
Open Öffnen einer Datei.
Input Einlesen von Daten aus einer Datei.
Write Schreiben von Daten in eine Datei.
Einlesen von Variablenwerten
Input #1, x, y
E. Baeck (Uni-DUE)
Einlesen zweier Werte aus der unter Kanal 1 geöffneten
Datei. Die Werte sind Komma separiert.
Prozedurales VBA
91 / 161
Dateien
Textdateien
Kommandos zur Bearbeitung einer Textdatei
Open Öffnen einer Datei.
Input Einlesen von Daten aus einer Datei.
Write Schreiben von Daten in eine Datei.
Print Schreiben einer Textzeile in eine Datei.
Schreiben von Variablenwerten in eine Datei
Write #1, x, y
E. Baeck (Uni-DUE)
Schreiben der Variablenwerte x und y in die Textdatei
unter Kanal 1. Die Werte werden Komma separiert
geschrieben.
Prozedurales VBA
91 / 161
Dateien
Textdateien
Kommandos zur Bearbeitung einer Textdatei
Open Öffnen einer Datei.
Input Einlesen von Daten aus einer Datei.
Write Schreiben von Daten in eine Datei.
Print Schreiben einer Textzeile in eine Datei.
Input Line Einlesen einer Textzeile aus einer Datei.
Schreiben einer Textzeile in eine Datei
Print #1, "1. Zeile" Print wird zur Ausgabe von Texten verwendet. Ein
Print #1, "2. Zeile" spezielles Format wie im Fall Write wird nicht
Print #1, "3. Zeile" verwendet.
E. Baeck (Uni-DUE)
Prozedurales VBA
91 / 161
Dateien
Textdateien
Kommandos zur Bearbeitung einer Textdatei
Open Öffnen einer Datei.
Input Einlesen von Daten aus einer Datei.
Write Schreiben von Daten in eine Datei.
Print Schreiben einer Textzeile in eine Datei.
Input Line Einlesen einer Textzeile aus einer Datei.
Close Schließen der Datei.
Lesen einer Textzeile
Line Input #1, Line$ Line Input liest aus einer Textdatei eine Zeile. Die
Daten werden interpretationsfrei in einen String gelesen.
E. Baeck (Uni-DUE)
Prozedurales VBA
91 / 161
Dateien
Textdateien
Kommandos zur Bearbeitung einer Textdatei
Open Öffnen einer Datei.
Input Einlesen von Daten aus einer Datei.
Write Schreiben von Daten in eine Datei.
Print Schreiben einer Textzeile in eine Datei.
Input Line Einlesen einer Textzeile aus einer Datei.
Close Schließen der Datei.
EoF Prüfen des Datei-Cursors auf Dateiende.
Schließen einer Datei
Close #1
E. Baeck (Uni-DUE)
Eine Datei, die unter einem Kanal 1 geöffnet wurde, ist
unter diesem mit Close wieder zu schließen.
Prozedurales VBA
91 / 161
Dateien
Textdateien
Kommandos zur Bearbeitung einer Textdatei
Open Öffnen einer Datei.
Input Einlesen von Daten aus einer Datei.
Write Schreiben von Daten in eine Datei.
Print Schreiben einer Textzeile in eine Datei.
Input Line Einlesen einer Textzeile aus einer Datei.
Close Schließen der Datei.
EoF Prüfen des Datei-Cursors auf Dateiende.
Auf das Erreichen des Dateiendes abprüfen
Do Until EOF(1)
Line Input #1, Line$
Loop
E. Baeck (Uni-DUE)
Der Code liest aus einer Datei Zeile um Zeile
bis das Dateiende erreicht ist. Dies prüft die
Funktion EOF.
Prozedurales VBA
91 / 161
Dateien
Beispiel
Schreiben ungerader Zahlen und Quadrate in Textdatei
Um die Datei später finden zu können, ist das Arbeitsverzeichnis im
Direktfenster auszugeben.
Die Datei wird zum Schreiben geöffnet.
Verwendetes Kommando
CurDir gibt das Arbeitsverzeichnis zurück.
E. Baeck (Uni-DUE)
Prozedurales VBA
92 / 161
Dateien
Beispiel
Schreiben ungerader Zahlen und Quadrate in Textdatei
Um die Datei später finden zu können, ist das Arbeitsverzeichnis im
Direktfenster auszugeben.
Die Datei wird zum Schreiben geöffnet.
Die erste Zeile des Informationsblocks enthält das Arbeitsverzeichnis
die zweite einen Hinweis zum Dateiinhalt.
Verwendetes Kommando
Eine namensgleiche eventuell vorhandene Datei wird überschrieben.
E. Baeck (Uni-DUE)
Prozedurales VBA
92 / 161
Dateien
Beispiel
Schreiben ungerader Zahlen und Quadrate in Textdatei
Um die Datei später finden zu können, ist das Arbeitsverzeichnis im
Direktfenster auszugeben.
Die Datei wird zum Schreiben geöffnet.
Die erste Zeile des Informationsblocks enthält das Arbeitsverzeichnis
die zweite einen Hinweis zum Dateiinhalt.
In einer Schleife werden die ungerade Zahlen und deren Quadrate in
die Datei geschrieben.
Verwendetes Kommando
Um die Infos zu schreiben wird Print verwendet.
E. Baeck (Uni-DUE)
Prozedurales VBA
92 / 161
Dateien
Beispiel
Schreiben ungerader Zahlen und Quadrate in Textdatei
Um die Datei später finden zu können, ist das Arbeitsverzeichnis im
Direktfenster auszugeben.
Die Datei wird zum Schreiben geöffnet.
Die erste Zeile des Informationsblocks enthält das Arbeitsverzeichnis
die zweite einen Hinweis zum Dateiinhalt.
In einer Schleife werden die ungerade Zahlen und deren Quadrate in
die Datei geschrieben.
Die Datei wird geschlossen.
Verwendetes Kommando
Um die Daten zu schreiben wird Write verwendet.
E. Baeck (Uni-DUE)
Prozedurales VBA
92 / 161
Dateien
Beispiel
Schreiben ungerader Zahlen und Quadrate in Textdatei
Um die Datei später finden zu können, ist das Arbeitsverzeichnis im
Direktfenster auszugeben.
Die Datei wird zum Schreiben geöffnet.
Die erste Zeile des Informationsblocks enthält das Arbeitsverzeichnis
die zweite einen Hinweis zum Dateiinhalt.
In einer Schleife werden die ungerade Zahlen und deren Quadrate in
die Datei geschrieben.
Die Datei wird geschlossen.
E. Baeck (Uni-DUE)
Prozedurales VBA
92 / 161
Dateien
Beispiel
Implementierung und Resultat
Sub filetest()
Die Textdatei wird im
’ Arbeitsverzeichnis ausgeben
Standardverzeichnis abgelegt.
Debug.Print CurDir
Dies ist unter Windows7
’ Datei zum Schreiben öffnen
C:\Users\user\Documents.
Open "filetest.txt" For Output As #1
’ Dokumentationsblock schreiben
Print #1, CurDir
Print #1, "Ungerade Zahlen, Quadrat"
’ Daten schreiben
For i = 1 To 10 Step 2
Write #1, i, i ^ 2
Next
’ Datei schließen
Close #1
End Sub
E. Baeck (Uni-DUE)
Prozedurales VBA
93 / 161
Dateien
Beispiel
Einlesen einer Textdatei und Ausgabe im Direktfenster
Sub fileread()
Die Textdatei wird aus dem
’ Öffnet die Datei zum Lesen
Standardverzeichnis gelesen.
Open "filetest.txt" For Input As #1
Unter Windows7
’ Über alle Zeilen bis Dateiende (EOF) C:\Users\user\Documents.
Do Until EOF(1)
Das Direktfenster ist Teil der
’ Lesen einer Zeile
VBA-IDE.
Line Input #1, Line$
’ und Ausgabe in das Direktfenster
Debug.Print Line$
Loop
’ schließen der Datei
Close #1
End Sub
E. Baeck (Uni-DUE)
Prozedurales VBA
94 / 161
OOP und UML I
14
OOP, Klassenmodule
Prozedurale Programmierung
Idee der OOP
UML
Grundbegriffe
Abstraktion
Datenkapselung
Polymorphie
Vererbung
Kritik
E. Baeck (Uni-DUE)
OOP und UML
95 / 161
OOP, Klassenmodule
OOP
und
Klassenmodule
E. Baeck (Uni-DUE)
OOP und UML
96 / 161
OOP, Klassenmodule
Prozedurale Programmierung
Problem globaler Daten
Globale Daten werden außerhalb der Prozeduren deklariert.
Globale Daten können ohne explizite Parameterübergaben in
Unterprogrammen verändert werden.
Elementare Datentypen
’ Deklaration globaler Variablen
’ Bearbeiten der globalen Variablen
Dim a As Double
Sub QuadIt()
Dim b As Double
a = a ^ 2
Dim c As Double
b = b ^ 2
’ Hauptprogramm
c = c ^ 2
Sub TestGlobVar()
End Sub
a = 1: b = 2: c = 3
Debug.Print "a:" & a & " | b:" & b; " | c:" & c
Call QuadIt
Debug.Print "a:" & a & " | b:" & b; " | c:" & c
End Sub
E. Baeck (Uni-DUE)
OOP und UML
97 / 161
OOP, Klassenmodule
Prozedurale Programmierung
Problem globaler Daten
Globale Daten werden außerhalb der Prozeduren deklariert.
Globale Daten können ohne explizite Parameterübergaben in
Unterprogrammen verändert werden.
Es fehlen Schutzmechanismen, alles ist sichtbar, alles ist erlaubt.
Elementare Datentypen
’ Deklaration globaler Variablen
’ Bearbeiten der globalen Variablen
Dim a As Double
Sub QuadIt()
Dim b As Double
a = a ^ 2
Dim c As Double
b = b ^ 2
’ Hauptprogramm
c = c ^ 2
Sub TestGlobVar()
End Sub
a = 1: b = 2: c = 3
Debug.Print "a:" & a & " | b:" & b; " | c:" & c
Call QuadIt
Debug.Print "a:" & a & " | b:" & b; " | c:" & c
End Sub
E. Baeck (Uni-DUE)
OOP und UML
97 / 161
OOP, Klassenmodule
Prozedurale Programmierung
Problem globaler Daten
Globale Daten werden außerhalb der Prozeduren deklariert.
Globale Daten können ohne explizite Parameterübergaben in
Unterprogrammen verändert werden.
Es fehlen Schutzmechanismen, alles ist sichtbar, alles ist erlaubt.
Globale Daten können somit leicht versehentlich verändert werden.
Elementare Datentypen
’ Deklaration globaler Variablen
’ Bearbeiten der globalen Variablen
Dim a As Double
Sub QuadIt()
Dim b As Double
a = a ^ 2
Dim c As Double
b = b ^ 2
’ Hauptprogramm
c = c ^ 2
Sub TestGlobVar()
End Sub
a = 1: b = 2: c = 3
Debug.Print "a:" & a & " | b:" & b; " | c:" & c
Call QuadIt
Debug.Print "a:" & a & " | b:" & b; " | c:" & c
End Sub
E. Baeck (Uni-DUE)
OOP und UML
97 / 161
OOP, Klassenmodule
Prozedurale Programmierung
Problem globaler Daten
Globale Daten werden außerhalb der Prozeduren deklariert.
Globale Daten können ohne explizite Parameterübergaben in
Unterprogrammen verändert werden.
Es fehlen Schutzmechanismen, alles ist sichtbar, alles ist erlaubt.
Globale Daten können somit leicht versehentlich verändert werden.
Elementare Datentypen
’ Deklaration globaler Variablen
’ Bearbeiten der globalen Variablen
Dim a As Double
Sub QuadIt()
Dim b As Double
a = a ^ 2
Dim c As Double
b = b ^ 2
’ Hauptprogramm
c = c ^ 2
Sub TestGlobVar()
End Sub
a = 1: b = 2: c = 3
Debug.Print "a:" & a & " | b:" & b; " | c:" & c
Call QuadIt
Debug.Print "a:" & a & " | b:" & b; " | c:" & c
End Sub
E. Baeck (Uni-DUE)
OOP und UML
97 / 161
OOP, Klassenmodule
Prozedurale Programmierung
Daten und Prozeduren
Daten und Prozeduren in prozeduraler Programmierung entkoppelt.
Globale Daten nicht geschützt gegen ungewollte Veränderungen.
Daten und Prozeduren sind
ohne Einschränkungen ansprechbar. Es gibt keine
Ordnungsprinzipien.
Prozedur 1
double : d2
Prozedur 2
Prozedur 5
double : d1
string : s1
Prozedur 4
integer : n2
Prozedur 3
integer : n1
E. Baeck (Uni-DUE)
OOP und UML
98 / 161
OOP, Klassenmodule
Prozedurale Programmierung
Daten und Prozeduren
Daten und Prozeduren in prozeduraler Programmierung entkoppelt.
Globale Daten nicht geschützt gegen ungewollte Veränderungen.
Es gibt keine Schutzmechanismen, es gibt keine Kapselung.
Daten und Prozeduren sind
ohne Einschränkungen ansprechbar. Es gibt keine
Ordnungsprinzipien.
Prozedur 1
double : d2
Prozedur 2
Prozedur 5
double : d1
string : s1
Prozedur 4
integer : n2
Prozedur 3
integer : n1
E. Baeck (Uni-DUE)
OOP und UML
98 / 161
OOP, Klassenmodule
Prozedurale Programmierung
Daten und Prozeduren
Daten und Prozeduren in prozeduraler Programmierung entkoppelt.
Globale Daten nicht geschützt gegen ungewollte Veränderungen.
Es gibt keine Schutzmechanismen, es gibt keine Kapselung.
Wenig Transparenz! Steigende Probleme bei Wartung!
Daten und Prozeduren sind
ohne Einschränkungen ansprechbar. Es gibt keine
Ordnungsprinzipien.
Prozedur 1
double : d2
Prozedur 2
Prozedur 5
double : d1
string : s1
Prozedur 4
integer : n2
Prozedur 3
integer : n1
E. Baeck (Uni-DUE)
OOP und UML
98 / 161
OOP, Klassenmodule
Prozedurale Programmierung
Daten und Prozeduren
Daten und Prozeduren in prozeduraler Programmierung entkoppelt.
Globale Daten nicht geschützt gegen ungewollte Veränderungen.
Es gibt keine Schutzmechanismen, es gibt keine Kapselung.
Wenig Transparenz! Steigende Probleme bei Wartung!
Daten und Prozeduren sind
ohne Einschränkungen ansprechbar. Es gibt keine
Ordnungsprinzipien.
Prozedur 1
double : d2
Prozedur 2
Prozedur 5
double : d1
string : s1
Prozedur 4
integer : n2
Prozedur 3
integer : n1
E. Baeck (Uni-DUE)
OOP und UML
98 / 161
OOP, Klassenmodule
Idee der OOP
Idee der OOP
Zusammenlegen von Daten und Funktionen.
Die Einheit wird Objekt bzw. Klasse/Prototyp genannt.
integer : n1
double : d1
integer : n2
Prozedur 2
Prozedur 3
Prozedur 1
E. Baeck (Uni-DUE)
OOP und UML
99 / 161
OOP, Klassenmodule
Idee der OOP
Idee der OOP
Zusammenlegen von Daten und Funktionen.
Die Einheit wird Objekt bzw. Klasse/Prototyp genannt.
Einführung von Sicherheitsmechanismen zum Schutz der Daten.
integer : n1
double : d1
integer : n2
Prozedur 2
Prozedur 3
Klasse 1
Klasse 2
Prozedur 1
E. Baeck (Uni-DUE)
OOP und UML
99 / 161
OOP, Klassenmodule
Idee der OOP
Idee der OOP
Zusammenlegen von Daten und Funktionen.
Die Einheit wird Objekt bzw. Klasse/Prototyp genannt.
Einführung von Sicherheitsmechanismen zum Schutz der Daten.
Steigerung der Wiederverwertbarkeit durch Strukturierung.
integer : n1
double : d1
integer : n2
Prozedur 2
Prozedur 3
Klasse 1
Klasse 2
Prozedur 1
double : d1
integer : n1
integer : n2
Prozedur 3
Prozedur 1
Prozedur 2
E. Baeck (Uni-DUE)
OOP und UML
99 / 161
OOP, Klassenmodule
Idee der OOP
Idee der OOP
Zusammenlegen von Daten und Funktionen.
Die Einheit wird Objekt bzw. Klasse/Prototyp genannt.
Einführung von Sicherheitsmechanismen zum Schutz der Daten.
Steigerung der Wiederverwertbarkeit durch Strukturierung.
integer : n1
double : d1
integer : n2
Prozedur 2
Prozedur 3
Klasse 1
Klasse 2
Prozedur 1
double : d1
integer : n1
integer : n2
Prozedur 3
Prozedur 1
Prozedur 2
E. Baeck (Uni-DUE)
OOP und UML
99 / 161
OOP, Klassenmodule
Idee der OOP
Alan Kay, Entwickler von Smalltalk, über OOP, 1993 [1]
Alles ist ein Objekt.
Objekte kommunizieren durch das Senden und Empfangen von
Nachrichten.
E. Baeck (Uni-DUE)
OOP und UML
100 / 161
OOP, Klassenmodule
Idee der OOP
Alan Kay, Entwickler von Smalltalk, über OOP, 1993 [1]
Alles ist ein Objekt.
Objekte kommunizieren durch das Senden und Empfangen von
Nachrichten.
Objekte haben ihren eigenen Speicher.
E. Baeck (Uni-DUE)
OOP und UML
100 / 161
OOP, Klassenmodule
Idee der OOP
Alan Kay, Entwickler von Smalltalk, über OOP, 1993 [1]
Alles ist ein Objekt.
Objekte kommunizieren durch das Senden und Empfangen von
Nachrichten.
Objekte haben ihren eigenen Speicher.
Jedes Objekt ist die Instanz einer Klasse.
E. Baeck (Uni-DUE)
OOP und UML
100 / 161
OOP, Klassenmodule
Idee der OOP
Alan Kay, Entwickler von Smalltalk, über OOP, 1993 [1]
Alles ist ein Objekt.
Objekte kommunizieren durch das Senden und Empfangen von
Nachrichten.
Objekte haben ihren eigenen Speicher.
Jedes Objekt ist die Instanz einer Klasse.
Die Klasse beinhaltet das Verhalten aller ihrer Instanzen.
E. Baeck (Uni-DUE)
OOP und UML
100 / 161
OOP, Klassenmodule
Idee der OOP
Alan Kay, Entwickler von Smalltalk, über OOP, 1993 [1]
Alles ist ein Objekt.
Objekte kommunizieren durch das Senden und Empfangen von
Nachrichten.
Objekte haben ihren eigenen Speicher.
Jedes Objekt ist die Instanz einer Klasse.
Die Klasse beinhaltet das Verhalten aller ihrer Instanzen.
Um eine Programmliste auszuführen, wird die Ausführungskontrolle
dem ersten Objekt gegeben.
E. Baeck (Uni-DUE)
OOP und UML
100 / 161
OOP, Klassenmodule
Idee der OOP
Alan Kay, Entwickler von Smalltalk, über OOP, 1993 [1]
Alles ist ein Objekt.
Objekte kommunizieren durch das Senden und Empfangen von
Nachrichten.
Objekte haben ihren eigenen Speicher.
Jedes Objekt ist die Instanz einer Klasse.
Die Klasse beinhaltet das Verhalten aller ihrer Instanzen.
Um eine Programmliste auszuführen, wird die Ausführungskontrolle
dem ersten Objekt gegeben.
E. Baeck (Uni-DUE)
OOP und UML
100 / 161
OOP, Klassenmodule
Idee der OOP
Alan Kay, Entwickler von Smalltalk, über OOP, 1993 [1]
Alles ist ein Objekt.
Objekte kommunizieren durch das Senden und Empfangen von
Nachrichten.
Objekte haben ihren eigenen Speicher.
Jedes Objekt ist die Instanz einer Klasse.
Die Klasse beinhaltet das Verhalten aller ihrer Instanzen.
Um eine Programmliste auszuführen, wird die Ausführungskontrolle
dem ersten Objekt gegeben.
Unterstützung durch VBA
Die grünen Optionen werden unterstützt, die roten nicht.
E. Baeck (Uni-DUE)
OOP und UML
100 / 161
OOP, Klassenmodule
Idee der OOP
Alan Kay, Entwickler von Smalltalk, über OOP, 2003[2]
OOP bedeutet für mich nur Messaging,
lokales Beibehalten,
E. Baeck (Uni-DUE)
OOP und UML
101 / 161
OOP, Klassenmodule
Idee der OOP
Alan Kay, Entwickler von Smalltalk, über OOP, 2003[2]
OOP bedeutet für mich nur Messaging,
lokales Beibehalten,
Schützen und Verbergen des Prozesszustands und,
E. Baeck (Uni-DUE)
OOP und UML
101 / 161
OOP, Klassenmodule
Idee der OOP
Alan Kay, Entwickler von Smalltalk, über OOP, 2003[2]
OOP bedeutet für mich nur Messaging,
lokales Beibehalten,
Schützen und Verbergen des Prozesszustands und,
spätestmögliche Bindung aller Dinge.
E. Baeck (Uni-DUE)
OOP und UML
101 / 161
OOP, Klassenmodule
Idee der OOP
Alan Kay, Entwickler von Smalltalk, über OOP, 2003[2]
OOP bedeutet für mich nur Messaging,
lokales Beibehalten,
Schützen und Verbergen des Prozesszustands und,
spätestmögliche Bindung aller Dinge.
E. Baeck (Uni-DUE)
OOP und UML
101 / 161
OOP, Klassenmodule
Idee der OOP
Alan Kay, Entwickler von Smalltalk, über OOP, 2003[2]
OOP bedeutet für mich nur Messaging,
lokales Beibehalten,
Schützen und Verbergen des Prozesszustands und,
spätestmögliche Bindung aller Dinge.
Und...?
Offensichtlich verändern sich in den Jahren auch die Vorstellungen.
E. Baeck (Uni-DUE)
OOP und UML
101 / 161
OOP, Klassenmodule
Idee der OOP
Die ISO/IEC zur OOP[5]
OOP bezieht sich auf eine Technik oder Programmiersprache welche
Objekte, Klassen und Vererbung unterstützt.
Aber:
Die ISO-Definition gilt inzwischen als zu vereinfachend.
E. Baeck (Uni-DUE)
OOP und UML
102 / 161
OOP, Klassenmodule
Idee der OOP
Die ISO/IEC zur OOP[5]
OOP bezieht sich auf eine Technik oder Programmiersprache welche
Objekte, Klassen und Vererbung unterstützt.
Aber:
Die ISO-Definition gilt inzwischen als zu vereinfachend.
Vererbung hat heute nicht mehr den Stellenwert wie vor 20 Jahren.
E. Baeck (Uni-DUE)
OOP und UML
102 / 161
OOP, Klassenmodule
Idee der OOP
Die ISO/IEC zur OOP[5]
OOP bezieht sich auf eine Technik oder Programmiersprache welche
Objekte, Klassen und Vererbung unterstützt.
Aber:
Die ISO-Definition gilt inzwischen als zu vereinfachend.
Vererbung hat heute nicht mehr den Stellenwert wie vor 20 Jahren.
E. Baeck (Uni-DUE)
OOP und UML
102 / 161
OOP, Klassenmodule
UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthält 13 Diagrammtypen zur OO-Modellierung.
E. Baeck (Uni-DUE)
OOP und UML
103 / 161
OOP, Klassenmodule
UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthält 13 Diagrammtypen zur OO-Modellierung.
UML zum Erstellen von Skizzen zum Programm-Design.
E. Baeck (Uni-DUE)
OOP und UML
103 / 161
OOP, Klassenmodule
UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthält 13 Diagrammtypen zur OO-Modellierung.
UML zum Erstellen von Skizzen zum Programm-Design.
Es gibt Programme, die aus UML Beschreibungen lauffähigen
Programmcode erzeugen.
E. Baeck (Uni-DUE)
OOP und UML
103 / 161
OOP, Klassenmodule
UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthält 13 Diagrammtypen zur OO-Modellierung.
UML zum Erstellen von Skizzen zum Programm-Design.
Es gibt Programme, die aus UML Beschreibungen lauffähigen
Programmcode erzeugen.
Wir beschränken uns auf Klassendiagramme und Notizen,
E. Baeck (Uni-DUE)
OOP und UML
103 / 161
OOP, Klassenmodule
UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthält 13 Diagrammtypen zur OO-Modellierung.
UML zum Erstellen von Skizzen zum Programm-Design.
Es gibt Programme, die aus UML Beschreibungen lauffähigen
Programmcode erzeugen.
Wir beschränken uns auf Klassendiagramme und Notizen,
Generalisierungen (Vererbung),
Klassenname
Eigenschaften
Zusätzliche Informationen
im Notiz-Diagramm
Methoden
E. Baeck (Uni-DUE)
OOP und UML
103 / 161
OOP, Klassenmodule
UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthält 13 Diagrammtypen zur OO-Modellierung.
UML zum Erstellen von Skizzen zum Programm-Design.
Es gibt Programme, die aus UML Beschreibungen lauffähigen
Programmcode erzeugen.
Wir beschränken uns auf Klassendiagramme und Notizen,
Generalisierungen (Vererbung),
Kompositionsdiagramme und
Basisklasse
Abgeleitete Klasse
Basis-Eigenschaften
Eigenschaften
Basis-Methoden
Methoden
E. Baeck (Uni-DUE)
OOP und UML
103 / 161
OOP, Klassenmodule
UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthält 13 Diagrammtypen zur OO-Modellierung.
UML zum Erstellen von Skizzen zum Programm-Design.
Es gibt Programme, die aus UML Beschreibungen lauffähigen
Programmcode erzeugen.
Wir beschränken uns auf Klassendiagramme und Notizen,
Generalisierungen (Vererbung),
Kompositionsdiagramme und
Aggregationsdiagramme
Polygon
geordnet
Punkt
3..*
E. Baeck (Uni-DUE)
OOP und UML
1
Mittelpunkt
Kreis
103 / 161
OOP, Klassenmodule
UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthält 13 Diagrammtypen zur OO-Modellierung.
UML zum Erstellen von Skizzen zum Programm-Design.
Es gibt Programme, die aus UML Beschreibungen lauffähigen
Programmcode erzeugen.
Wir beschränken uns auf Klassendiagramme und Notizen,
Generalisierungen (Vererbung),
Kompositionsdiagramme und
Aggregationsdiagramme
Blech
Anschluss
1
E. Baeck (Uni-DUE)
*
OOP und UML
103 / 161
OOP, Klassenmodule
Grundbegriffe
Grundbegriffe objekt-orientierter Programmierung
Die Bausteine eines OOP-Programms werden als Objekte bezeichnet
Objekte werden durch neue Paradigmen (Regeln) definiert.
E. Baeck (Uni-DUE)
OOP und UML
104 / 161
OOP, Klassenmodule
Grundbegriffe
Grundbegriffe objekt-orientierter Programmierung
Die Bausteine eines OOP-Programms werden als Objekte bezeichnet
Objekte werden durch neue Paradigmen (Regeln) definiert.
Abstraktion Zusammenlegung von Daten und Funktionen
E. Baeck (Uni-DUE)
OOP und UML
104 / 161
OOP, Klassenmodule
Grundbegriffe
Grundbegriffe objekt-orientierter Programmierung
Die Bausteine eines OOP-Programms werden als Objekte bezeichnet
Objekte werden durch neue Paradigmen (Regeln) definiert.
Abstraktion Zusammenlegung von Daten und Funktionen
Kapselung Einführung von Zugriffsrechten
E. Baeck (Uni-DUE)
OOP und UML
104 / 161
OOP, Klassenmodule
Grundbegriffe
Grundbegriffe objekt-orientierter Programmierung
Die Bausteine eines OOP-Programms werden als Objekte bezeichnet
Objekte werden durch neue Paradigmen (Regeln) definiert.
Abstraktion Zusammenlegung von Daten und Funktionen
Kapselung Einführung von Zugriffsrechten
Polymorphie Gleiche Nachricht führt zu unterschiedlichen Reaktionen
E. Baeck (Uni-DUE)
OOP und UML
104 / 161
OOP, Klassenmodule
Grundbegriffe
Grundbegriffe objekt-orientierter Programmierung
Die Bausteine eines OOP-Programms werden als Objekte bezeichnet
Objekte werden durch neue Paradigmen (Regeln) definiert.
Abstraktion
Kapselung
Polymorphie
Feedback
E. Baeck (Uni-DUE)
Zusammenlegung von Daten und Funktionen
Einführung von Zugriffsrechten
Gleiche Nachricht führt zu unterschiedlichen Reaktionen
Nachrichtenkommunikation zwischen Objekten.
OOP und UML
104 / 161
OOP, Klassenmodule
Grundbegriffe
Grundbegriffe objekt-orientierter Programmierung
Die Bausteine eines OOP-Programms werden als Objekte bezeichnet
Objekte werden durch neue Paradigmen (Regeln) definiert.
Abstraktion
Kapselung
Polymorphie
Feedback
Vererbung
E. Baeck (Uni-DUE)
Zusammenlegung von Daten und Funktionen
Einführung von Zugriffsrechten
Gleiche Nachricht führt zu unterschiedlichen Reaktionen
Nachrichtenkommunikation zwischen Objekten.
Übernahme von Eigenschaften/Funktion durch
Ableitung aus Basisklassen
OOP und UML
104 / 161
OOP, Klassenmodule
Grundbegriffe
Grundbegriffe objekt-orientierter Programmierung
Die Bausteine eines OOP-Programms werden als Objekte bezeichnet
Objekte werden durch neue Paradigmen (Regeln) definiert.
Abstraktion
Kapselung
Polymorphie
Feedback
Vererbung
Zusammenlegung von Daten und Funktionen
Einführung von Zugriffsrechten
Gleiche Nachricht führt zu unterschiedlichen Reaktionen
Nachrichtenkommunikation zwischen Objekten.
Übernahme von Eigenschaften/Funktion durch
Ableitung aus Basisklassen
Persistenz Automatisches Speichermanagement.
E. Baeck (Uni-DUE)
OOP und UML
104 / 161
OOP, Klassenmodule
Grundbegriffe
Grundbegriffe objekt-orientierter Programmierung
Die Bausteine eines OOP-Programms werden als Objekte bezeichnet
Objekte werden durch neue Paradigmen (Regeln) definiert.
Abstraktion
Kapselung
Polymorphie
Feedback
Vererbung
Zusammenlegung von Daten und Funktionen
Einführung von Zugriffsrechten
Gleiche Nachricht führt zu unterschiedlichen Reaktionen
Nachrichtenkommunikation zwischen Objekten.
Übernahme von Eigenschaften/Funktion durch
Ableitung aus Basisklassen
Persistenz Automatisches Speichermanagement.
Instanzen ist ein zur Laufzeit erzeugtes Objekt.
E. Baeck (Uni-DUE)
OOP und UML
104 / 161
OOP, Klassenmodule
Grundbegriffe
Grundbegriffe objekt-orientierter Programmierung
Die Bausteine eines OOP-Programms werden als Objekte bezeichnet
Objekte werden durch neue Paradigmen (Regeln) definiert.
Abstraktion
Kapselung
Polymorphie
Feedback
Vererbung
Zusammenlegung von Daten und Funktionen
Einführung von Zugriffsrechten
Gleiche Nachricht führt zu unterschiedlichen Reaktionen
Nachrichtenkommunikation zwischen Objekten.
Übernahme von Eigenschaften/Funktion durch
Ableitung aus Basisklassen
Persistenz Automatisches Speichermanagement.
Instanzen ist ein zur Laufzeit erzeugtes Objekt.
Klassen/Prototyp ist abstraktes Modell/Bauplan der Objekte.
E. Baeck (Uni-DUE)
OOP und UML
104 / 161
OOP, Klassenmodule
Grundbegriffe
Grundbegriffe objekt-orientierter Programmierung
Die Bausteine eines OOP-Programms werden als Objekte bezeichnet
Objekte werden durch neue Paradigmen (Regeln) definiert.
Abstraktion
Kapselung
Polymorphie
Feedback
Vererbung
Zusammenlegung von Daten und Funktionen
Einführung von Zugriffsrechten
Gleiche Nachricht führt zu unterschiedlichen Reaktionen
Nachrichtenkommunikation zwischen Objekten.
Übernahme von Eigenschaften/Funktion durch
Ableitung aus Basisklassen
Persistenz Automatisches Speichermanagement.
Instanzen ist ein zur Laufzeit erzeugtes Objekt.
Klassen/Prototyp ist abstraktes Modell/Bauplan der Objekte.
E. Baeck (Uni-DUE)
OOP und UML
104 / 161
OOP, Klassenmodule
Grundbegriffe
Abstraktion
Ein Objekt hat Eigenschaften (Attribute).
Ein Objekt kann Aufträge ausführen.
Dieses Verhalten wird durch Methoden beschrieben.
E. Baeck (Uni-DUE)
OOP und UML
105 / 161
OOP, Klassenmodule
Grundbegriffe
Abstraktion
Ein Objekt hat Eigenschaften (Attribute).
Ein Objekt kann Aufträge ausführen.
Dieses Verhalten wird durch Methoden beschrieben.
Ein Objekt kann Nachrichten mit anderen Objekten austauschen.
E. Baeck (Uni-DUE)
OOP und UML
105 / 161
OOP, Klassenmodule
Grundbegriffe
Abstraktion
Ein Objekt hat Eigenschaften (Attribute).
Ein Objekt kann Aufträge ausführen.
Dieses Verhalten wird durch Methoden beschrieben.
Ein Objekt kann Nachrichten mit anderen Objekten austauschen.
Die Implementierung eines Objekts erfolgt entweder
E. Baeck (Uni-DUE)
OOP und UML
105 / 161
OOP, Klassenmodule
Grundbegriffe
Abstraktion
Ein Objekt hat Eigenschaften (Attribute).
Ein Objekt kann Aufträge ausführen.
Dieses Verhalten wird durch Methoden beschrieben.
Ein Objekt kann Nachrichten mit anderen Objekten austauschen.
Die Implementierung eines Objekts erfolgt entweder
1
als Klasse in der klassenbasierten Objektorientierung
(z.B. C++/Java/Python)
E. Baeck (Uni-DUE)
OOP und UML
105 / 161
OOP, Klassenmodule
Grundbegriffe
Abstraktion
Ein Objekt hat Eigenschaften (Attribute).
Ein Objekt kann Aufträge ausführen.
Dieses Verhalten wird durch Methoden beschrieben.
Ein Objekt kann Nachrichten mit anderen Objekten austauschen.
Die Implementierung eines Objekts erfolgt entweder
1
2
als Klasse in der klassenbasierten Objektorientierung
(z.B. C++/Java/Python)
oder als Prototyp in der prototypbasierten Programmierung
(z.B. Javascript/Lua)
E. Baeck (Uni-DUE)
OOP und UML
105 / 161
OOP, Klassenmodule
Grundbegriffe
Abstraktion
Ein Objekt hat Eigenschaften (Attribute).
Ein Objekt kann Aufträge ausführen.
Dieses Verhalten wird durch Methoden beschrieben.
Ein Objekt kann Nachrichten mit anderen Objekten austauschen.
Die Implementierung eines Objekts erfolgt entweder
1
2
als Klasse in der klassenbasierten Objektorientierung
(z.B. C++/Java/Python)
oder als Prototyp in der prototypbasierten Programmierung
(z.B. Javascript/Lua)
E. Baeck (Uni-DUE)
OOP und UML
105 / 161
OOP, Klassenmodule
Grundbegriffe
Abstraktionsansätze
Im Klassenkonzept können Klassen von Basisklassen abgeleitet
werden. Die Eigenschaften und Methoden der Basisklasse werden in
der abgeleiteten Klasse übernommen.
Im Prototypkonzept werden Objekte durch Klonen bereits
existierender Objekte erzeugt. Fehlende Attribute und Methoden
werden ergänzt.
E. Baeck (Uni-DUE)
OOP und UML
106 / 161
OOP, Klassenmodule
Grundbegriffe
Abstraktionsansätze
Im Klassenkonzept können Klassen von Basisklassen abgeleitet
werden. Die Eigenschaften und Methoden der Basisklasse werden in
der abgeleiteten Klasse übernommen.
Im Prototypkonzept werden Objekte durch Klonen bereits
existierender Objekte erzeugt. Fehlende Attribute und Methoden
werden ergänzt.
VBA kennt weder Vererbung noch Prototypen.
E. Baeck (Uni-DUE)
OOP und UML
106 / 161
OOP, Klassenmodule
Grundbegriffe
Abstraktionsansätze
Im Klassenkonzept können Klassen von Basisklassen abgeleitet
werden. Die Eigenschaften und Methoden der Basisklasse werden in
der abgeleiteten Klasse übernommen.
Im Prototypkonzept werden Objekte durch Klonen bereits
existierender Objekte erzeugt. Fehlende Attribute und Methoden
werden ergänzt.
VBA kennt weder Vererbung noch Prototypen.
Daten,Eigenschaften und Verhalten, Methoden sind den
Objekten/Klassen zugeordnet.
Linie
Punkt
double : x(1:2)
integer : farbe
double : dicke
Punkt : pVon
Punkt : pBis
Punkt einhält seine Eigenschaften
und Methoden
verschieben
E. Baeck (Uni-DUE)
Linie einhält seine
Eigenschaften und
Methoden
verschieben
drehen
OOP und UML
106 / 161
OOP, Klassenmodule
Grundbegriffe
Abstraktionsansätze
Im Klassenkonzept können Klassen von Basisklassen abgeleitet
werden. Die Eigenschaften und Methoden der Basisklasse werden in
der abgeleiteten Klasse übernommen.
Im Prototypkonzept werden Objekte durch Klonen bereits
existierender Objekte erzeugt. Fehlende Attribute und Methoden
werden ergänzt.
VBA kennt weder Vererbung noch Prototypen.
Daten,Eigenschaften und Verhalten, Methoden sind den
Objekten/Klassen zugeordnet.
Linie
Punkt
double : x(1:2)
integer : farbe
double : dicke
Punkt : pVon
Punkt : pBis
Punkt einhält seine Eigenschaften
und Methoden
verschieben
drehen
verschieben
E. Baeck (Uni-DUE)
Linie einhält seine
Eigenschaften und
Methoden
OOP und UML
106 / 161
OOP, Klassenmodule
Grundbegriffe
Datenkapselung
Bei prozeduraler Programmierung kein Datenschutz.
Datenkapselung ist Verbergen der Implementierungsdetails.
E. Baeck (Uni-DUE)
OOP und UML
107 / 161
OOP, Klassenmodule
Grundbegriffe
Datenkapselung
Bei prozeduraler Programmierung kein Datenschutz.
Datenkapselung ist Verbergen der Implementierungsdetails.
Auf Daten eines Objekts wird über Schnittstellen zu gegriffen.
E. Baeck (Uni-DUE)
OOP und UML
107 / 161
OOP, Klassenmodule
Grundbegriffe
Datenkapselung
Bei prozeduraler Programmierung kein Datenschutz.
Datenkapselung ist Verbergen der Implementierungsdetails.
Auf Daten eines Objekts wird über Schnittstellen zu gegriffen.
Die Schnittstellen sind in der Lage, fehlerhafte Zugriffe zu erkennen.
E. Baeck (Uni-DUE)
OOP und UML
107 / 161
OOP, Klassenmodule
Grundbegriffe
Datenkapselung
Bei prozeduraler Programmierung kein Datenschutz.
Datenkapselung ist Verbergen der Implementierungsdetails.
Auf Daten eines Objekts wird über Schnittstellen zu gegriffen.
Die Schnittstellen sind in der Lage, fehlerhafte Zugriffe zu erkennen.
Nachfolgend einige Beispiele eine Datenkapselung.
Linie
Punkt
– double : x(1:2)
– integer : farbe
– Alle Eigenschaften sind verborgen
verschieben
E. Baeck (Uni-DUE)
– double : dicke
+ Punkt : pVon
+ Punkt : pBis
verschieben
drehen
OOP und UML
– nur die Dicke ist
verborgen,
+ die Punkte sind
sichtbar
107 / 161
OOP, Klassenmodule
Grundbegriffe
Datenkapselung
Bei prozeduraler Programmierung kein Datenschutz.
Datenkapselung ist Verbergen der Implementierungsdetails.
Auf Daten eines Objekts wird über Schnittstellen zu gegriffen.
Die Schnittstellen sind in der Lage, fehlerhafte Zugriffe zu erkennen.
Nachfolgend einige Beispiele eine Datenkapselung.
Linie
Punkt
– double : x(1:2)
– integer : farbe
– Alle Eigenschaften sind verborgen
verschieben
E. Baeck (Uni-DUE)
– double : dicke
+ Punkt : pVon
+ Punkt : pBis
verschieben
drehen
OOP und UML
– nur die Dicke ist
verborgen,
+ die Punkte sind
sichtbar
107 / 161
OOP, Klassenmodule
Grundbegriffe
Polymorphie, Vielgestaltigkeit
Ein Bezeichner kann abhängig von seiner Verwendung
unterschiedliche Datentypen annehmen.
Verschiedene Objekte können auf die gleiche Nachricht
unterschiedlich reagieren.
E. Baeck (Uni-DUE)
OOP und UML
108 / 161
OOP, Klassenmodule
Grundbegriffe
Polymorphie, Vielgestaltigkeit
Ein Bezeichner kann abhängig von seiner Verwendung
unterschiedliche Datentypen annehmen.
Verschiedene Objekte können auf die gleiche Nachricht
unterschiedlich reagieren.
Wird die Zuordnung des Datentyps oder der Methode erst zur
Laufzeit fest gelegt, wird dies als späte Bindung bezeichnet.
E. Baeck (Uni-DUE)
OOP und UML
108 / 161
OOP, Klassenmodule
Grundbegriffe
Polymorphie, Vielgestaltigkeit
Ein Bezeichner kann abhängig von seiner Verwendung
unterschiedliche Datentypen annehmen.
Verschiedene Objekte können auf die gleiche Nachricht
unterschiedlich reagieren.
Wird die Zuordnung des Datentyps oder der Methode erst zur
Laufzeit fest gelegt, wird dies als späte Bindung bezeichnet.
Im Beispiel eines CAD-Systems haben wir einen Container Objekte
mit Geometrieobjekten GeoObjekt. Der Container soll alle
gespeicherten Geometrieobjekte mit seiner Methode zeichne zeichnen.
Punkt
GeoObjekt
zeichne
zeichne
Linie
zeichne
*
Objekte
zeichne ruft die Methode zeichne aller gespeicherten GeoObjekte auf. Abhängig vom vorliegenden Objekt wird
die entsprechende Objektroutine zeichne aufgerufen, also Punkt.zeichne oder Linie.zeichne
zeichne
E. Baeck (Uni-DUE)
OOP und UML
108 / 161
OOP, Klassenmodule
Grundbegriffe
Polymorphie, Vielgestaltigkeit
Ein Bezeichner kann abhängig von seiner Verwendung
unterschiedliche Datentypen annehmen.
Verschiedene Objekte können auf die gleiche Nachricht
unterschiedlich reagieren.
Wird die Zuordnung des Datentyps oder der Methode erst zur
Laufzeit fest gelegt, wird dies als späte Bindung bezeichnet.
Im Beispiel eines CAD-Systems haben wir einen Container Objekte
mit Geometrieobjekten GeoObjekt. Der Container soll alle
gespeicherten Geometrieobjekte mit seiner Methode zeichne zeichnen.
Punkt
GeoObjekt
zeichne
zeichne
Linie
zeichne
*
Objekte
zeichne ruft die Methode zeichne aller gespeicherten GeoObjekte auf. Abhängig vom vorliegenden Objekt wird
die entsprechende Objektroutine zeichne aufgerufen, also Punkt.zeichne oder Linie.zeichne
zeichne
E. Baeck (Uni-DUE)
OOP und UML
108 / 161
OOP, Klassenmodule
Grundbegriffe
Vererbung
Mit Vererbung werden Klassen von Basisklassen abgeleitet.
Abgeleitete Klassen enthalten zu ihren eigenen Eigenschaften und
Methoden auch die Eigenschaften und Methoden der Basisklasse.
GeoObjekt
integer : layer
rgb : farbe
laden
speichern
Linie
double : dicke
punkt : von
punkt : bis
laden
speichern
Eigenschaften:
layer, farbe, dicke, von, bis
Methoden laden und speichern
überschreiben die BasisklassenMethoden
E. Baeck (Uni-DUE)
OOP und UML
MultiLinie
double : abstand
integer : typ
laden
speichern
Eigenschaften:
layer, farbe, dicke, von, bis,
abstand, typ
Methoden laden und speichern
überschreiben die BasisklassenMethoden
109 / 161
OOP, Klassenmodule
Grundbegriffe
Vererbung
Mit Vererbung werden Klassen von Basisklassen abgeleitet.
Abgeleitete Klassen enthalten zu ihren eigenen Eigenschaften und
Methoden auch die Eigenschaften und Methoden der Basisklasse.
Gemeinsame Eigenschaften/Funktionen sind in Basisklassen zu legen.
GeoObjekt
integer : layer
rgb : farbe
laden
speichern
Linie
double : dicke
punkt : von
punkt : bis
laden
speichern
Eigenschaften:
layer, farbe, dicke, von, bis
Methoden laden und speichern
überschreiben die BasisklassenMethoden
E. Baeck (Uni-DUE)
OOP und UML
MultiLinie
double : abstand
integer : typ
laden
speichern
Eigenschaften:
layer, farbe, dicke, von, bis,
abstand, typ
Methoden laden und speichern
überschreiben die BasisklassenMethoden
109 / 161
OOP, Klassenmodule
Grundbegriffe
Vererbung
Mit Vererbung werden Klassen von Basisklassen abgeleitet.
Abgeleitete Klassen enthalten zu ihren eigenen Eigenschaften und
Methoden auch die Eigenschaften und Methoden der Basisklasse.
Gemeinsame Eigenschaften/Funktionen sind in Basisklassen zu legen.
Basisklasse-Methoden werden durch Methoden der abgeleiteten
Klasse überschrieben.
GeoObjekt
integer : layer
rgb : farbe
laden
speichern
Linie
double : dicke
punkt : von
punkt : bis
laden
speichern
Eigenschaften:
layer, farbe, dicke, von, bis
Methoden laden und speichern
überschreiben die BasisklassenMethoden
E. Baeck (Uni-DUE)
OOP und UML
MultiLinie
double : abstand
integer : typ
laden
speichern
Eigenschaften:
layer, farbe, dicke, von, bis,
abstand, typ
Methoden laden und speichern
überschreiben die BasisklassenMethoden
109 / 161
OOP, Klassenmodule
Grundbegriffe
Vererbung
Mit Vererbung werden Klassen von Basisklassen abgeleitet.
Abgeleitete Klassen enthalten zu ihren eigenen Eigenschaften und
Methoden auch die Eigenschaften und Methoden der Basisklasse.
Gemeinsame Eigenschaften/Funktionen sind in Basisklassen zu legen.
Basisklasse-Methoden werden durch Methoden der abgeleiteten
Klasse überschrieben.
GeoObjekt
integer : layer
rgb : farbe
laden
speichern
Linie
double : dicke
punkt : von
punkt : bis
laden
speichern
Eigenschaften:
layer, farbe, dicke, von, bis
Methoden laden und speichern
überschreiben die BasisklassenMethoden
E. Baeck (Uni-DUE)
OOP und UML
MultiLinie
double : abstand
integer : typ
laden
speichern
Eigenschaften:
layer, farbe, dicke, von, bis,
abstand, typ
Methoden laden und speichern
überschreiben die BasisklassenMethoden
109 / 161
OOP, Klassenmodule
Grundbegriffe
Aufbaue einer Klassenhierarchie durch Vererbung
Das Beispiel zeigt die Klassenhierarchie eines CAD-Geometriemodells.
Von einem allgemeinen Geometrie-Objekt leiten sich Primitives ab.
E. Baeck (Uni-DUE)
OOP und UML
110 / 161
OOP, Klassenmodule
Grundbegriffe
Aufbaue einer Klassenhierarchie durch Vererbung
Das Beispiel zeigt die Klassenhierarchie eines CAD-Geometriemodells.
Von einem allgemeinen Geometrie-Objekt leiten sich Primitives ab.
Multilinie ist eine Ableitung von Linie.
GeoObjekt
Punkt
E. Baeck (Uni-DUE)
Linie
Polygon
OOP und UML
Solid
110 / 161
OOP, Klassenmodule
Grundbegriffe
Aufbaue einer Klassenhierarchie durch Vererbung
Das Beispiel zeigt die Klassenhierarchie eines CAD-Geometriemodells.
Von einem allgemeinen Geometrie-Objekt leiten sich Primitives ab.
Multilinie ist eine Ableitung von Linie.
Zylinder und Quader sind Ableitungen von Solid.
GeoObjekt
Punkt
Linie
Polygon
Solid
MultiLinie
E. Baeck (Uni-DUE)
OOP und UML
110 / 161
OOP, Klassenmodule
Grundbegriffe
Aufbaue einer Klassenhierarchie durch Vererbung
Das Beispiel zeigt die Klassenhierarchie eines CAD-Geometriemodells.
Von einem allgemeinen Geometrie-Objekt leiten sich Primitives ab.
Multilinie ist eine Ableitung von Linie.
Zylinder und Quader sind Ableitungen von Solid.
GeoObjekt
Punkt
Linie
Polygon
MultiLinie
E. Baeck (Uni-DUE)
Solid
Zylinder
OOP und UML
Quader
110 / 161
OOP, Klassenmodule
Kritik
Kritik und Performance
Luca Cardelli untersuchte 1996 für das DEC Systems Research Cente
die Effizienz der OOP. Er meinte, die OOP sei den prozeduralen
Ansätzen noch deutlich unterlegen [3].
Thomas Potok zeigt 1999, dass es zwischen prozeduralen und
OOP-Ansätzen keine signifikanten Produktivitätsunterschiede gibt[4].
E. Baeck (Uni-DUE)
OOP und UML
111 / 161
OOP, Klassenmodule
Kritik
Kritik und Performance
Luca Cardelli untersuchte 1996 für das DEC Systems Research Cente
die Effizienz der OOP. Er meinte, die OOP sei den prozeduralen
Ansätzen noch deutlich unterlegen [3].
Thomas Potok zeigt 1999, dass es zwischen prozeduralen und
OOP-Ansätzen keine signifikanten Produktivitätsunterschiede gibt[4].
Das Laufzeitverhalten gängiger Algorithmen zeigt eine ca. um 50%
bessere Performance bei Implementierung in C im Vergleich zu
OOP-Ansätzen.
E. Baeck (Uni-DUE)
OOP und UML
111 / 161
OOP, Klassenmodule
Kritik
Kritik und Performance
Luca Cardelli untersuchte 1996 für das DEC Systems Research Cente
die Effizienz der OOP. Er meinte, die OOP sei den prozeduralen
Ansätzen noch deutlich unterlegen [3].
Thomas Potok zeigt 1999, dass es zwischen prozeduralen und
OOP-Ansätzen keine signifikanten Produktivitätsunterschiede gibt[4].
Das Laufzeitverhalten gängiger Algorithmen zeigt eine ca. um 50%
bessere Performance bei Implementierung in C im Vergleich zu
OOP-Ansätzen.
Die Implementierung von Scriptsprachen erfolgt häufig in C
(Python, Lua, TCL,...).
E. Baeck (Uni-DUE)
OOP und UML
111 / 161
OOP, Klassenmodule
Kritik
Kritik und Performance
Luca Cardelli untersuchte 1996 für das DEC Systems Research Cente
die Effizienz der OOP. Er meinte, die OOP sei den prozeduralen
Ansätzen noch deutlich unterlegen [3].
Thomas Potok zeigt 1999, dass es zwischen prozeduralen und
OOP-Ansätzen keine signifikanten Produktivitätsunterschiede gibt[4].
Das Laufzeitverhalten gängiger Algorithmen zeigt eine ca. um 50%
bessere Performance bei Implementierung in C im Vergleich zu
OOP-Ansätzen.
Die Implementierung von Scriptsprachen erfolgt häufig in C
(Python, Lua, TCL,...).
Die Implementierung von Datenbanktreibern erfolgt ebenfalls in C
(SQLite3, MySQL (C/C++), PostgreSQL,...).
E. Baeck (Uni-DUE)
OOP und UML
111 / 161
OOP, Klassenmodule
Kritik
Kritik und Performance
Luca Cardelli untersuchte 1996 für das DEC Systems Research Cente
die Effizienz der OOP. Er meinte, die OOP sei den prozeduralen
Ansätzen noch deutlich unterlegen [3].
Thomas Potok zeigt 1999, dass es zwischen prozeduralen und
OOP-Ansätzen keine signifikanten Produktivitätsunterschiede gibt[4].
Das Laufzeitverhalten gängiger Algorithmen zeigt eine ca. um 50%
bessere Performance bei Implementierung in C im Vergleich zu
OOP-Ansätzen.
Die Implementierung von Scriptsprachen erfolgt häufig in C
(Python, Lua, TCL,...).
Die Implementierung von Datenbanktreibern erfolgt ebenfalls in C
(SQLite3, MySQL (C/C++), PostgreSQL,...).
E. Baeck (Uni-DUE)
OOP und UML
111 / 161
Objektorientiertes VBA I
15
VBA Klasse
Klassenmodule
Zugriffsrechte
Interfaces
16
Beispiel Punkt
Klassenkonzept
Basisklasse
Punktklasse
Punkt-Interface
Test-Programm
17
Beispiel DWN/Profile
DünnWandige Näherung
Klassen einer DWN
UML-Gesamtdiagramm
UML-Punkt-Diagramm
UML-Element-Diagramm
E. Baeck (Uni-DUE)
Objektorientiertes VBA
112 / 161
Objektorientiertes VBA II
UML-Container-Diagramm
UML-Profil-Diagramm
UML-H-Profil-Diagramm
Sigma-Profil
18
Container-Klassen
Allgemeines
Felder
Array-Container
List-Container
Collection-Container
Performance
E. Baeck (Uni-DUE)
Objektorientiertes VBA
113 / 161
VBA Klasse
Klasse
in VBA
E. Baeck (Uni-DUE)
Objektorientiertes VBA
114 / 161
VBA Klasse
Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfügen erzeugt.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
115 / 161
VBA Klasse
Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfügen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Klassenmodul
einfügen
E. Baeck (Uni-DUE)
Objektorientiertes VBA
115 / 161
VBA Klasse
Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfügen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Punkt
GeoObjekt
double : xc(1:2)
Klassenmodul eines Punktes mit Basisklasse. xc und b sind Eigenschaften
Dim xc(1 To 2) As Double
Dim b As GeoObjekt
Private Sub Class Initialize()
xc(1) = 0#
xc(2) = 0#
Set b = New GeoObjekt
End Sub
E. Baeck (Uni-DUE)
’ Koordinaten
’ GeoObject (Basis-Klasse)
Objektorientiertes VBA
115 / 161
VBA Klasse
Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfügen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor räumt auf ⇒ Class_Terminate.
Der Konstruktor initialisiert die Koordinaten und erzeugt die Basis-Instanz
Private Sub
xc(1) =
xc(2) =
Set b =
End Sub
Class Initialize()
0#
0#
New GeoObjekt
E. Baeck (Uni-DUE)
Objektorientiertes VBA
115 / 161
VBA Klasse
Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfügen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor räumt auf ⇒ Class_Terminate.
Eine Instanz eines Klassenmoduls wird mit dem new Operator erzeugt.
Der Destruktor gibt die Basis-Instanz frei
Private Sub Class Terminate()
Set b = Nothing
End Sub
E. Baeck (Uni-DUE)
Objektorientiertes VBA
115 / 161
VBA Klasse
Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfügen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor räumt auf ⇒ Class_Terminate.
Eine Instanz eines Klassenmoduls wird mit dem new Operator erzeugt.
Instanzen werden mit Set Referenzen/Adressen zugewiesen.
Zwei Versionen, eine Klassenmodul-Instanz zu erzeugen
Dim P1 As New Punkt
E. Baeck (Uni-DUE)
Dim P1 As Punkt
Set P1 = New Punkt
Objektorientiertes VBA
115 / 161
VBA Klasse
Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfügen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor räumt auf ⇒ Class_Terminate.
Eine Instanz eines Klassenmoduls wird mit dem new Operator erzeugt.
Instanzen werden mit Set Referenzen/Adressen zugewiesen.
Eine Instanz wird durch Zuweisung von nothing explizit gelöscht.
Zwei Versionen, eine Klassenmodul-Instanz zu erzeugen
Dim P1 As New Punkt
E. Baeck (Uni-DUE)
Dim P1 As Punkt
Set P1 = New Punkt
Objektorientiertes VBA
115 / 161
VBA Klasse
Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfügen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor räumt auf ⇒ Class_Terminate.
Eine Instanz eines Klassenmoduls wird mit dem new Operator erzeugt.
Instanzen werden mit Set Referenzen/Adressen zugewiesen.
Eine Instanz wird durch Zuweisung von nothing explizit gelöscht.
Instanzen ohne Referenzen werden automatisch von VBA gelöscht.
Der Destruktor gibt die Basis-Instanz frei
Private Sub Class Terminate()
Set b = Nothing
End Sub
E. Baeck (Uni-DUE)
Objektorientiertes VBA
115 / 161
VBA Klasse
Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfügen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor räumt auf ⇒ Class_Terminate.
Eine Instanz eines Klassenmoduls wird mit dem new Operator erzeugt.
Instanzen werden mit Set Referenzen/Adressen zugewiesen.
Eine Instanz wird durch Zuweisung von nothing explizit gelöscht.
Instanzen ohne Referenzen werden automatisch von VBA gelöscht.
VBA verfügt über einen Garbage Controler.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
115 / 161
VBA Klasse
Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfügen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor räumt auf ⇒ Class_Terminate.
Eine Instanz eines Klassenmoduls wird mit dem new Operator erzeugt.
Instanzen werden mit Set Referenzen/Adressen zugewiesen.
Eine Instanz wird durch Zuweisung von nothing explizit gelöscht.
Instanzen ohne Referenzen werden automatisch von VBA gelöscht.
VBA verfügt über einen Garbage Controler.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
115 / 161
VBA Klasse
Zugriffsrechte
Zugriffsrechte und Sichtbarkeit
In VBA gibt es 2 Zugriffsrechte Public und Private.
Public Eigenschaften/Funktionen sind sichtbar und ungekapselt.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
116 / 161
VBA Klasse
Zugriffsrechte
Zugriffsrechte und Sichtbarkeit
In VBA gibt es 2 Zugriffsrechte Public und Private.
Public Eigenschaften/Funktionen sind sichtbar und ungekapselt.
Private Eigenschaften/Funktionen sind verborgen und gekapselt.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
116 / 161
VBA Klasse
Zugriffsrechte
Zugriffsrechte und Sichtbarkeit
In VBA gibt es 2 Zugriffsrechte Public und Private.
Public Eigenschaften/Funktionen sind sichtbar und ungekapselt.
Private Eigenschaften/Funktionen sind verborgen und gekapselt.
Mit Dim vereinbarte Eigenschaften sind stets Private.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
116 / 161
VBA Klasse
Zugriffsrechte
Zugriffsrechte und Sichtbarkeit
In VBA gibt es 2 Zugriffsrechte Public und Private.
Public Eigenschaften/Funktionen sind sichtbar und ungekapselt.
Private Eigenschaften/Funktionen sind verborgen und gekapselt.
Mit Dim vereinbarte Eigenschaften sind stets Private.
Felder können nur mit Private erzeugt werden.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
116 / 161
VBA Klasse
Zugriffsrechte
Zugriffsrechte und Sichtbarkeit
In VBA gibt es 2 Zugriffsrechte Public und Private.
Public Eigenschaften/Funktionen sind sichtbar und ungekapselt.
Private Eigenschaften/Funktionen sind verborgen und gekapselt.
Mit Dim vereinbarte Eigenschaften sind stets Private.
Felder können nur mit Private erzeugt werden.
Felder erfordern Interfaces.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
116 / 161
VBA Klasse
Zugriffsrechte
Zugriffsrechte und Sichtbarkeit
In VBA gibt es 2 Zugriffsrechte Public und Private.
Public Eigenschaften/Funktionen sind sichtbar und ungekapselt.
Private Eigenschaften/Funktionen sind verborgen und gekapselt.
Mit Dim vereinbarte Eigenschaften sind stets Private.
Felder können nur mit Private erzeugt werden.
Felder erfordern Interfaces.
Eventfunktionen sind immer Private.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
116 / 161
VBA Klasse
Zugriffsrechte
Zugriffsrechte und Sichtbarkeit
In VBA gibt es 2 Zugriffsrechte Public und Private.
Public Eigenschaften/Funktionen sind sichtbar und ungekapselt.
Private Eigenschaften/Funktionen sind verborgen und gekapselt.
Mit Dim vereinbarte Eigenschaften sind stets Private.
Felder können nur mit Private erzeugt werden.
Felder erfordern Interfaces.
Eventfunktionen sind immer Private.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
116 / 161
VBA Klasse
Interfaces
Interfaces und Pseudo-Vererbung
VBA unterstützt keine Vererbung.
Die Vererbung kann über Interfaces simuliert werden.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
117 / 161
VBA Klasse
Interfaces
Interfaces und Pseudo-Vererbung
VBA unterstützt keine Vererbung.
Die Vererbung kann über Interfaces simuliert werden.
Ein Eigenschafts-Interface wird mit Property fest gelegt.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
117 / 161
VBA Klasse
Interfaces
Interfaces und Pseudo-Vererbung
VBA unterstützt keine Vererbung.
Die Vererbung kann über Interfaces simuliert werden.
Ein Eigenschafts-Interface wird mit Property fest gelegt.
Die Eigenschaft wird mit einer Let Property gesetzt.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
117 / 161
VBA Klasse
Interfaces
Interfaces und Pseudo-Vererbung
VBA unterstützt keine Vererbung.
Die Vererbung kann über Interfaces simuliert werden.
Ein Eigenschafts-Interface wird mit Property fest gelegt.
Die Eigenschaft wird mit einer Let Property gesetzt.
Die Eigenschaft wird mit einer Get Property gelesen.
Ein Let Property-Interface eines Punktes für Koordinaten xc
’ setzen des x-Wertes
Public Property Let x(x1 As Double)
xc(1) = x1
End Property
’ setzen des y-Wertes
Public Property Let y(y1 As Double)
xc(2) = y1
End Property
E. Baeck (Uni-DUE)
Die Zuweisung erfolgt auf die Komponenten
des Koordinatenfeldes.
Objektorientiertes VBA
117 / 161
VBA Klasse
Interfaces
Interfaces und Pseudo-Vererbung
VBA unterstützt keine Vererbung.
Die Vererbung kann über Interfaces simuliert werden.
Ein Eigenschafts-Interface wird mit Property fest gelegt.
Die Eigenschaft wird mit einer Let Property gesetzt.
Die Eigenschaft wird mit einer Get Property gelesen.
Ein Get Property-Interface eines Punktes für Koordinaten xc
’ Rückgabe des x-Wertes
Public Property Get x() As Double
x = xc(1)
End Property
’ Rückgabe des y-Wertes
Public Property Get y() As Double
y = xc(2)
End Property
E. Baeck (Uni-DUE)
Die Koorinatenwerte werden mittels
Interface-Routine zurück gegeben.
Objektorientiertes VBA
117 / 161
Beispiel Punkt
Beispiel
Die Punkt-Klasse
E. Baeck (Uni-DUE)
Objektorientiertes VBA
118 / 161
Beispiel Punkt
Klassenkonzept
Das Klassenkonzept
Die Punkt-Klasse wird abgeleitet von Klasse GeoObjekt.
Die Vererbung ist über eine Property Interface zu simulieren.
E. Baeck (Uni-DUE)
GeoObjekt
Punkt
integer : farbe
double : xc(1:2)
Objektorientiertes VBA
119 / 161
Beispiel Punkt
Klassenkonzept
Das Klassenkonzept
Die Punkt-Klasse wird abgeleitet von Klasse GeoObjekt.
Die Vererbung ist über eine Property Interface zu simulieren.
Property-Funktionen sind in der Lage die Parameter zu prüfen.
E. Baeck (Uni-DUE)
GeoObjekt
Punkt
integer : farbe
double : xc(1:2)
Objektorientiertes VBA
119 / 161
Beispiel Punkt
Klassenkonzept
Das Klassenkonzept
Die Punkt-Klasse wird abgeleitet von Klasse GeoObjekt.
Die Vererbung ist über eine Property Interface zu simulieren.
Property-Funktionen sind in der Lage die Parameter zu prüfen.
Punkt
GeoObjekt : b
double : xc(1:2)
Let : b
Get : b
Let : xc
Get : xc
E. Baeck (Uni-DUE)
Let schreibt Daten in die Instanz,
Get liest Daten aus der Instanz,
Objektorientiertes VBA
119 / 161
Beispiel Punkt
Basisklasse
Implementierung der Basisklasse
Ein Klassenmodul der Bezeichnung GeoObjekt ist zu erzeugen.
Die Eigenschaft farbe ist einzutragen
Private farbe As Integer
’ Der Konstruktor
Private Sub Class Initialize()
farbe = 1
End Sub
E. Baeck (Uni-DUE)
’ Farbnummer
Das Attribut wird mit Private geschützt.
Objektorientiertes VBA
120 / 161
Beispiel Punkt
Basisklasse
Implementierung der Basisklasse
Ein Klassenmodul der Bezeichnung GeoObjekt ist zu erzeugen.
Die Eigenschaft farbe ist einzutragen
Der Konstruktor initialisiert farbe mit 1.
Private farbe As Integer
’ Der Konstruktor
Private Sub Class Initialize()
farbe = 1
End Sub
E. Baeck (Uni-DUE)
’ Farbnummer
Das Attribut wird mit Private geschützt.
Objektorientiertes VBA
120 / 161
Beispiel Punkt
Basisklasse
Implementierung der Basisklasse
Ein Klassenmodul der Bezeichnung GeoObjekt ist zu erzeugen.
Die Eigenschaft farbe ist einzutragen
Der Konstruktor initialisiert farbe mit 1.
Private farbe As Integer
’ Der Konstruktor
Private Sub Class Initialize()
farbe = 1
End Sub
E. Baeck (Uni-DUE)
’ Farbnummer
Das Attribut wird mit Private geschützt.
Objektorientiertes VBA
120 / 161
Beispiel Punkt
Punktklasse
Implementierung der Punktklasse
Ein Klassenmodul der Bezeichnung Punkt ist zu erzeugen.
Die Eigenschaft xc und b sind einzutragen
Dim xc(1 To 2) As Double
Dim b As GeoObjekt
’ Konstruktor
Private Sub Class Initialize()
xc(1) = 0#
xc(2) = 0#
Set b = New GeoObjekt
End Sub
’ Destruktor
Private Sub Class Terminate()
Set b = Nothing
End Sub
E. Baeck (Uni-DUE)
’ Koordinaten
’ GeoObject (Basis-Klasse)
Der Konstruktor erzeugt die Instanz der
Basisklasse mit dem new-Operator. Der
Destruktor gibt diese explizit frei.
Objektorientiertes VBA
121 / 161
Beispiel Punkt
Punktklasse
Implementierung der Punktklasse
Ein Klassenmodul der Bezeichnung Punkt ist zu erzeugen.
Die Eigenschaft xc und b sind einzutragen
Der Konstruktor erzeugt die Basisklassen-Instanz b.
Dim xc(1 To 2) As Double
Dim b As GeoObjekt
’ Konstruktor
Private Sub Class Initialize()
xc(1) = 0#
xc(2) = 0#
Set b = New GeoObjekt
End Sub
’ Destruktor
Private Sub Class Terminate()
Set b = Nothing
End Sub
E. Baeck (Uni-DUE)
’ Koordinaten
’ GeoObject (Basis-Klasse)
Der Konstruktor erzeugt die Instanz der
Basisklasse mit dem new-Operator. Der
Destruktor gibt diese explizit frei.
Objektorientiertes VBA
121 / 161
Beispiel Punkt
Punktklasse
Implementierung der Punktklasse
Ein Klassenmodul der Bezeichnung Punkt ist zu erzeugen.
Die Eigenschaft xc und b sind einzutragen
Der Konstruktor erzeugt die Basisklassen-Instanz b.
Dim xc(1 To 2) As Double
Dim b As GeoObjekt
’ Konstruktor
Private Sub Class Initialize()
xc(1) = 0#
xc(2) = 0#
Set b = New GeoObjekt
End Sub
’ Destruktor
Private Sub Class Terminate()
Set b = Nothing
End Sub
E. Baeck (Uni-DUE)
’ Koordinaten
’ GeoObject (Basis-Klasse)
Der Konstruktor erzeugt die Instanz der
Basisklasse mit dem new-Operator. Der
Destruktor gibt diese explizit frei.
Objektorientiertes VBA
121 / 161
Beispiel Punkt
Punkt-Interface
Interface-Implementierung zur Klasse Punkt
Interface für Eigenschaften von Punkt und GeoObjekt.
Die Eigenschaften werden mit Let geschrieben, mit Get gelesen.
’ Farbwert übernehmen
Public Property Let farbe(f As Integer)
b.farbe = f
End Property
’ Farbwert lesen
Public Property Get farbe() As Integer
farbe = b.farbe
End Property
’ Koordinatenwert übernehmen
Public Property Let x(i As Integer, x1 As Double)
xc(i) = x1
End Property
’ Koordinatenwert lesen
Public Property Get x(i As Integer) As Double
x = xc(i)
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
122 / 161
Beispiel Punkt
Punkt-Interface
Interface-Implementierung zur Klasse Punkt
Interface für Eigenschaften von Punkt und GeoObjekt.
Die Eigenschaften werden mit Let geschrieben, mit Get gelesen.
Felder können über Let/Get auch angesprochen werden.
’ Farbwert übernehmen
Public Property Let farbe(f As Integer)
b.farbe = f
End Property
’ Farbwert lesen
Public Property Get farbe() As Integer
farbe = b.farbe
End Property
’ Koordinatenwert übernehmen
Public Property Let x(i As Integer, x1 As Double)
xc(i) = x1
End Property
’ Koordinatenwert lesen
Public Property Get x(i As Integer) As Double
x = xc(i)
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
122 / 161
Beispiel Punkt
Punkt-Interface
Interface-Implementierung zur Klasse Punkt
Interface für Eigenschaften von Punkt und GeoObjekt.
Die Eigenschaften werden mit Let geschrieben, mit Get gelesen.
Felder können über Let/Get auch angesprochen werden.
’ Farbwert übernehmen
Public Property Let farbe(f As Integer)
b.farbe = f
End Property
’ Farbwert lesen
Public Property Get farbe() As Integer
farbe = b.farbe
End Property
’ Koordinatenwert übernehmen
Public Property Let x(i As Integer, x1 As Double)
xc(i) = x1
End Property
’ Koordinatenwert lesen
Public Property Get x(i As Integer) As Double
x = xc(i)
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
122 / 161
Beispiel Punkt
Test-Programm
Hauptprogramm zum Test der Punktklasse
Zunächst werden die Instanzen erzeugt.
Punkt 1 wird gesetzt. Prüfung der Let Funktionen.
Sub PunktTest()
’ Implementierung der Variablen und Instanzen
Dim P1 As New Punkt
Dim P2 As New Punkt
Dim i As Integer
’ schreiben der Startwerte in P1
P1.x(1) = 1#
P1.x(2) = 2#
’ übernehmen der Werte in P2
For i = 1 To 2
P2.x(i) = P1.x(i)
Next
’ Farbe setzen
P2.farbe = 2
End Sub
E. Baeck (Uni-DUE)
Objektorientiertes VBA
123 / 161
Beispiel Punkt
Test-Programm
Hauptprogramm zum Test der Punktklasse
Zunächst werden die Instanzen erzeugt.
Punkt 1 wird gesetzt. Prüfung der Let Funktionen.
Punkt 1 in Punkt 2 kopieren und Farbe auf 2 setzen.
Sub PunktTest()
’ Implementierung der Variablen und Instanzen
Dim P1 As New Punkt
Dim P2 As New Punkt
Dim i As Integer
’ schreiben der Startwerte in P1
P1.x(1) = 1#
P1.x(2) = 2#
’ übernehmen der Werte in P2
For i = 1 To 2
P2.x(i) = P1.x(i)
Next
’ Farbe setzen
P2.farbe = 2
End Sub
E. Baeck (Uni-DUE)
Objektorientiertes VBA
123 / 161
Beispiel Punkt
Test-Programm
Hauptprogramm zum Test der Punktklasse
Zunächst werden die Instanzen erzeugt.
Punkt 1 wird gesetzt. Prüfung der Let Funktionen.
Punkt 1 in Punkt 2 kopieren und Farbe auf 2 setzen.
Sub PunktTest()
’ Implementierung der Variablen und Instanzen
Dim P1 As New Punkt
Dim P2 As New Punkt
Dim i As Integer
’ schreiben der Startwerte in P1
P1.x(1) = 1#
P1.x(2) = 2#
’ übernehmen der Werte in P2
For i = 1 To 2
P2.x(i) = P1.x(i)
Next
’ Farbe setzen
P2.farbe = 2
End Sub
E. Baeck (Uni-DUE)
Objektorientiertes VBA
123 / 161
Beispiel DWN/Profile
Beispiel
Dünnwandige Näherung
für Querschnittswerte
E. Baeck (Uni-DUE)
Objektorientiertes VBA
124 / 161
Beispiel DWN/Profile
DünnWandige Näherung
Näherung für dünnwandige Profile
Querschnittswerte allgemeiner Profilen
werden durch Integration berechnet.
Dünnwandige Profile können
näherungsweise durch Linien
konstanter Dicke beschrieben werden.
Querschnittsfläche
Z
A = dA
(A)
Statisches Moment
Z
Sy = z · dA
(A)
Flächenträgheitsmoment
Z
Iy = z 2 · dA
(A)
E. Baeck (Uni-DUE)
Objektorientiertes VBA
125 / 161
Beispiel DWN/Profile
DünnWandige Näherung
Näherung für dünnwandige Profile
Querschnittswerte allgemeiner Profilen
werden durch Integration berechnet.
Ein C-Profil
Dünnwandige Profile können
näherungsweise durch Linien
konstanter Dicke beschrieben werden.
Fläche =
R
dA
(A)
E. Baeck (Uni-DUE)
Objektorientiertes VBA
125 / 161
Beispiel DWN/Profile
DünnWandige Näherung
Näherung für dünnwandige Profile
Querschnittswerte allgemeiner Profilen
werden durch Integration berechnet.
Punkte eines C-Profils
Dünnwandige Profile können
näherungsweise durch Linien
konstanter Dicke beschrieben werden.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
125 / 161
Beispiel DWN/Profile
DünnWandige Näherung
Näherung für dünnwandige Profile
Querschnittswerte allgemeiner Profilen
werden durch Integration berechnet.
Gurt-Elemente eines C-Profils
Dünnwandige Profile können
näherungsweise durch Linien
konstanter Dicke beschrieben werden.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
125 / 161
Beispiel DWN/Profile
DünnWandige Näherung
Näherung für dünnwandige Profile
Querschnittswerte allgemeiner Profilen
werden durch Integration berechnet.
Element eines C-Profils
Dünnwandige Profile können
näherungsweise durch Linien
konstanter Dicke beschrieben werden.
Die Linien werden als Elemente
bezeichnet.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
125 / 161
Beispiel DWN/Profile
DünnWandige Näherung
Näherung für dünnwandige Profile
Querschnittswerte allgemeiner Profilen
werden durch Integration berechnet.
Element eines C-Profils
Dünnwandige Profile können
näherungsweise durch Linien
konstanter Dicke beschrieben werden.
Die Linien werden als Elemente
bezeichnet.
Die Elemente haben eine konstante
Dicke, d.h. ihre Fläche ist ein
Rechteck.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
Gurt-Element
Steg-Element
Gurt-Element
125 / 161
Beispiel DWN/Profile
DünnWandige Näherung
Näherung für dünnwandige Profile
Querschnittswerte allgemeiner Profilen
werden durch Integration berechnet.
Element eines C-Profils
Dünnwandige Profile können
näherungsweise durch Linien
konstanter Dicke beschrieben werden.
Die Linien werden als Elemente
bezeichnet.
Die Elemente haben eine konstante
Dicke, d.h. ihre Fläche ist ein
Rechteck.
Gurt-Element
Steg-Element
Gurt-Element
Integrale können damit durch
Summen ersetzt werden.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
125 / 161
Beispiel DWN/Profile
DünnWandige Näherung
Näherung für dünnwandige Profile
Querschnittswerte allgemeiner Profilen
werden durch Integration berechnet.
Dünnwandige Profile können
näherungsweise durch Linien
konstanter Dicke beschrieben werden.
Die Linien werden als Elemente
bezeichnet.
Die Elemente haben eine konstante
Dicke, d.h. ihre Fläche ist ein
Rechteck.
Fläche ≈
P
Teilflächen
Z
A=
dA
(A)
≈
X
AElement
(Elemente)
≈ 2 · AGurt + ASteg
Integrale können damit durch
Summen ersetzt werden.
Fehler im Elementstoß-Bereich,
Überdeckungen, keine Ausrundungen.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
125 / 161
Beispiel DWN/Profile
DünnWandige Näherung
Näherung für dünnwandige Profile
Querschnittswerte allgemeiner Profilen
werden durch Integration berechnet.
Dünnwandige Profile können
näherungsweise durch Linien
konstanter Dicke beschrieben werden.
Die Linien werden als Elemente
bezeichnet.
Die Elemente haben eine konstante
Dicke, d.h. ihre Fläche ist ein
Rechteck.
Integrale können damit durch
Summen ersetzt werden.
Fehler im Elementstoß-Bereich,
Überdeckungen, keine Ausrundungen.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
125 / 161
Beispiel DWN/Profile
Klassen einer DWN
Klassenkonzept einer dünnwandigen Näherung
Das Profil wird mit Punkten und Elementen diskretisiert.
Punkte werden beschrieben durch ihre Koordinaten.
Punkt
E. Baeck (Uni-DUE)
Element
Objektorientiertes VBA
126 / 161
Beispiel DWN/Profile
Klassen einer DWN
Klassenkonzept einer dünnwandigen Näherung
Das Profil wird mit Punkten und Elementen diskretisiert.
Punkte werden beschrieben durch ihre Koordinaten.
Elemente verbinden Punkte und haben eine Dicke.
Punkt
Element
double : x(1:2)
E. Baeck (Uni-DUE)
Objektorientiertes VBA
126 / 161
Beispiel DWN/Profile
Klassen einer DWN
Klassenkonzept einer dünnwandigen Näherung
Das Profil wird mit Punkten und Elementen diskretisiert.
Punkte werden beschrieben durch ihre Koordinaten.
Elemente verbinden Punkte und haben eine Dicke.
Punkte und Elemente sind Teil eines allgemeinen Profils.
Punkt
double : x(1:2)
E. Baeck (Uni-DUE)
Element
2
Referenz
Objektorientiertes VBA
double: dicke
126 / 161
Beispiel DWN/Profile
Klassen einer DWN
Klassenkonzept einer dünnwandigen Näherung
Das Profil wird mit Punkten und Elementen diskretisiert.
Punkte werden beschrieben durch ihre Koordinaten.
Elemente verbinden Punkte und haben eine Dicke.
Punkte und Elemente sind Teil eines allgemeinen Profils.
Spezielle Profile (z.B. HProfil) werden von Profil abgeleitet.
Profil
2..*
Referenz
Punkt
double : x(1:2)
E. Baeck (Uni-DUE)
1..*
Referenz
Element
2
Referenz
Objektorientiertes VBA
double: dicke
126 / 161
Beispiel DWN/Profile
Klassen einer DWN
Klassenkonzept einer dünnwandigen Näherung
Das Profil wird mit Punkten und Elementen diskretisiert.
Punkte werden beschrieben durch ihre Koordinaten.
Elemente verbinden Punkte und haben eine Dicke.
Punkte und Elemente sind Teil eines allgemeinen Profils.
Spezielle Profile (z.B. HProfil) werden von Profil abgeleitet.
CProfil
HProfil
Profil
2..*
Referenz
Punkt
double : x(1:2)
E. Baeck (Uni-DUE)
1..*
Referenz
Element
2
Referenz
Objektorientiertes VBA
double: dicke
126 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Punkt
Es wird auf eine Basisklasse verzichtet.
Punkt
Punkte werden durch ihre Koordinaten beschrieben.
Klassenmodul Punkt
E. Baeck (Uni-DUE)
Objektorientiertes VBA
127 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Punkt
Es wird auf eine Basisklasse verzichtet.
Punkte werden durch ihre Koordinaten beschrieben.
Punkt
– double : x(1:2)
Der Zugriff auf die Koordinaten erfolgt über ein
Property Interface (Let/Get).
Klassenmodul Punkt
Dim xc(1 To 2) As Double
E. Baeck (Uni-DUE)
Objektorientiertes VBA
127 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Punkt
Es wird auf eine Basisklasse verzichtet.
Punkte werden durch ihre Koordinaten beschrieben.
Der Zugriff auf die Koordinaten erfolgt über ein
Property Interface (Let/Get).
Punkt
– double : x(1:2)
Let : x(i)
Get : x(i)
Klassenmodul Punkt
Dim xc(1 To 2) As Double
’ Koordinante schreiben
Public Property Let x(i As Integer, x1 As Double)
xc(i) = x1
End Property
’ Koordinante lesen
Public Property Get x(i As Integer) As Double
x = xc(i)
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
127 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Element
Es wird auf eine Basisklasse verzichtet.
Element
Ein Element wird beschrieben durch seine Dicke,
Klassenmodul Element
E. Baeck (Uni-DUE)
Objektorientiertes VBA
128 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Element
Es wird auf eine Basisklasse verzichtet.
Ein Element wird beschrieben durch seine Dicke,
Element
+ double : dicke
und die Referenzen seiner Punkte.
Klassenmodul Element
Public dicke As Double
’ Dicke
E. Baeck (Uni-DUE)
Objektorientiertes VBA
128 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Element
Es wird auf eine Basisklasse verzichtet.
Ein Element wird beschrieben durch seine Dicke,
Element
+ double : dicke
– Punkt: p(1:2)
und die Referenzen seiner Punkte.
Punktzugriff über Property Interface (Let/Get).
Klassenmodul Element
Public dicke As Double
Dim p(1 To 2) As Punkt
’ Dicke
’ Linien Punkte (von-bis)
E. Baeck (Uni-DUE)
Objektorientiertes VBA
128 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Element
Es wird auf eine Basisklasse verzichtet.
Element
Ein Element wird beschrieben durch seine Dicke,
+ double : dicke
– Punkt: p(1:2)
und die Referenzen seiner Punkte.
Let : p(i)
Get : p(i)
Punktzugriff über Property Interface (Let/Get).
Die Get-Property Lng berechnet die Elementlänge.
Klassenmodul Element
Public dicke As Double ’
Dim p(1 To 2) As Punkt ’
’ Punkt-Referenz setzen
Public Property Let Pkt(i
Set p(i) = p1
End Property
’ Punkt-Referenz lesen
Public Property Get Pkt(i
Set Pkt = p(i)
End Property
E. Baeck (Uni-DUE)
Dicke
Linien Punkte (von-bis)
As Integer, p1 As Punkt)
As Integer) As Punkt
Objektorientiertes VBA
128 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Element
Es wird auf eine Basisklasse verzichtet.
Element
Ein Element wird beschrieben durch seine Dicke,
+ double : dicke
– Punkt: p(1:2)
und die Referenzen seiner Punkte.
Let : p(i)
Get : p(i)
Get : Lng
Punktzugriff über Property Interface (Let/Get).
Die Get-Property Lng berechnet die Elementlänge.
Klassenmodul Element
Public dicke As Double ’
Dim p(1 To 2) As Punkt ’
’ Punkt-Referenz setzen
Public Property Let Pkt(i
Set p(i) = p1
End Property
’ Punkt-Referenz lesen
Public Property Get Pkt(i
Set Pkt = p(i)
End Property
E. Baeck (Uni-DUE)
Dicke
Linien Punkte (von-bis)
As Integer, p1 As Punkt)
As Integer) As Punkt
’ Projizierte Elementlängen
Public Property Get delX(i As Integer) As Double
delX = p(2).x(i) - p(1).x(i)
End Property
’ Elementlänge berechnen
Public Property Get Lng() As Double
Lng = Sqr(delX(1) ^ 2 + delX(2) ^ 2)
End Property
Objektorientiertes VBA
128 / 161
Beispiel DWN/Profile
Klassen einer DWN
Berechnung der Querschnittswerte
Querschnittsfläche
Z
n
X
A=
dA ≈
Li · ti
A
i=1
Statisches Moment um y-Richtung
Z
n
n
X
X
Sy =
z · dA ≈
zi · Ai =
zi · Li · ti
A
E. Baeck (Uni-DUE)
i=1
i=1
Objektorientiertes VBA
mit:
Li
ti
Ai
∆yi
∆zi
yi
zi
Länge Element i
Dicke Element i
Fläche Element i
auf y projizierte,
auf z projizierte
Länge des Elements i
y-Schwerpunktkoordinate
z-Schwerpunktkoordinate
129 / 161
Beispiel DWN/Profile
Klassen einer DWN
Berechnung der Querschnittswerte
Querschnittsfläche
Z
n
X
A=
dA ≈
Li · ti
A
i=1
Statisches Moment um y-Richtung
Z
n
n
X
X
Sy =
z · dA ≈
zi · Ai =
zi · Li · ti
A
i=1
i=1
mit:
Li
ti
Ai
∆yi
∆zi
yi
zi
Länge Element i
Dicke Element i
Fläche Element i
auf y projizierte,
auf z projizierte
Länge des Elements i
y-Schwerpunktkoordinate
z-Schwerpunktkoordinate
Statisches Moment um z-Richtung
Z
n
n
X
X
Sz =
y · dA ≈
yi · Ai =
yi · Li · ti
A
E. Baeck (Uni-DUE)
i=1
i=1
Objektorientiertes VBA
129 / 161
Beispiel DWN/Profile
Klassen einer DWN
Berechnung der Querschnittswerte
Querschnittsfläche
Z
n
X
A=
dA ≈
Li · ti
A
i=1
Statisches Moment um y-Richtung
Z
n
n
X
X
Sy =
z · dA ≈
zi · Ai =
zi · Li · ti
A
i=1
i=1
Statisches Moment um z-Richtung
Z
n
n
X
X
Sz =
y · dA ≈
yi · Ai =
yi · Li · ti
A
E. Baeck (Uni-DUE)
i=1
mit:
Li
ti
Ai
∆yi
∆zi
yi
zi
Länge Element i
Dicke Element i
Fläche Element i
auf y projizierte,
auf z projizierte
Länge des Elements i
y-Schwerpunktkoordinate
z-Schwerpunktkoordinate
Schwerpunkt: ys =
Schwerpunkt: zs =
Sz
A
Sy
A
i=1
Objektorientiertes VBA
129 / 161
Beispiel DWN/Profile
Klassen einer DWN
Berechnung der Querschnittswerte
Querschnittsfläche
Z
n
X
A=
dA ≈
Li · ti
A
i=1
Statisches Moment um y-Richtung
Z
n
n
X
X
Sy =
z · dA ≈
zi · Ai =
zi · Li · ti
A
i=1
i=1
Statisches Moment um z-Richtung
Z
n
n
X
X
Sz =
y · dA ≈
yi · Ai =
yi · Li · ti
A
E. Baeck (Uni-DUE)
i=1
mit:
Li
ti
Ai
∆yi
∆zi
yi
zi
Länge Element i
Dicke Element i
Fläche Element i
auf y projizierte,
auf z projizierte
Länge des Elements i
y-Schwerpunktkoordinate
z-Schwerpunktkoordinate
Schwerpunkt: ys =
Schwerpunkt: zs =
Sz
A
Sy
A
i=1
Objektorientiertes VBA
129 / 161
Beispiel DWN/Profile
Klassen einer DWN
Berechnung der Querschnittswerte
Flächenträgheitsmoment um y-Achse
mit:
Z
n
X
Li Länge Element i
Iy =
z 2 ·dA ≈
∆zi2 /12) + zi2 · Ai
ti Dicke Element i
A
i=1
Ai Fläche Element i
∆y
i auf y projizierte,
Flächenträgheitsmoment um z-Achse
∆z
i auf z projizierte
Z
n
X
Länge des Elements i
∆yi2 /12) + yi2 · Ai
Iz =
y 2 ·dA ≈
y
y-Schwerpunktkoordinate
i
A
i=1
zi z-Schwerpunktkoordinate
E. Baeck (Uni-DUE)
Objektorientiertes VBA
130 / 161
Beispiel DWN/Profile
Klassen einer DWN
Berechnung der Querschnittswerte
Flächenträgheitsmoment um y-Achse
mit:
Z
n
X
Li Länge Element i
Iy =
z 2 ·dA ≈
∆zi2 /12) + zi2 · Ai
ti Dicke Element i
A
i=1
Ai Fläche Element i
∆y
i auf y projizierte,
Flächenträgheitsmoment um z-Achse
∆z
i auf z projizierte
Z
n
X
Länge des Elements i
∆yi2 /12) + yi2 · Ai
Iz =
y 2 ·dA ≈
y
y-Schwerpunktkoordinate
i
A
i=1
zi z-Schwerpunktkoordinate
Deviationsmoment
(gemischtes 2. Moment)
Z
n
X
y ·z·dA ≈
Iy ,z =
((∆yi ∆zi /12) + yi · zi ) · Ai )
A
E. Baeck (Uni-DUE)
i=1
Objektorientiertes VBA
130 / 161
Beispiel DWN/Profile
Klassen einer DWN
Berechnung der Querschnittswerte
Flächenträgheitsmoment um y-Achse
mit:
Z
n
X
Li Länge Element i
Iy =
z 2 ·dA ≈
∆zi2 /12) + zi2 · Ai
ti Dicke Element i
A
i=1
Ai Fläche Element i
∆y
i auf y projizierte,
Flächenträgheitsmoment um z-Achse
∆z
i auf z projizierte
Z
n
X
Länge des Elements i
∆yi2 /12) + yi2 · Ai
Iz =
y 2 ·dA ≈
y
y-Schwerpunktkoordinate
i
A
i=1
zi z-Schwerpunktkoordinate
Deviationsmoment
(gemischtes 2. Moment)
Z
n
X
y ·z·dA ≈
Iy ,z =
((∆yi ∆zi /12) + yi · zi ) · Ai )
A
E. Baeck (Uni-DUE)
i=1
Objektorientiertes VBA
130 / 161
Beispiel DWN/Profile
Klassen einer DWN
Wichtige Element-Methoden
Es sind die folgenden Methoden erforderlich
Property Pkt, um auf Punktinstanzen zuzugreifen.
Property delX, zur Berechnung der projizierten Elementlängen.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
131 / 161
Beispiel DWN/Profile
Klassen einer DWN
Wichtige Element-Methoden
Es sind die folgenden Methoden erforderlich
Property Pkt, um auf Punktinstanzen zuzugreifen.
Property delX, zur Berechnung der projizierten Elementlängen.
Property Lng, zur Ermittlung der Elementlänge.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
131 / 161
Beispiel DWN/Profile
Klassen einer DWN
Wichtige Element-Methoden
Es sind die folgenden Methoden erforderlich
Property Pkt, um auf Punktinstanzen zuzugreifen.
Property delX, zur Berechnung der projizierten Elementlängen.
Property Lng, zur Ermittlung der Elementlänge.
Property SPkt, zur Ermittlung der Schwerpunktskoordinaten eines
Elements.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
131 / 161
Beispiel DWN/Profile
Klassen einer DWN
Wichtige Element-Methoden
Es sind die folgenden Methoden erforderlich
Property Pkt, um auf Punktinstanzen zuzugreifen.
Property delX, zur Berechnung der projizierten Elementlängen.
Property Lng, zur Ermittlung der Elementlänge.
Property SPkt, zur Ermittlung der Schwerpunktskoordinaten eines
Elements.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
131 / 161
Beispiel DWN/Profile
Klassen einer DWN
Wichtige Element-Methoden
Berechnung der projizierten Elementlängen (∆y , ∆z):
Public Property Get delX(i As Integer) As Double
delX = p(2).x(i) - p(1).x(i)
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
132 / 161
Beispiel DWN/Profile
Klassen einer DWN
Wichtige Element-Methoden
Berechnung der projizierten Elementlängen (∆y , ∆z):
Public Property Get delX(i As Integer) As Double
delX = p(2).x(i) - p(1).x(i)
End Property
q
Berechnung der Elementlänge (Li = (∆y )2 + (∆z)2 ):
E. Baeck (Uni-DUE)
Objektorientiertes VBA
132 / 161
Beispiel DWN/Profile
Klassen einer DWN
Wichtige Element-Methoden
Berechnung der projizierten Elementlängen (∆y , ∆z):
Public Property Get delX(i As Integer) As Double
delX = p(2).x(i) - p(1).x(i)
End Property
q
Berechnung der Elementlänge (Li = (∆y )2 + (∆z)2 ):
Public Property Get Lng() As Double
Lng = Sqr(delX(1)^ 2 + delX(2)^ 2)
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
132 / 161
Beispiel DWN/Profile
Klassen einer DWN
Wichtige Element-Methoden
Berechnung der projizierten Elementlängen (∆y , ∆z):
Public Property Get delX(i As Integer) As Double
delX = p(2).x(i) - p(1).x(i)
End Property
q
Berechnung der Elementlänge (Li = (∆y )2 + (∆z)2 ):
Public Property Get Lng() As Double
Lng = Sqr(delX(1)^ 2 + delX(2)^ 2)
End Property
Berechnung der Elementschwerpunktskoordinaten (yi , zi ):
E. Baeck (Uni-DUE)
Objektorientiertes VBA
132 / 161
Beispiel DWN/Profile
Klassen einer DWN
Wichtige Element-Methoden
Berechnung der projizierten Elementlängen (∆y , ∆z):
Public Property Get delX(i As Integer) As Double
delX = p(2).x(i) - p(1).x(i)
End Property
q
Berechnung der Elementlänge (Li = (∆y )2 + (∆z)2 ):
Public Property Get Lng() As Double
Lng = Sqr(delX(1)^ 2 + delX(2)^ 2)
End Property
Berechnung der Elementschwerpunktskoordinaten (yi , zi ):
Public Property Get SPkt(i As Integer) As Double
SPkt = (p(1).x(i) + p(2).x(i)) / 2#
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
132 / 161
Beispiel DWN/Profile
Klassen einer DWN
Wichtige Element-Methoden
Berechnung der projizierten Elementlängen (∆y , ∆z):
Public Property Get delX(i As Integer) As Double
delX = p(2).x(i) - p(1).x(i)
End Property
q
Berechnung der Elementlänge (Li = (∆y )2 + (∆z)2 ):
Public Property Get Lng() As Double
Lng = Sqr(delX(1)^ 2 + delX(2)^ 2)
End Property
Berechnung der Elementschwerpunktskoordinaten (yi , zi ):
Public Property Get SPkt(i As Integer) As Double
SPkt = (p(1).x(i) + p(2).x(i)) / 2#
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
132 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Container Klasse ConArray
Verwalten der Referenzen mit Container-Klasse.
ConArray
Referenzen werden in einem Feld gespeichert.
Klassenmodul ConArray
E. Baeck (Uni-DUE)
Objektorientiertes VBA
133 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Container Klasse ConArray
Verwalten der Referenzen mit Container-Klasse.
ConArray
Referenzen werden in einem Feld gespeichert.
– Object : obj(...)
Anzahl gespeicherter Referenzen liefert Count.
Klassenmodul ConArray
Dim obj() As Object
E. Baeck (Uni-DUE)
’ Feld der Objekte
Objektorientiertes VBA
133 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Container Klasse ConArray
Verwalten der Referenzen mit Container-Klasse.
ConArray
Referenzen werden in einem Feld gespeichert.
Anzahl gespeicherter Referenzen liefert Count.
– Object : obj(...)
Count()
Feld-Dimension initialisiert der Konstruktor.
Klassenmodul ConArray
Dim obj() As Object
’ Feld der Objekte
’ Anzahl Objekte holen
Public Function Count() As Integer
Count = UBound(obj)
End Function
E. Baeck (Uni-DUE)
Objektorientiertes VBA
133 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Container Klasse ConArray
Verwalten der Referenzen mit Container-Klasse.
ConArray
Referenzen werden in einem Feld gespeichert.
Anzahl gespeicherter Referenzen liefert Count.
– Object : obj(...)
Count()
Feld-Dimension initialisiert der Konstruktor.
Zugriff erfolgt über ein Property Interface (Let/Get).
Klassenmodul ConArray
Dim obj() As Object
’ Feld der Objekte
’ Konstruktor mit Startdimensionierung
Private Sub Class Initialize()
ReDim obj(1 To 10)
End Sub
’ Anzahl Objekte holen
Public Function Count() As Integer
Count = UBound(obj)
End Function
E. Baeck (Uni-DUE)
Objektorientiertes VBA
133 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Container Klasse ConArray
Verwalten der Referenzen mit Container-Klasse.
ConArray
Referenzen werden in einem Feld gespeichert.
Anzahl gespeicherter Referenzen liefert Count.
Feld-Dimension initialisiert der Konstruktor.
– Object : obj(...)
Count()
Let : item(i)
Get : item(i)
Zugriff erfolgt über ein Property Interface (Let/Get).
Anpassen der Containergröße mit SetSize.
Klassenmodul ConArray
Dim obj() As Object
’ Feld der Objekte
’ Konstruktor mit Startdimensionierung
Private Sub Class Initialize()
ReDim obj(1 To 10)
End Sub
’ Anzahl Objekte holen
Public Function Count() As Integer
Count = UBound(obj)
End Function
E. Baeck (Uni-DUE)
’ Objekt Referenz speichern
Public Property Let Item(i As Integer, ob As Object)
Set obj(i) = ob
End Property
’ Objekt Referenz zurück geben
Public Property Get Item(i As Integer) As Object
Set Item = obj(i)
End Property
Objektorientiertes VBA
133 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Container Klasse ConArray
Verwalten der Referenzen mit Container-Klasse.
Referenzen werden in einem Feld gespeichert.
Anzahl gespeicherter Referenzen liefert Count.
Feld-Dimension initialisiert der Konstruktor.
ConArray
ConArray
– Object : obj(...)
– Object : obj(...)
Count()
Count()
Let : item(i)
Let : item(i)
Get : item(i)
Get : item(i)
SetSize()
Zugriff erfolgt über ein Property Interface (Let/Get).
Anpassen der Containergröße mit SetSize.
Klassenmodul ConArray
Dim obj() As Object
’ Feld der Objekte
’ Konstruktor mit Startdimensionierung
Private Sub Class Initialize()
ReDim obj(1 To 10)
End Sub
’ Anzahl Objekte holen
Public Function Count() As Integer
Count = UBound(obj)
End Function
E. Baeck (Uni-DUE)
’ Objekt Referenz speichern
Public Property Let Item(i As Integer, ob As Object)
Set obj(i) = ob
End Property
’ Objekt Referenz zurück geben
Public Property Get Item(i As Integer) As Object
Set Item = obj(i)
End Property
’ Setzen der Felddimension
Public Sub SetSize(size As Integer)
ReDim obj(1 To size)
End Sub
Objektorientiertes VBA
133 / 161
Beispiel DWN/Profile
Klassen einer DWN
Warum eine Profil-Klasse
Die Klasse Profil
ist Conainter der Modell Daten (Punkt und Element)
E. Baeck (Uni-DUE)
Objektorientiertes VBA
134 / 161
Beispiel DWN/Profile
Klassen einer DWN
Warum eine Profil-Klasse
Die Klasse Profil
ist Conainter der Modell Daten (Punkt und Element)
hat Zugriff auf alle Eingangsdaten der Berechnung.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
134 / 161
Beispiel DWN/Profile
Klassen einer DWN
Warum eine Profil-Klasse
Die Klasse Profil
ist Conainter der Modell Daten (Punkt und Element)
hat Zugriff auf alle Eingangsdaten der Berechnung.
berechnet alle Querschnittswerte.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
134 / 161
Beispiel DWN/Profile
Klassen einer DWN
Warum eine Profil-Klasse
Die Klasse Profil
ist Conainter der Modell Daten (Punkt und Element)
hat Zugriff auf alle Eingangsdaten der Berechnung.
berechnet alle Querschnittswerte.
kann zum Aufbau einer Profildatenbank eingesetzt werden.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
134 / 161
Beispiel DWN/Profile
Klassen einer DWN
Warum eine Profil-Klasse
Die Klasse Profil
ist Conainter der Modell Daten (Punkt und Element)
hat Zugriff auf alle Eingangsdaten der Berechnung.
berechnet alle Querschnittswerte.
kann zum Aufbau einer Profildatenbank eingesetzt werden.
wird als Basis spezieller Profile verwendet (z.B. HProfil).
E. Baeck (Uni-DUE)
Objektorientiertes VBA
134 / 161
Beispiel DWN/Profile
Klassen einer DWN
Warum eine Profil-Klasse
Die Klasse Profil
ist Conainter der Modell Daten (Punkt und Element)
hat Zugriff auf alle Eingangsdaten der Berechnung.
berechnet alle Querschnittswerte.
kann zum Aufbau einer Profildatenbank eingesetzt werden.
wird als Basis spezieller Profile verwendet (z.B. HProfil).
E. Baeck (Uni-DUE)
Objektorientiertes VBA
134 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Profil
Es wird auf eine Basisklasse verzichtet.
Profil
Profil speichert Punkte und Elemente.
Klassenmodul Profil
E. Baeck (Uni-DUE)
Objektorientiertes VBA
135 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Profil
Es wird auf eine Basisklasse verzichtet.
Profil
Profil speichert Punkte und Elemente.
Die ConArray-Instanzen werden mit new erzeugt.
- ConArray : PktA(...)
- ConArray : EleA(...)
Klassenmodul Profil
Dim PktA As New ConArray
Dim EleA As New ConArray
Public Name As String
E. Baeck (Uni-DUE)
’ Punkt Container
’ Element Container
’ Profil-Bezeichnung
Objektorientiertes VBA
135 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Profil
Es wird auf eine Basisklasse verzichtet.
Profil
Profil speichert Punkte und Elemente.
Die ConArray-Instanzen werden mit new erzeugt.
- ConArray : PktA(...)
- ConArray : EleA(...)
Die Methode InitSize initialisiert die Container.
Klassenmodul Profil
Dim PktA As New ConArray
Dim EleA As New ConArray
Public Name As String
E. Baeck (Uni-DUE)
’ Punkt Container
’ Element Container
’ Profil-Bezeichnung
Objektorientiertes VBA
135 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Profil
Es wird auf eine Basisklasse verzichtet.
Profil
Profil speichert Punkte und Elemente.
Die ConArray-Instanzen werden mit new erzeugt.
- ConArray : PktA(...)
- ConArray : EleA(...)
InitSize()
Die Methode InitSize initialisiert die Container.
Instanzzugriffe über Property Interfaces (Let/Get).
Klassenmodul Profil
Dim PktA As New ConArray
’ Punkt Container
Dim EleA As New ConArray
’ Element Container
Public Name As String
’ Profil-Bezeichnung
’ Initialisierung der Container
Public Sub InitSize(pkt As Integer, ele As Integer)
PktA.SetSize (pkt)
EleA.SetSize (ele)
End Sub
E. Baeck (Uni-DUE)
Objektorientiertes VBA
135 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Profil
Es wird auf eine Basisklasse verzichtet.
Profil
Profil speichert Punkte und Elemente.
Die ConArray-Instanzen werden mit new erzeugt.
Die Methode InitSize initialisiert die Container.
Instanzzugriffe über Property Interfaces (Let/Get).
- ConArray : PktA(...)
- ConArray : EleA(...)
InitSize()
Let : Pkt(i)
Get : Pkt(i)
Let : Ele(i)
Get : Ele(i)
Profil ermittelt seine Querschnittswerte.
Klassenmodul Profil
Dim PktA As New ConArray
’ Punkt Container
Dim EleA As New ConArray
’ Element Container
Public Name As String
’ Profil-Bezeichnung
’ Initialisierung der Container
Public Sub InitSize(pkt As Integer, ele As Integer)
PktA.SetSize (pkt)
EleA.SetSize (ele)
End Sub
’ Element speichern
Public Property Let Ele(i As Integer, e As Element)
EleA.Item(i) = e
End Property
...
E. Baeck (Uni-DUE)
Objektorientiertes VBA
135 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse Profil
Es wird auf eine Basisklasse verzichtet.
Profil
Profil speichert Punkte und Elemente.
Die ConArray-Instanzen werden mit new erzeugt.
Die Methode InitSize initialisiert die Container.
Instanzzugriffe über Property Interfaces (Let/Get).
Profil ermittelt seine Querschnittswerte.
Klassenmodul Profil
- ConArray : PktA(...)
- ConArray : EleA(...)
InitSize()
Let : Pkt(i)
Get : Pkt(i)
Let : Ele(i)
Get : Ele(i)
A()
...
Dim PktA As New ConArray
’ Punkt Container
’ Fläche berechnen
Dim EleA As New ConArray
’ Element Container
Public Property Get A() As Double
Public Name As String
’ Profil-Bezeichnung
Dim Ele As Element
’ Initialisierung der Container
Dim i As Integer
Public Sub InitSize(pkt As Integer, ele As Integer)
A = 0#
PktA.SetSize (pkt)
For i = 1 To EleA.Count
EleA.SetSize (ele)
Set Ele = EleA.Item(i)
End Sub
If Not Ele Is Nothing Then
’ Element speichern
A = A + Ele.Lng * Ele.dicke
Public Property Let Ele(i As Integer, e As Element)
End If
EleA.Item(i) = e
Next
End Property
End Property
...
E. Baeck (Uni-DUE)
Objektorientiertes VBA
135 / 161
Beispiel DWN/Profile
Klassen einer DWN
Methoden der Profil-Klasse
Berechnung der Querschnittsfläche A ≈
n
P
Li · ti :
i=1
Public Property Get A() As Double
Dim Ele As Element
Dim i As Integer
A = 0#
For i = 1 To EleA.Count
Set Ele = EleA.Item(i)
If Not Ele Is Nothing Then
A = A + Ele.Lng * Ele.dicke
End If
Next
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
136 / 161
Beispiel DWN/Profile
Klassen einer DWN
Methoden der Profil-Klasse
Berechnung der Querschnittsfläche A ≈
n
P
Li · ti :
i=1
Public Property Get A() As Double
Dim Ele As Element
Dim i As Integer
A = 0#
For i = 1 To EleA.Count
Set Ele = EleA.Item(i)
If Not Ele Is Nothing Then
A = A + Ele.Lng * Ele.dicke
End If
Next
End Property
Es werden die Flächen aller Elemente aufsummiert. Wichtig ist, nicht
vorhandene Elemente zu überspringen. Referenzen nicht vorhandener
Elemente haben den Nothing Zeiger.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
136 / 161
Beispiel DWN/Profile
Klassen einer DWN
Methoden der Profil-Klasse
Berechnung der Querschnittsfläche A ≈
n
P
Li · ti :
i=1
Public Property Get A() As Double
Dim Ele As Element
Dim i As Integer
A = 0#
For i = 1 To EleA.Count
Set Ele = EleA.Item(i)
If Not Ele Is Nothing Then
A = A + Ele.Lng * Ele.dicke
End If
Next
End Property
Es werden die Flächen aller Elemente aufsummiert. Wichtig ist, nicht
vorhandene Elemente zu überspringen. Referenzen nicht vorhandener
Elemente haben den Nothing Zeiger.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
136 / 161
Beispiel DWN/Profile
Klassen einer DWN
Methoden der Profil-Klasse
Berechnung des Statischen Moments Sy ≈
n
P
zi · Li · ti :
i=1
Public Property Get S(I As Integer) As Double
Dim Ele As Element
Dim z As Double
Dim j As Integer: Dim k As Integer
k = I Mod 2 + 1
’ 1->2 | 2->1
S = 0#
For j = 1 To EleA.Count
Set Ele = EleA.Item(j)
If Not Ele Is Nothing Then
z = Ele.SPkt(k)
S = S + z * Ele.Lng * Ele.dicke
End If
Next
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
137 / 161
Beispiel DWN/Profile
Klassen einer DWN
Methoden der Profil-Klasse
Berechnung des Statischen Moments Sy ≈
n
P
zi · Li · ti :
i=1
Public Property Get S(I As Integer) As Double
Dim Ele As Element
Dim z As Double
Dim j As Integer: Dim k As Integer
k = I Mod 2 + 1
’ 1->2 | 2->1
S = 0#
For j = 1 To EleA.Count
Set Ele = EleA.Item(j)
If Not Ele Is Nothing Then
z = Ele.SPkt(k)
S = S + z * Ele.Lng * Ele.dicke
End If
Next
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
137 / 161
Beispiel DWN/Profile
Klassen einer DWN
Methoden der Profil-Klasse
Das Flächenträgheitsmoment Iy ≈
n
P
i=1
∆zi2 /12) + zi2 · Ai :
Public Property Get i(im As Integer) As Double
Dim Ele As Element: Dim dA As Double
Dim dLng(1 To 2) As Double: Dim dSPkt(1 To 2) As Double
Dim j As Integer: Dim k As Integer
i = 0#
For j = 1 To EleA.Count
Set Ele = EleA.Item(j)
If Not Ele Is Nothing Then
dLng(1) = Ele.delX(1): dLng(2) = Ele.delX(2)
’ projizierte Längen
dSPkt(1) = Ele.SPkt(1): dSPkt(2) = Ele.SPkt(2) ’ Schwerpunktkoordinaten
dA = Ele.Lng * Ele.dicke
’ Elementfläche
If im < 3 Then
k = im Mod 2 + 1
i = i + (dLng(k) ^ 2 / 12 + dSPkt(k) ^ 2) * dA
Else
i = i + (dLng(1) * dLng(2) / 12 + dSPkt(1) * dSPkt(2)) * dA
End If
End If
Next
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
138 / 161
Beispiel DWN/Profile
Klassen einer DWN
Methoden der Profil-Klasse
Das Flächenträgheitsmoment Iy ≈
n
P
i=1
∆zi2 /12) + zi2 · Ai :
Public Property Get i(im As Integer) As Double
Dim Ele As Element: Dim dA As Double
Dim dLng(1 To 2) As Double: Dim dSPkt(1 To 2) As Double
Dim j As Integer: Dim k As Integer
i = 0#
For j = 1 To EleA.Count
Set Ele = EleA.Item(j)
If Not Ele Is Nothing Then
dLng(1) = Ele.delX(1): dLng(2) = Ele.delX(2)
’ projizierte Längen
dSPkt(1) = Ele.SPkt(1): dSPkt(2) = Ele.SPkt(2) ’ Schwerpunktkoordinaten
dA = Ele.Lng * Ele.dicke
’ Elementfläche
If im < 3 Then
k = im Mod 2 + 1
i = i + (dLng(k) ^ 2 / 12 + dSPkt(k) ^ 2) * dA
Else
i = i + (dLng(1) * dLng(2) / 12 + dSPkt(1) * dSPkt(2)) * dA
End If
End If
Next
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
138 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse HProfil
Profil
HProfil wird von Profil abgeleitet.
Der Konstruktor initialisiert die Profil-Instanz.
HProfil
Profil : Prof
Klassenmodul HProfil
Dim Prof As New Profil
’ Basisklasse
E. Baeck (Uni-DUE)
Objektorientiertes VBA
139 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse HProfil
Profil
HProfil wird von Profil abgeleitet.
Der Konstruktor initialisiert die Profil-Instanz.
Die Profildaten werden parametrisiert erzeugt.
HProfil
Profil : Prof
Klassenmodul HProfil
Dim Prof As New Profil ’ Basisklasse
’ Konstruktor
Private Sub Class Initialize()
Call Prof.InitSize(7, 6)
End Sub
E. Baeck (Uni-DUE)
Objektorientiertes VBA
139 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse HProfil
Profil
HProfil wird von Profil abgeleitet.
Der Konstruktor initialisiert die Profil-Instanz.
Die Profildaten werden parametrisiert erzeugt.
Für die Profil-Methoden zur Berechnung der
Querschnittswerte wird ein Interface implementiert
(Wrapper).
HProfil
Profil : Prof
Create
Klassenmodul HProfil
Dim Prof As New Profil ’ Basisklasse
’ Konstruktor
Private Sub Class Initialize()
Call Prof.InitSize(7, 6)
End Sub
E. Baeck (Uni-DUE)
Objektorientiertes VBA
139 / 161
Beispiel DWN/Profile
Klassen einer DWN
Die Klasse HProfil
Profil
HProfil wird von Profil abgeleitet.
Der Konstruktor initialisiert die Profil-Instanz.
HProfil
Die Profildaten werden parametrisiert erzeugt.
Profil : Prof
Für die Profil-Methoden zur Berechnung der
Querschnittswerte wird ein Interface implementiert
(Wrapper).
Create
Get : p
Get : A
Get : S
Get : I
Klassenmodul HProfil
Dim Prof As New Profil ’ Basisklasse
’ Konstruktor
Private Sub Class Initialize()
Call Prof.InitSize(7, 6)
End Sub
’ Profil-Zeiger zurück geben
Public Property Get p() As Profil
Set p = Prof
End Property
E. Baeck (Uni-DUE)
’ Berechnen der Fläche
Public Property Get A() As Double
A = Prof.A
End Property
’ Berechnen des Statischen Momentes
Public Property Get S(I As Integer) As Double
S = Prof.S(I)
End Property
’ Berechnen des Flächenträgheitsmoments
Public Property Get I(j As Integer) As Double
I = Prof.I(j)
End Property
Objektorientiertes VBA
139 / 161
Beispiel DWN/Profile
Klassen einer DWN
Generierung der Geometriedaten in HProfil
Obergurt-Punktnummern 1,2,3
Stegmittelpunkt Punkt 4
E. Baeck (Uni-DUE)
Objektorientiertes VBA
140 / 161
Beispiel DWN/Profile
Klassen einer DWN
Generierung der Geometriedaten in HProfil
Obergurt-Punktnummern 1,2,3
Stegmittelpunkt Punkt 4
Untergurt Punktnummer 5,6,7
E. Baeck (Uni-DUE)
Objektorientiertes VBA
140 / 161
Beispiel DWN/Profile
Klassen einer DWN
Generierung der Geometriedaten in HProfil
Obergurt-Punktnummern 1,2,3
Stegmittelpunkt Punkt 4
Untergurt Punktnummer 5,6,7
Generierung des Knotenpunkts 1
E. Baeck (Uni-DUE)
Objektorientiertes VBA
140 / 161
Beispiel DWN/Profile
Klassen einer DWN
Generierung der Geometriedaten in HProfil
Obergurt-Punktnummern 1,2,3
Stegmittelpunkt Punkt 4
Untergurt Punktnummer 5,6,7
Generierung des Knotenpunkts 1
Generierung des Elements 1
E. Baeck (Uni-DUE)
Objektorientiertes VBA
’ Punkte erzeugen
’ h : Höhe / b: Breite
’ dt: Flanschdicke
hs = (h - dt) / 2#
bs = b / 2#
’ Erzeugen der Punkte
’ Obergurt
Set Pkt = New Punkt
Pkt.x(1) = -bs
Pkt.x(2) = hs
Prof.Pkt(1) = Pkt
140 / 161
Beispiel DWN/Profile
Klassen einer DWN
Generierung der Geometriedaten in HProfil
Obergurt-Punktnummern 1,2,3
Stegmittelpunkt Punkt 4
Untergurt Punktnummer 5,6,7
Generierung des Knotenpunkts 1
Generierung des Elements 1
E. Baeck (Uni-DUE)
Objektorientiertes VBA
’ Erzeugen der Elemente
’ - Obergurt Element 1
’
Punkte 1-2
’
Dicke dt
Set Ele = New Element
Ele.dicke = dt
Ele.Pkt(1) = Prof.Pkt(1)
Ele.Pkt(2) = Prof.Pkt(2)
Prof.Ele(1) = Ele
140 / 161
Beispiel DWN/Profile
Klassen einer DWN
Ein Sigma-Profil
Mit der Implementierung DWN können beliebige, dünnwandige
Profile berechnet werden.
Ein gebräuchliches nicht standardisiertes Profil ist das Sigma-Profil.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
141 / 161
Beispiel DWN/Profile
Klassen einer DWN
Ein Sigma-Profil
Mit der Implementierung DWN können beliebige, dünnwandige
Profile berechnet werden.
Ein gebräuchliches nicht standardisiertes Profil ist das Sigma-Profil.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
141 / 161
Container-Klassen
Container-Klassen
Arrays, Listen
Collections
E. Baeck (Uni-DUE)
Objektorientiertes VBA
142 / 161
Container-Klassen
Allgemeines
Was ist eine Container-Klasse?
Eine Klasse zur Speicherung von Informationen.
Eine CK hat automatisches Speichermanagement.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
143 / 161
Container-Klassen
Allgemeines
Was ist eine Container-Klasse?
Eine Klasse zur Speicherung von Informationen.
Eine CK hat automatisches Speichermanagement.
Die Implementierung der Datenverwaltung ist gekapselt.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
143 / 161
Container-Klassen
Allgemeines
Was ist eine Container-Klasse?
Eine Klasse zur Speicherung von Informationen.
Eine CK hat automatisches Speichermanagement.
Die Implementierung der Datenverwaltung ist gekapselt.
Methoden werden eingesetzt um
E. Baeck (Uni-DUE)
Objektorientiertes VBA
143 / 161
Container-Klassen
Allgemeines
Was ist eine Container-Klasse?
Eine Klasse zur Speicherung von Informationen.
Eine CK hat automatisches Speichermanagement.
Die Implementierung der Datenverwaltung ist gekapselt.
Methoden werden eingesetzt um
1
Daten in die CK zu speichern,
E. Baeck (Uni-DUE)
Objektorientiertes VBA
143 / 161
Container-Klassen
Allgemeines
Was ist eine Container-Klasse?
Eine Klasse zur Speicherung von Informationen.
Eine CK hat automatisches Speichermanagement.
Die Implementierung der Datenverwaltung ist gekapselt.
Methoden werden eingesetzt um
1
2
Daten in die CK zu speichern,
Daten aus der CK abzurufen,
E. Baeck (Uni-DUE)
Objektorientiertes VBA
143 / 161
Container-Klassen
Allgemeines
Was ist eine Container-Klasse?
Eine Klasse zur Speicherung von Informationen.
Eine CK hat automatisches Speichermanagement.
Die Implementierung der Datenverwaltung ist gekapselt.
Methoden werden eingesetzt um
1
2
3
Daten in die CK zu speichern,
Daten aus der CK abzurufen,
Daten aus der CK zu löschen,
E. Baeck (Uni-DUE)
Objektorientiertes VBA
143 / 161
Container-Klassen
Allgemeines
Was ist eine Container-Klasse?
Eine Klasse zur Speicherung von Informationen.
Eine CK hat automatisches Speichermanagement.
Die Implementierung der Datenverwaltung ist gekapselt.
Methoden werden eingesetzt um
1
2
3
4
Daten
Daten
Daten
Daten
in die CK zu speichern,
aus der CK abzurufen,
aus der CK zu löschen,
in der CK zu iterieren.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
143 / 161
Container-Klassen
Allgemeines
Was ist eine Container-Klasse?
Eine Klasse zur Speicherung von Informationen.
Eine CK hat automatisches Speichermanagement.
Die Implementierung der Datenverwaltung ist gekapselt.
Methoden werden eingesetzt um
1
2
3
4
Daten
Daten
Daten
Daten
in die CK zu speichern,
aus der CK abzurufen,
aus der CK zu löschen,
in der CK zu iterieren.
Der Typ der CK beeinflusst die Performance.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
143 / 161
Container-Klassen
Allgemeines
Was ist eine Container-Klasse?
Eine Klasse zur Speicherung von Informationen.
Eine CK hat automatisches Speichermanagement.
Die Implementierung der Datenverwaltung ist gekapselt.
Methoden werden eingesetzt um
1
2
3
4
Daten
Daten
Daten
Daten
in die CK zu speichern,
aus der CK abzurufen,
aus der CK zu löschen,
in der CK zu iterieren.
Der Typ der CK beeinflusst die Performance.
⇒ Vorsicht bei der Wahl des CK-Typs!
E. Baeck (Uni-DUE)
Objektorientiertes VBA
143 / 161
Container-Klassen
Allgemeines
Was ist eine Container-Klasse?
Eine Klasse zur Speicherung von Informationen.
Eine CK hat automatisches Speichermanagement.
Die Implementierung der Datenverwaltung ist gekapselt.
Methoden werden eingesetzt um
1
2
3
4
Daten
Daten
Daten
Daten
in die CK zu speichern,
aus der CK abzurufen,
aus der CK zu löschen,
in der CK zu iterieren.
Der Typ der CK beeinflusst die Performance.
⇒ Vorsicht bei der Wahl des CK-Typs!
E. Baeck (Uni-DUE)
Objektorientiertes VBA
143 / 161
Container-Klassen
Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
Zugriff über Indizierung.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
144 / 161
Container-Klassen
Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
1
1
Zugriff über Indizierung.
Kein Interface, keine Kapselung.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
144 / 161
Container-Klassen
Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
1
Zugriff über Indizierung.
2
2
Kein Interface, keine Kapselung.
Kein automatisches Speichermanagement (ReDim)
E. Baeck (Uni-DUE)
Objektorientiertes VBA
144 / 161
Container-Klassen
Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
1
Zugriff über Indizierung.
2
Kein Interface, keine Kapselung.
Kein automatisches Speichermanagement (ReDim)
Vosicht Indexfehler!
Ein Feld ist eine schnelle Lösung.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
Fehler
5
144 / 161
Container-Klassen
Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
1
Zugriff über Indizierung.
2
Kein Interface, keine Kapselung.
Kein automatisches Speichermanagement (ReDim)
Vosicht Indexfehler!
Ein Feld ist eine schnelle Lösung.
Fehler
5
Ein bessere Implementierung bietet ein Klassenmodul.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
144 / 161
Container-Klassen
Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
1
Zugriff über Indizierung.
2
Kein Interface, keine Kapselung.
Kein automatisches Speichermanagement (ReDim)
Vosicht Indexfehler!
Ein Feld ist eine schnelle Lösung.
Fehler
5
Ein bessere Implementierung bietet ein Klassenmodul.
Hierbei kann durch ein zusätzliche gekapselte Logik, ein
Speicherproblem vermieden werden.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
144 / 161
Container-Klassen
Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
1
Zugriff über Indizierung.
2
Kein Interface, keine Kapselung.
Kein automatisches Speichermanagement (ReDim)
Vosicht Indexfehler!
Ein Feld ist eine schnelle Lösung.
5
Fehler
5
Ein bessere Implementierung bietet ein Klassenmodul.
Hierbei kann durch ein zusätzliche gekapselte Logik, ein
Speicherproblem vermieden werden.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
144 / 161
Container-Klassen
Array-Container
Array-Container-Klasse und ihr Interface
Vorteil eines Array-Containers sind schnelle indizierte Zugriffe.
Nachteil ist das aufwendige Speicher-Managment bei Feldanpassungen.
AC ist ansprechbar über Methoden.
ArrayContainer
Count liefert den größten gelegten Index.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
145 / 161
Container-Klassen
Array-Container
Array-Container-Klasse und ihr Interface
Vorteil eines Array-Containers sind schnelle indizierte Zugriffe.
Nachteil ist das aufwendige Speicher-Managment bei Feldanpassungen.
AC ist ansprechbar über Methoden.
ArrayContainer
Count liefert den größten gelegten Index.
+Count
Mit SetAt wird ein Objekt gespeichert.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
145 / 161
Container-Klassen
Array-Container
Array-Container-Klasse und ihr Interface
Vorteil eines Array-Containers sind schnelle indizierte Zugriffe.
Nachteil ist das aufwendige Speicher-Managment bei Feldanpassungen.
AC ist ansprechbar über Methoden.
ArrayContainer
Count liefert den größten gelegten Index.
+Count
SetAt(i,Object)
Mit SetAt wird ein Objekt gespeichert.
Mit GetAt wird ein Objekt abgerufen.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
145 / 161
Container-Klassen
Array-Container
Array-Container-Klasse und ihr Interface
Vorteil eines Array-Containers sind schnelle indizierte Zugriffe.
Nachteil ist das aufwendige Speicher-Managment bei Feldanpassungen.
AC ist ansprechbar über Methoden.
ArrayContainer
Count liefert den größten gelegten Index.
+Count
Mit SetAt wird ein Objekt gespeichert.
SetAt(i,Object)
Object GetAt(i)
Mit GetAt wird ein Objekt abgerufen.
Mit InsertAt wird ein Objekt eingefügt.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
145 / 161
Container-Klassen
Array-Container
Array-Container-Klasse und ihr Interface
Vorteil eines Array-Containers sind schnelle indizierte Zugriffe.
Nachteil ist das aufwendige Speicher-Managment bei Feldanpassungen.
AC ist ansprechbar über Methoden.
ArrayContainer
Count liefert den größten gelegten Index.
Mit SetAt wird ein Objekt gespeichert.
Mit GetAt wird ein Objekt abgerufen.
+Count
SetAt(i,Object)
Object GetAt(i)
InsertAt(i,Object)
Mit InsertAt wird ein Objekt eingefügt.
Mit RemoveAt wird ein Objekt entfernt.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
145 / 161
Container-Klassen
Array-Container
Array-Container-Klasse und ihr Interface
Vorteil eines Array-Containers sind schnelle indizierte Zugriffe.
Nachteil ist das aufwendige Speicher-Managment bei Feldanpassungen.
AC ist ansprechbar über Methoden.
ArrayContainer
Count liefert den größten gelegten Index.
Mit SetAt wird ein Objekt gespeichert.
Mit GetAt wird ein Objekt abgerufen.
+Count
SetAt(i,Object)
Object GetAt(i)
InsertAt(i,Object)
RemoveAt(i)
Mit InsertAt wird ein Objekt eingefügt.
Mit RemoveAt wird ein Objekt entfernt.
Mit RemoveAll werden alle Objekte entfernt.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
145 / 161
Container-Klassen
Array-Container
Array-Container-Klasse und ihr Interface
Vorteil eines Array-Containers sind schnelle indizierte Zugriffe.
Nachteil ist das aufwendige Speicher-Managment bei Feldanpassungen.
AC ist ansprechbar über Methoden.
ArrayContainer
Count liefert den größten gelegten Index.
Mit SetAt wird ein Objekt gespeichert.
Mit GetAt wird ein Objekt abgerufen.
Mit InsertAt wird ein Objekt eingefügt.
+Count
SetAt(i,Object)
Object GetAt(i)
InsertAt(i,Object)
RemoveAt(i)
RemoveAll()
Mit RemoveAt wird ein Objekt entfernt.
Mit RemoveAll werden alle Objekte entfernt.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
145 / 161
Container-Klassen
Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
1
2
3
Kopie
1
2
3
E. Baeck (Uni-DUE)
Objektorientiertes VBA
146 / 161
Container-Klassen
Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewünschter Größe anlegen.
1
2
3
E. Baeck (Uni-DUE)
Objektorientiertes VBA
146 / 161
Container-Klassen
Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewünschter Größe anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
1
2
3
E. Baeck (Uni-DUE)
Objektorientiertes VBA
146 / 161
Container-Klassen
Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewünschter Größe anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu löschen.
1
2
3
Kopie
1
2
3
E. Baeck (Uni-DUE)
Objektorientiertes VBA
146 / 161
Container-Klassen
Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewünschter Größe anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu löschen.
1
2
3
E. Baeck (Uni-DUE)
Objektorientiertes VBA
146 / 161
Container-Klassen
Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewünschter Größe anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu löschen.
Das Anlegen (Allokieren) und Löschen (Deallokieren) des Speichers
defragmentiert den Hauptspeicher.
Hauptspeicher-Defragmentierung führt zu Performance-Einbrüchen.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
146 / 161
Container-Klassen
Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewünschter Größe anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu löschen.
Das Anlegen (Allokieren) und Löschen (Deallokieren) des Speichers
defragmentiert den Hauptspeicher.
Hauptspeicher-Defragmentierung führt zu Performance-Einbrüchen.
Wird die Instanz einer Array-Klasse in einer Anwendung mit kleinen
Zuwächsen hinreichend oft erweitert, kann sich die Anwendung
defacto aufhängen.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
146 / 161
Container-Klassen
Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewünschter Größe anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu löschen.
Das Anlegen (Allokieren) und Löschen (Deallokieren) des Speichers
defragmentiert den Hauptspeicher.
Hauptspeicher-Defragmentierung führt zu Performance-Einbrüchen.
Wird die Instanz einer Array-Klasse in einer Anwendung mit kleinen
Zuwächsen hinreichend oft erweitert, kann sich die Anwendung
defacto aufhängen.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
146 / 161
Container-Klassen
Array-Container
Entfernen von Objekten aus einer Array-Container-Instanz
Ein Objekt wird entfernt durch Aufrücken der nachfolgenden.
entfernen
1
2
3
E. Baeck (Uni-DUE)
4
5
6
Objektorientiertes VBA
147 / 161
Container-Klassen
Array-Container
Entfernen von Objekten aus einer Array-Container-Instanz
Ein Objekt wird entfernt durch Aufrücken der nachfolgenden.
4 umkopiert
1
2
4
E. Baeck (Uni-DUE)
4
5
6
Objektorientiertes VBA
147 / 161
Container-Klassen
Array-Container
Entfernen von Objekten aus einer Array-Container-Instanz
Ein Objekt wird entfernt durch Aufrücken der nachfolgenden.
5 umkopiert
1
2
4
E. Baeck (Uni-DUE)
5
5
6
Objektorientiertes VBA
147 / 161
Container-Klassen
Array-Container
Entfernen von Objekten aus einer Array-Container-Instanz
Ein Objekt wird entfernt durch Aufrücken der nachfolgenden.
Die freien Speicherplätze sind zu initialisieren.
6 umkopiert
1
2
4
E. Baeck (Uni-DUE)
5
6
6
Objektorientiertes VBA
147 / 161
Container-Klassen
Array-Container
Entfernen von Objekten aus einer Array-Container-Instanz
Ein Objekt wird entfernt durch Aufrücken der nachfolgenden.
Die freien Speicherplätze sind zu initialisieren.
freies Feld initialisieren
1
2
4
E. Baeck (Uni-DUE)
5
6
Objektorientiertes VBA
147 / 161
Container-Klassen
Array-Container
Aufbau eines Array-Containers
Der Feldspeicher wird as
Variant-Feld implementiert.
Der Konstruktor initialisiert
das Feld.
E. Baeck (Uni-DUE)
Dim obj() As Variant
’ Feld
Dim extend As Long
’ Erweiterung
’ Konstruktor
Private Sub Class Initialize()
extend = 1
ReDim obj(10 To 1)
End Sub
Objektorientiertes VBA
148 / 161
Container-Klassen
Array-Container
Aufbau eines Array-Containers
Der Feldspeicher wird as
Variant-Feld implementiert.
Der Konstruktor initialisiert
das Feld.
Dim obj() As Variant
’ Feld
Dim extend As Long
’ Erweiterung
’ Konstruktor
Private Sub Class Initialize()
extend = 1
ReDim obj(10 To 1)
End Sub
’ Übernehmen einer Objekt-Referenz
Public Property Let data(i As Integer, d As Variant)
Dim objS() As Variant
Die Property data erweitert
das Feld.
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
148 / 161
Container-Klassen
Array-Container
Aufbau eines Array-Containers
Der Feldspeicher wird as
Variant-Feld implementiert.
Der Konstruktor initialisiert
das Feld.
Die Property data erweitert
das Feld.
Hierbei ist der alte
Datenbestand zu sicher.
Dim obj() As Variant
’ Feld
Dim extend As Long
’ Erweiterung
’ Konstruktor
Private Sub Class Initialize()
extend = 1
ReDim obj(10 To 1)
End Sub
’ Übernehmen einer Objekt-Referenz
Public Property Let data(i As Integer, d As Variant)
Dim objS() As Variant
If i < LBound(obj) Then Exit Property
If i > UBound(obj) Then
’ alte Einträge sichern
ReDim objS(1 To UBound(obj))
For j = 1 To UBound(obj)
objS(j) = obj(j)
Next
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
148 / 161
Container-Klassen
Array-Container
Aufbau eines Array-Containers
Der Feldspeicher wird as
Variant-Feld implementiert.
Der Konstruktor initialisiert
das Feld.
Die Property data erweitert
das Feld.
Hierbei ist der alte
Datenbestand zu sicher.
Nach Neudimensionierung des
Feldes wird der gesicherte
Datenbestand zurück in das
neue Feld kopiert.
Dim obj() As Variant
’ Feld
Dim extend As Long
’ Erweiterung
’ Konstruktor
Private Sub Class Initialize()
extend = 1
ReDim obj(10 To 1)
End Sub
’ Übernehmen einer Objekt-Referenz
Public Property Let data(i As Integer, d As Variant)
Dim objS() As Variant
If i < LBound(obj) Then Exit Property
If i > UBound(obj) Then
’ alte Einträge sichern
ReDim objS(1 To UBound(obj))
For j = 1 To UBound(obj)
objS(j) = obj(j)
Next
’ neue Größe berechnen
nNew = (i \ extend + 1) * extend
’ Speicher erweitern
ReDim obj(1 To nNew)
’ alte Einträge zurückspeichern
For j = 1 To UBound(objS)
obj(j) = objS(j)
Next
End If
End Property
E. Baeck (Uni-DUE)
Objektorientiertes VBA
148 / 161
Container-Klassen
Array-Container
Aufbau eines Array-Containers
Der Feldspeicher wird as
Variant-Feld implementiert.
Der Konstruktor initialisiert
das Feld.
Die Property data erweitert
das Feld.
Hierbei ist der alte
Datenbestand zu sicher.
Nach Neudimensionierung des
Feldes wird der gesicherte
Datenbestand zurück in das
neue Feld kopiert.
Übernahme der Daten.
E. Baeck (Uni-DUE)
Dim obj() As Variant
’ Feld
Dim extend As Long
’ Erweiterung
’ Konstruktor
Private Sub Class Initialize()
extend = 1
ReDim obj(10 To 1)
End Sub
’ Übernehmen einer Objekt-Referenz
Public Property Let data(i As Integer, d As Variant)
Dim objS() As Variant
If i < LBound(obj) Then Exit Property
If i > UBound(obj) Then
’ alte Einträge sichern
ReDim objS(1 To UBound(obj))
For j = 1 To UBound(obj)
objS(j) = obj(j)
Next
’ neue Größe berechnen
nNew = (i \ extend + 1) * extend
’ Speicher erweitern
ReDim obj(1 To nNew)
’ alte Einträge zurückspeichern
For j = 1 To UBound(objS)
obj(j) = objS(j)
Next
End If
obj(i) = d
End Property
Objektorientiertes VBA
148 / 161
Container-Klassen
Array-Container
Aufbau eines Array-Containers
Der Feldspeicher wird as
Variant-Feld implementiert.
Der Konstruktor initialisiert
das Feld.
Die Property data erweitert
das Feld.
Hierbei ist der alte
Datenbestand zu sicher.
Nach Neudimensionierung des
Feldes wird der gesicherte
Datenbestand zurück in das
neue Feld kopiert.
Übernahme der Daten.
E. Baeck (Uni-DUE)
Dim obj() As Variant
’ Feld
Dim extend As Long
’ Erweiterung
’ Konstruktor
Private Sub Class Initialize()
extend = 1
ReDim obj(10 To 1)
End Sub
’ Übernehmen einer Objekt-Referenz
Public Property Let data(i As Integer, d As Variant)
Dim objS() As Variant
If i < LBound(obj) Then Exit Property
If i > UBound(obj) Then
’ alte Einträge sichern
ReDim objS(1 To UBound(obj))
For j = 1 To UBound(obj)
objS(j) = obj(j)
Next
’ neue Größe berechnen
nNew = (i \ extend + 1) * extend
’ Speicher erweitern
ReDim obj(1 To nNew)
’ alte Einträge zurückspeichern
For j = 1 To UBound(objS)
obj(j) = objS(j)
Next
End If
obj(i) = d
End Property
Objektorientiertes VBA
148 / 161
Container-Klassen
List-Container
Ein List-Container, einfach verkettet
Einfachste Implementierung eines LCs ist die einfach verkettete Liste.
Die Liste besteht aus einer Kette von Knoten.
Kopf
E. Baeck (Uni-DUE)
Knoten 1
Knoten 2
Objektorientiertes VBA
Knoten 3
149 / 161
Container-Klassen
List-Container
Ein List-Container, einfach verkettet
Einfachste Implementierung eines LCs ist die einfach verkettete Liste.
Die Liste besteht aus einer Kette von Knoten.
Eine einfach Verkettete Liste ist eine rekursive Datenstruktur.
Kopf
E. Baeck (Uni-DUE)
Knoten 1
Knoten 2
Objektorientiertes VBA
Knoten 3
149 / 161
Container-Klassen
List-Container
Ein List-Container, einfach verkettet
Einfachste Implementierung eines LCs ist die einfach verkettete Liste.
Die Liste besteht aus einer Kette von Knoten.
Eine einfach Verkettete Liste ist eine rekursive Datenstruktur.
Ein Knoten besteht aus einem Daten- und einem Adresselement.
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Knoten
Knoten: next
Objektorientiertes VBA
Knoten
Knoten: next
149 / 161
Container-Klassen
List-Container
Ein List-Container, einfach verkettet
Einfachste Implementierung eines LCs ist die einfach verkettete Liste.
Die Liste besteht aus einer Kette von Knoten.
Eine einfach Verkettete Liste ist eine rekursive Datenstruktur.
Ein Knoten besteht aus einem Daten- und einem Adresselement.
Das Datenelement enthält Daten oder die Adresse der Daten.
Knoten
Knoten
Knoten: next
Daten: data
Knoten: next
Daten: data
Daten
E. Baeck (Uni-DUE)
Objektorientiertes VBA
149 / 161
Container-Klassen
List-Container
Ein List-Container, einfach verkettet
Einfachste Implementierung eines LCs ist die einfach verkettete Liste.
Die Liste besteht aus einer Kette von Knoten.
Eine einfach Verkettete Liste ist eine rekursive Datenstruktur.
Ein Knoten besteht aus einem Daten- und einem Adresselement.
Das Datenelement enthält Daten oder die Adresse der Daten.
Das Adresselement verweist auf den nächsten Knoten der Kette.
Knoten
Knoten
Knoten: next
Daten: data
Knoten: next
Daten: data
Daten
E. Baeck (Uni-DUE)
Objektorientiertes VBA
149 / 161
Container-Klassen
List-Container
Ein List-Container, einfach verkettet
Einfachste Implementierung eines LCs ist die einfach verkettete Liste.
Die Liste besteht aus einer Kette von Knoten.
Eine einfach Verkettete Liste ist eine rekursive Datenstruktur.
Ein Knoten besteht aus einem Daten- und einem Adresselement.
Das Datenelement enthält Daten oder die Adresse der Daten.
Das Adresselement verweist auf den nächsten Knoten der Kette.
Knoten
Knoten
Knoten: next
Daten: data
Knoten: next
Daten: data
Daten
E. Baeck (Uni-DUE)
Objektorientiertes VBA
149 / 161
Container-Klassen
List-Container
Einfügen eines neuen Knotens in die Liste
Das Einfügen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Knoten Einfügen
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Knoten
Knoten: next
Objektorientiertes VBA
Knoten
Knoten: next
150 / 161
Container-Klassen
List-Container
Einfügen eines neuen Knotens in die Liste
Das Einfügen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Knoten Einfügen
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Knoten
Knoten: next
Objektorientiertes VBA
Knoten
Knoten: next
150 / 161
Container-Klassen
List-Container
Einfügen eines neuen Knotens in die Liste
Das Einfügen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Anpassen der Listen-Zeiger (Knoten einhängen).
Knoten Einfügen
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Objektorientiertes VBA
150 / 161
Container-Klassen
List-Container
Einfügen eines neuen Knotens in die Liste
Das Einfügen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Anpassen der Listen-Zeiger (Knoten einhängen).
Zunächst Zeiger von neuem Knoten auf Nachfolger setzen.
Knoten Einfügen
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Objektorientiertes VBA
150 / 161
Container-Klassen
List-Container
Einfügen eines neuen Knotens in die Liste
Das Einfügen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Anpassen der Listen-Zeiger (Knoten einhängen).
Zunächst Zeiger von neuem Knoten auf Nachfolger setzen.
Dann Zeiger von Vorgänger auf neuen Knoten Setzen
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Objektorientiertes VBA
150 / 161
Container-Klassen
List-Container
Einfügen eines neuen Knotens in die Liste
Das Einfügen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Anpassen der Listen-Zeiger (Knoten einhängen).
Zunächst Zeiger von neuem Knoten auf Nachfolger setzen.
Dann Zeiger von Vorgänger auf neuen Knoten Setzen
Damit wird der alte Zeiger überschrieben.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Objektorientiertes VBA
150 / 161
Container-Klassen
List-Container
Einfügen eines neuen Knotens in die Liste
Das Einfügen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Anpassen der Listen-Zeiger (Knoten einhängen).
Zunächst Zeiger von neuem Knoten auf Nachfolger setzen.
Dann Zeiger von Vorgänger auf neuen Knoten Setzen
Damit wird der alte Zeiger überschrieben.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Objektorientiertes VBA
150 / 161
Container-Klassen
List-Container
Löschen eines Knotens aus der Liste
Das Entfernen des Knotens ist wie das Einfügen relativ einfach.
Vorgänger-Zeiger auf den Nachfolger-Knoten setzen.
Knoten Entfernen
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Knoten
Knoten: next
Objektorientiertes VBA
Knoten
Knoten: next
151 / 161
Container-Klassen
List-Container
Löschen eines Knotens aus der Liste
Das Entfernen des Knotens ist wie das Einfügen relativ einfach.
Vorgänger-Zeiger auf den Nachfolger-Knoten setzen.
Falls erforderlich, zu löschende Instanz explizit deallokieren.
Knoten Entfernen
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Knoten
Knoten: next
Objektorientiertes VBA
Knoten
Knoten: next
151 / 161
Container-Klassen
List-Container
Löschen eines Knotens aus der Liste
Das Entfernen des Knotens ist wie das Einfügen relativ einfach.
Vorgänger-Zeiger auf den Nachfolger-Knoten setzen.
Falls erforderlich, zu löschende Instanz explizit deallokieren.
VORSICHT: Falls der Container nicht mehr benötigt wird, sind die
Knoten explizit mit Zuweisung von Nothing zu entfernen.
Bei umfangreichen Listen entsteht sonst ein Speichermangel und
EXCEL hängt sich auf.
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Knoten
Knoten: next
Objektorientiertes VBA
Knoten
Knoten: next
151 / 161
Container-Klassen
List-Container
Löschen eines Knotens aus der Liste
Das Entfernen des Knotens ist wie das Einfügen relativ einfach.
Vorgänger-Zeiger auf den Nachfolger-Knoten setzen.
Falls erforderlich, zu löschende Instanz explizit deallokieren.
VORSICHT: Falls der Container nicht mehr benötigt wird, sind die
Knoten explizit mit Zuweisung von Nothing zu entfernen.
Bei umfangreichen Listen entsteht sonst ein Speichermangel und
EXCEL hängt sich auf.
Knoten
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Knoten: next
Objektorientiertes VBA
151 / 161
Container-Klassen
List-Container
Aufbau einer Liste mit Knoten-Klasse
Der Knoten-Klassenmodul Node besteht aus 2 public Attributen.
Der Zeiger nextNode zeigt auf die nächste Knoten-Instanz.
Node
+Node: nextNode
+Variant: data
E. Baeck (Uni-DUE)
Objektorientiertes VBA
152 / 161
Container-Klassen
List-Container
Aufbau einer Liste mit Knoten-Klasse
Der Knoten-Klassenmodul Node besteht aus 2 public Attributen.
Der Zeiger nextNode zeigt auf die nächste Knoten-Instanz.
Die Daten werden in einer Variant-Variablen abgelegt.
Public nextNode As Node
Public data As Variant
E. Baeck (Uni-DUE)
Objektorientiertes VBA
152 / 161
Container-Klassen
List-Container
Aufbau einer Liste mit Knoten-Klasse
Der Knoten-Klassenmodul Node besteht aus 2 public Attributen.
Der Zeiger nextNode zeigt auf die nächste Knoten-Instanz.
Die Daten werden in einer Variant-Variablen abgelegt.
ListAufbau erzeugt eine Liste in einer for-Schleife.
Der Schleifenindex wird als Datenobjekt übernommen.
Public nextNode As Node
Public data As Variant
E. Baeck (Uni-DUE)
Objektorientiertes VBA
152 / 161
Container-Klassen
List-Container
Aufbau einer Liste mit Knoten-Klasse
Der Knoten-Klassenmodul Node besteht aus 2 public Attributen.
Der Zeiger nextNode zeigt auf die nächste Knoten-Instanz.
Die Daten werden in einer Variant-Variablen abgelegt.
ListAufbau erzeugt eine Liste in einer for-Schleife.
Der Schleifenindex wird als Datenobjekt übernommen.
Sub ListAufbau()
Dim nHead As New Node
Dim nPos As Node
Dim nNext As Node
’ Startknoten
’ aktueller Knoten
’ nächster Knoten
Set nPos = nHead
’ Initialisierung
For i = 1 To 4
’ neuen Knoten erzeugen
Set nNext = New Node
Set nPos.nextNode = nNext
’ Daten zuweisen
nPos.data = i
’ Zeiger weiter setzen
Set nPos = nNext
Next
End Sub
E. Baeck (Uni-DUE)
Objektorientiertes VBA
152 / 161
Container-Klassen
List-Container
Deallokieren des List-Containers
Einfache Tests zeigen, dass EXCEL beim Verlassen des Programms
nicht in der Lage ist, alle erzeugten Knoten zu löschen. Ein
Memory-Fehler wird angezeigt und EXCEL ist neu zu starten.
Werden die Knoten entfernt, gibt es keine Probleme.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
153 / 161
Container-Klassen
List-Container
Deallokieren des List-Containers
Einfache Tests zeigen, dass EXCEL beim Verlassen des Programms
nicht in der Lage ist, alle erzeugten Knoten zu löschen. Ein
Memory-Fehler wird angezeigt und EXCEL ist neu zu starten.
Werden die Knoten entfernt, gibt es keine Probleme.
Das Löschen der Knoten beginnt beim ersten Knoten (Head).
E. Baeck (Uni-DUE)
Objektorientiertes VBA
153 / 161
Container-Klassen
List-Container
Deallokieren des List-Containers
Einfache Tests zeigen, dass EXCEL beim Verlassen des Programms
nicht in der Lage ist, alle erzeugten Knoten zu löschen. Ein
Memory-Fehler wird angezeigt und EXCEL ist neu zu starten.
Werden die Knoten entfernt, gibt es keine Probleme.
Das Löschen der Knoten beginnt beim ersten Knoten (Head).
Der Nachfolger wird so der neue Head-Knoten.
Head
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Knoten
Knoten: next
Objektorientiertes VBA
Knoten
Knoten: next
153 / 161
Container-Klassen
List-Container
Deallokieren des List-Containers
Einfache Tests zeigen, dass EXCEL beim Verlassen des Programms
nicht in der Lage ist, alle erzeugten Knoten zu löschen. Ein
Memory-Fehler wird angezeigt und EXCEL ist neu zu starten.
Werden die Knoten entfernt, gibt es keine Probleme.
Das Löschen der Knoten beginnt beim ersten Knoten (Head).
Der Nachfolger wird so der neue Head-Knoten.
Dies erfolgt solange, bis der Nachfolger auf Nothing verweist.
Head
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Knoten
Knoten: next
Objektorientiertes VBA
Knoten
Knoten: next
153 / 161
Container-Klassen
List-Container
Deallokieren des List-Containers
Einfache Tests zeigen, dass EXCEL beim Verlassen des Programms
nicht in der Lage ist, alle erzeugten Knoten zu löschen. Ein
Memory-Fehler wird angezeigt und EXCEL ist neu zu starten.
Werden die Knoten entfernt, gibt es keine Probleme.
Das Löschen der Knoten beginnt beim ersten Knoten (Head).
Der Nachfolger wird so der neue Head-Knoten.
Dies erfolgt solange, bis der Nachfolger auf Nothing verweist.
Head
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Knoten
Knoten: next
Objektorientiertes VBA
Knoten
Knoten: next
153 / 161
Container-Klassen
List-Container
Deallokieren des List-Containers
Einfache Tests zeigen, dass EXCEL beim Verlassen des Programms
nicht in der Lage ist, alle erzeugten Knoten zu löschen. Ein
Memory-Fehler wird angezeigt und EXCEL ist neu zu starten.
Werden die Knoten entfernt, gibt es keine Probleme.
Das Löschen der Knoten beginnt beim ersten Knoten (Head).
Der Nachfolger wird so der neue Head-Knoten.
Dies erfolgt solange, bis der Nachfolger auf Nothing verweist.
Head
Knoten
Knoten: next
E. Baeck (Uni-DUE)
Nothing
Knoten
Knoten: next
Objektorientiertes VBA
Knoten
Knoten: next
153 / 161
Container-Klassen
Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten unter
einem Schlüssel (ein beliebiger String).
Hash-Funktion bildet Schlüssel auf Index-Wert ab.
IPB 120 :
Profildaten
E. Baeck (Uni-DUE)
I 100 :
Profildaten
Objektorientiertes VBA
L 50x5 :
Profildaten
154 / 161
Container-Klassen
Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten unter
einem Schlüssel (ein beliebiger String).
Hash-Funktion bildet Schlüssel auf Index-Wert ab.
Kollision, falls mehrere Schlüssel den selben Index erhalten.
E. Baeck (Uni-DUE)
hash: 2
hash: 7
hash: 5
IPB 120 :
Profildaten
I 100 :
Profildaten
L 50x5 :
Profildaten
Objektorientiertes VBA
154 / 161
Container-Klassen
Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten unter
einem Schlüssel (ein beliebiger String).
Hash-Funktion bildet Schlüssel auf Index-Wert ab.
Kollision, falls mehrere Schlüssel den selben Index erhalten.
Daten mit selbem Index werden oft in Listen (Buckets) abgelegt.
hash: 2
hash: 7
hash: 5
IPB 120 :
Profildaten
I 100 :
Profildaten
L 50x5 :
Profildaten
E. Baeck (Uni-DUE)
Objektorientiertes VBA
L 60x5 :
Profildaten
154 / 161
Container-Klassen
Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten unter
einem Schlüssel (ein beliebiger String).
Hash-Funktion bildet Schlüssel auf Index-Wert ab.
Kollision, falls mehrere Schlüssel den selben Index erhalten.
Daten mit selbem Index werden oft in Listen (Buckets) abgelegt.
Durch die Reduktion der Listenlänge reduziert sich der Suchaufwand.
Anfrage mit
Schlüssel
HashGenerator
hash: 2
hash: 7
hash: 5
IPB 120 :
Profildaten
I 100 :
Profildaten
L 50x5 :
Profildaten
L 60x5 :
Profildaten
E. Baeck (Uni-DUE)
Objektorientiertes VBA
154 / 161
Container-Klassen
Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten unter
einem Schlüssel (ein beliebiger String).
Hash-Funktion bildet Schlüssel auf Index-Wert ab.
Kollision, falls mehrere Schlüssel den selben Index erhalten.
Daten mit selbem Index werden oft in Listen (Buckets) abgelegt.
Durch die Reduktion der Listenlänge reduziert sich der Suchaufwand.
Prinzipiell kann eine Collection als Liste entarten.
Anfrage mit
Schlüssel
HashGenerator
hash: 2
hash: 7
hash: 5
IPB 120 :
Profildaten
I 100 :
Profildaten
L 50x5 :
Profildaten
Listenlänge = 2 anstatt 4
L 60x5 :
Profildaten
E. Baeck (Uni-DUE)
Objektorientiertes VBA
154 / 161
Container-Klassen
Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten unter
einem Schlüssel (ein beliebiger String).
Hash-Funktion bildet Schlüssel auf Index-Wert ab.
Kollision, falls mehrere Schlüssel den selben Index erhalten.
Daten mit selbem Index werden oft in Listen (Buckets) abgelegt.
Durch die Reduktion der Listenlänge reduziert sich der Suchaufwand.
Prinzipiell kann eine Collection als Liste entarten.
MD5-Hash codiert Passworte in 128Bit.
Anfrage mit
Schlüssel
HashGenerator
hash: 2
Listenlänge = 4
IPB 120 :
Profildaten
E. Baeck (Uni-DUE)
I 100 :
Profildaten
Objektorientiertes VBA
L 50x5 :
Profildaten
L 60x5 :
Profildaten
154 / 161
Container-Klassen
Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten unter
einem Schlüssel (ein beliebiger String).
Hash-Funktion bildet Schlüssel auf Index-Wert ab.
Kollision, falls mehrere Schlüssel den selben Index erhalten.
Daten mit selbem Index werden oft in Listen (Buckets) abgelegt.
Durch die Reduktion der Listenlänge reduziert sich der Suchaufwand.
Prinzipiell kann eine Collection als Liste entarten.
MD5-Hash codiert Passworte in 128Bit.
Kollisionen werden gesucht, um Passworte zu hacken.
md5("Franz jagt im komplett verwahrlosten Taxi quer durch Bayern") =
a3cca2b2aa1e3b5b3b5aad99a8529074
md5("Frank jagt im komplett verwahrlosten Taxi quer durch Bayern") =
7e716d0e702df0505fc72e2b89467910
E. Baeck (Uni-DUE)
Objektorientiertes VBA
154 / 161
Container-Klassen
Collection-Container
Der VBA Build-In Container Collection
VBA bietet eine Map genannt Collection.
Die Collection ist ein VBA-Klassenmodul.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
155 / 161
Container-Klassen
Collection-Container
Der VBA Build-In Container Collection
VBA bietet eine Map genannt Collection.
Die Collection ist ein VBA-Klassenmodul.
Count liefert die Anzahl der Datensätze.
Collection
integer: Count
Add(..)
Item(..)
Remove(..)
E. Baeck (Uni-DUE)
Objektorientiertes VBA
155 / 161
Container-Klassen
Collection-Container
Der VBA Build-In Container Collection
VBA bietet eine Map genannt Collection.
Die Collection ist ein VBA-Klassenmodul.
Count liefert die Anzahl der Datensätze.
Add übernimmt einen Datensätze mit bzw. ohne Schlüssel.
Sub testCollection()
Dim Liste As New Collection
Dim Pkt As Punkt
’ Aufbau der Liste
For i = 1 To 10
Set Pkt = New Punkt
Call Liste.Add(Pkt)
Next
’ Datensäte prüfen
n = Liste.Count
End Sub
E. Baeck (Uni-DUE)
Nach Listenaufbau wird die Anzahl der
gespeicherten Datensätze mit Count ermittelt.
Objektorientiertes VBA
155 / 161
Container-Klassen
Collection-Container
Der VBA Build-In Container Collection
VBA bietet eine Map genannt Collection.
Die Collection ist ein VBA-Klassenmodul.
Count liefert die Anzahl der Datensätze.
Add übernimmt einen Datensätze mit bzw. ohne Schlüssel.
Item liest einen Datensatz (mit Index oder Schlüssel)
Sub testCollection()
Dim Liste As New Collection
Dim Pkt As Punkt
’ Aufbau der Liste
For i = 1 To 10
Set Pkt = New Punkt
Call Liste.Add(Pkt)
Next
’ Datensäte prüfen
n = Liste.Count
End Sub
E. Baeck (Uni-DUE)
Hier wird mit Add ein Datensatz ohne
Schlüssel in die Collection übernommen.
Objektorientiertes VBA
155 / 161
Container-Klassen
Collection-Container
Der VBA Build-In Container Collection
VBA bietet eine Map genannt Collection.
Die Collection ist ein VBA-Klassenmodul.
Count liefert die Anzahl der Datensätze.
Add übernimmt einen Datensätze mit bzw. ohne Schlüssel.
Item liest einen Datensatz (mit Index oder Schlüssel)
Remove entfernt einen Datensatz (mit Index oder Schlüssel)
Dim Liste As New Collection
Dim Pkt As Punkt
’ Aufbau der Liste
For i = 1 To 10
Set Pkt = New Punkt
Pkt.farbe = i
Call Liste.Add(Pkt, "Punkt " & i)
Next
’ Punkt 3 aus Liste holen
Set Pkt = Liste.Item("Punkt 3")
Set Pkt = Liste.Item(3)
E. Baeck (Uni-DUE)
Mit Add werden 10 Punkt Instanzen in die
Liste aufgenommen. Schlüssel ist Punkt
”
[Nr]“. In einem zweiten Schritt wird die
Instanz des 3. Punktes mit der Methode Item
aus der Liste geholt. Item arbeite mit Index
und Schlüssel.
Objektorientiertes VBA
155 / 161
Container-Klassen
Collection-Container
Der VBA Build-In Container Collection
VBA bietet eine Map genannt Collection.
Die Collection ist ein VBA-Klassenmodul.
Count liefert die Anzahl der Datensätze.
Add übernimmt einen Datensätze mit bzw. ohne Schlüssel.
Item liest einen Datensatz (mit Index oder Schlüssel)
Remove entfernt einen Datensatz (mit Index oder Schlüssel)
Sub CreateAndDeleteCollection()
Dim Liste As New Collection
Dim Pkt As Punkt
’ Aufbau der Liste
...
’ Datensäte prüfen
n = Liste.Count
’ Löschen einer Collection
For i = 1 To n
Set Pkt = Liste(1)
Set Pkt = Nothing
Liste.Remove (1)
Next
Set Liste = Nothing
End Sub
E. Baeck (Uni-DUE)
Das Löschen des Container-Inhalts erfolgt hier
durch fortlaufendes Löschen des ersten
Datensatzes bis alle Datensätze entfernt sind.
Prinzip des Zigarettenautomaten =
Entnehmen bis leer. Es ist darauf zu achten,
dass nicht nur der Container-Verweis sondern
auch die gespeicherte Instanz selbst gelöscht
wird. Im letzten Schritt wird der Container
selbst gelöscht.
Objektorientiertes VBA
155 / 161
Container-Klassen
Collection-Container
Aufbau und Löschen einer Liste/Collection
Aufbau einer Liste mit Datenelementen.
Es wird ein neuer Knoten erzeugt,
das Datenobjekt wird erzeugt und der Zeiger gesetzt.
Knoten
Knoten: next
Daten: data
E. Baeck (Uni-DUE)
Objektorientiertes VBA
156 / 161
Container-Klassen
Collection-Container
Aufbau und Löschen einer Liste/Collection
Aufbau einer Liste mit Datenelementen.
Es wird ein neuer Knoten erzeugt,
das Datenobjekt wird erzeugt und der Zeiger gesetzt.
Knoten
Knoten: next
Daten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE)
Objektorientiertes VBA
156 / 161
Container-Klassen
Collection-Container
Aufbau und Löschen einer Liste/Collection
Aufbau einer Liste mit Datenelementen.
Es wird ein neuer Knoten erzeugt,
das Datenobjekt wird erzeugt und der Zeiger gesetzt.
Knoten
Knoten
Knoten: next
Daten: data
Knoten: next
Daten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE)
Objektorientiertes VBA
156 / 161
Container-Klassen
Collection-Container
Aufbau und Löschen einer Liste/Collection
Aufbau einer Liste mit Datenelementen.
Es wird ein neuer Knoten erzeugt,
das Datenobjekt wird erzeugt und der Zeiger gesetzt.
Knoten
Knoten
Knoten: next
Daten: data
Knoten: next
Daten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE)
Daten
Datensatz 2
Objektorientiertes VBA
156 / 161
Container-Klassen
Collection-Container
Aufbau und Löschen einer Liste/Collection
Aufbau einer Liste mit Datenelementen.
Es wird ein neuer Knoten erzeugt,
das Datenobjekt wird erzeugt und der Zeiger gesetzt.
Knoten
Knoten
Knoten: next
Daten: data
Knoten
Knoten: next
Daten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE)
Knoten: next
Daten: data
Daten
Datensatz 2
Objektorientiertes VBA
156 / 161
Container-Klassen
Collection-Container
Aufbau und Löschen einer Liste/Collection
Aufbau einer Liste mit Datenelementen.
Es wird ein neuer Knoten erzeugt,
das Datenobjekt wird erzeugt und der Zeiger gesetzt.
Knoten
Knoten
Knoten: next
Daten: data
Knoten
Knoten: next
Daten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE)
Knoten: next
Daten: data
Daten
Datensatz 2
Objektorientiertes VBA
Daten
Datensatz 3
156 / 161
Container-Klassen
Collection-Container
Aufbau und Löschen einer Liste/Collection
Das Löschen einer Liste erfordert das Löschen Daten-Instanzen
und das Löschen der Knoten-Instanzen.
Knoten
Knoten
Knoten: next
Daten: data
Knoten
Knoten: next
Daten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE)
Knoten: next
Daten: data
Daten
Datensatz 2
Objektorientiertes VBA
Daten
Datensatz 3
156 / 161
Container-Klassen
Collection-Container
Aufbau und Löschen einer Liste/Collection
Das Löschen einer Liste erfordert das Löschen Daten-Instanzen
und das Löschen der Knoten-Instanzen.
Knoten
Knoten
Knoten: next
Daten: data
Knoten
Knoten: next
Daten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE)
Knoten: next
Daten: data
Daten
Datensatz 2
Objektorientiertes VBA
Daten
Datensatz 3
156 / 161
Container-Klassen
Collection-Container
Aufbau und Löschen einer Liste/Collection
Das Löschen einer Liste erfordert das Löschen Daten-Instanzen
und das Löschen der Knoten-Instanzen.
Knoten
Knoten
Knoten: next
Daten: data
Knoten
Knoten: next
Daten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE)
Knoten: next
Daten: data
Daten
Datensatz 2
Objektorientiertes VBA
Daten
Datensatz 3
156 / 161
Container-Klassen
Collection-Container
Aufbau und Löschen einer Liste/Collection
Das Löschen einer Liste erfordert das Löschen Daten-Instanzen
und das Löschen der Knoten-Instanzen.
Knoten
Knoten
Knoten: next
Daten: data
Knoten
Knoten: next
Daten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE)
Knoten: next
Daten: data
Daten
Datensatz 2
Objektorientiertes VBA
Daten
Datensatz 3
156 / 161
Container-Klassen
Collection-Container
Aufbau und Löschen einer Liste/Collection
Das Löschen einer Liste erfordert das Löschen Daten-Instanzen
und das Löschen der Knoten-Instanzen.
Knoten
Knoten
Knoten: next
Daten: data
Knoten
Knoten: next
Daten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE)
Knoten: next
Daten: data
Daten
Datensatz 2
Objektorientiertes VBA
Daten
Datensatz 3
156 / 161
Container-Klassen
Collection-Container
Aufbau und Löschen einer Liste/Collection
Das Löschen einer Liste erfordert das Löschen Daten-Instanzen
und das Löschen der Knoten-Instanzen.
Knoten
Knoten
Knoten: next
Daten: data
Knoten
Knoten: next
Daten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE)
Knoten: next
Daten: data
Daten
Datensatz 2
Objektorientiertes VBA
Daten
Datensatz 3
156 / 161
Container-Klassen
Performance
Allgemeines zur Performance-Analyse
Bei der Performance-Analyse der Container-Klassen sind die
Speicheralgorithmen und die Performance der Datenstrukturen zu
messen.
Es ist darauf zu achten, dass Zeiten, die mit den zu analysierenden
Eigenschaften nichts zu tun haben, vernachlässigt werden können
(z.B. Programmladezeiten).
E. Baeck (Uni-DUE)
Objektorientiertes VBA
157 / 161
Container-Klassen
Performance
Allgemeines zur Performance-Analyse
Bei der Performance-Analyse der Container-Klassen sind die
Speicheralgorithmen und die Performance der Datenstrukturen zu
messen.
Es ist darauf zu achten, dass Zeiten, die mit den zu analysierenden
Eigenschaften nichts zu tun haben, vernachlässigt werden können
(z.B. Programmladezeiten).
Die Performance-Probleme treten häufig erst bei sehr großen
Problemen auf, hier bei einer großen Anzahl zu speichernder
Datensätze.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
157 / 161
Container-Klassen
Performance
Allgemeines zur Performance-Analyse
Bei der Performance-Analyse der Container-Klassen sind die
Speicheralgorithmen und die Performance der Datenstrukturen zu
messen.
Es ist darauf zu achten, dass Zeiten, die mit den zu analysierenden
Eigenschaften nichts zu tun haben, vernachlässigt werden können
(z.B. Programmladezeiten).
Die Performance-Probleme treten häufig erst bei sehr großen
Problemen auf, hier bei einer großen Anzahl zu speichernder
Datensätze.
Messungen an großen Systemen sind daher wesentlich
aussagekräftiger als Messungen an kleinen Systemen. Benchmarks in
der Größenordung Millisekunden sind damit i.A. wenig aussagekräftig.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
157 / 161
Container-Klassen
Performance
Allgemeines zur Performance-Analyse
Bei der Performance-Analyse der Container-Klassen sind die
Speicheralgorithmen und die Performance der Datenstrukturen zu
messen.
Es ist darauf zu achten, dass Zeiten, die mit den zu analysierenden
Eigenschaften nichts zu tun haben, vernachlässigt werden können
(z.B. Programmladezeiten).
Die Performance-Probleme treten häufig erst bei sehr großen
Problemen auf, hier bei einer großen Anzahl zu speichernder
Datensätze.
Messungen an großen Systemen sind daher wesentlich
aussagekräftiger als Messungen an kleinen Systemen. Benchmarks in
der Größenordung Millisekunden sind damit i.A. wenig aussagekräftig.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
157 / 161
Container-Klassen
Performance
Array-Container-Performance
Die Performance der Zugriffe ist dimensionsunabhängig.
Die Aufbau-Performance der Arrays hängt ab von der Größe der
Erweiterungsschritte.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
158 / 161
Container-Klassen
Performance
Array-Container-Performance
Die Performance der Zugriffe ist dimensionsunabhängig.
Die Aufbau-Performance der Arrays hängt ab von der Größe der
Erweiterungsschritte.
Lässt sich eine Größe eindeutig indizieren und wird mit häufigen
Zugriffen gerechnet, so ist ein Array die beste Container-Form.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
158 / 161
Container-Klassen
Performance
Array-Container-Performance
Die Performance der Zugriffe ist dimensionsunabhängig.
Die Aufbau-Performance der Arrays hängt ab von der Größe der
Erweiterungsschritte.
Lässt sich eine Größe eindeutig indizieren und wird mit häufigen
Zugriffen gerechnet, so ist ein Array die beste Container-Form.
Elemente
100.000
200.000
Zufälliger Direkter Zugriff
Aufbau [s]
Zugriff [s]
Erweiterung
104
0
6
51
0
12
25
0
25
12
0
50
6
0
100
48
0
50
25
0
100
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE)
Objektorientiertes VBA
158 / 161
Container-Klassen
Performance
Array-Container-Performance
Die Performance der Zugriffe ist dimensionsunabhängig.
Die Aufbau-Performance der Arrays hängt ab von der Größe der
Erweiterungsschritte.
Lässt sich eine Größe eindeutig indizieren und wird mit häufigen
Zugriffen gerechnet, so ist ein Array die beste Container-Form.
Elemente
100.000
200.000
Zufälliger Direkter Zugriff
Aufbau [s]
Zugriff [s]
Erweiterung
104
0
6
51
0
12
25
0
25
12
0
50
6
0
100
48
0
50
25
0
100
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE)
Objektorientiertes VBA
158 / 161
Container-Klassen
Performance
Performance einer einfach verketteten Liste
Die Performance der Zugriffe ist dimensionsabhängig.
Die Performance des Aufbaus ist quasi dimensionsunabhängig.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
159 / 161
Container-Klassen
Performance
Performance einer einfach verketteten Liste
Die Performance der Zugriffe ist dimensionsabhängig.
Die Performance des Aufbaus ist quasi dimensionsunabhängig.
Für sequentiell abzuarbeitende Datenbestände (Ringbuffer, Stack,
etc.) sind Listen geeignet.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
159 / 161
Container-Klassen
Performance
Performance einer einfach verketteten Liste
Die Performance der Zugriffe ist dimensionsabhängig.
Die Performance des Aufbaus ist quasi dimensionsunabhängig.
Für sequentiell abzuarbeitende Datenbestände (Ringbuffer, Stack,
etc.) sind Listen geeignet.
Direkte Zugriffe sind sehr langsam.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
159 / 161
Container-Klassen
Performance
Performance einer einfach verketteten Liste
Die Performance der Zugriffe ist dimensionsabhängig.
Die Performance des Aufbaus ist quasi dimensionsunabhängig.
Für sequentiell abzuarbeitende Datenbestände (Ringbuffer, Stack,
etc.) sind Listen geeignet.
Direkte Zugriffe sind sehr langsam.
Zufälliger Direkter Zugriff
Elemente
Aufbau [s]
Zugriff [s]
20.000
0
10
30.000
1
22
40.000
1
39
50.000
1
63
100.000
1
260
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE)
Objektorientiertes VBA
159 / 161
Container-Klassen
Performance
Performance einer einfach verketteten Liste
Die Performance der Zugriffe ist dimensionsabhängig.
Die Performance des Aufbaus ist quasi dimensionsunabhängig.
Für sequentiell abzuarbeitende Datenbestände (Ringbuffer, Stack,
etc.) sind Listen geeignet.
Direkte Zugriffe sind sehr langsam.
Zufälliger Direkter Zugriff
Elemente
Aufbau [s]
Zugriff [s]
20.000
0
10
30.000
1
22
40.000
1
39
50.000
1
63
100.000
1
260
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE)
Objektorientiertes VBA
159 / 161
Container-Klassen
Performance
Performance der VBA-build-in-Collection
Die Performance der Zugriffe ist dimensionsabhängig.
Die Performance des Aufbaus ist quasi dimensionsunabhängig.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
160 / 161
Container-Klassen
Performance
Performance der VBA-build-in-Collection
Die Performance der Zugriffe ist dimensionsabhängig.
Die Performance des Aufbaus ist quasi dimensionsunabhängig.
Geeignet, falls Schlüssel, keine Indizierung verwendet wird.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
160 / 161
Container-Klassen
Performance
Performance der VBA-build-in-Collection
Die Performance der Zugriffe ist dimensionsabhängig.
Die Performance des Aufbaus ist quasi dimensionsunabhängig.
Geeignet, falls Schlüssel, keine Indizierung verwendet wird.
Direkte Zugriffe schneller als bei Listen, langsamer als bei Arrays.
E. Baeck (Uni-DUE)
Objektorientiertes VBA
160 / 161
Container-Klassen
Performance
Performance der VBA-build-in-Collection
Die Performance der Zugriffe ist dimensionsabhängig.
Die Performance des Aufbaus ist quasi dimensionsunabhängig.
Geeignet, falls Schlüssel, keine Indizierung verwendet wird.
Direkte Zugriffe schneller als bei Listen, langsamer als bei Arrays.
Zufälliger Direkter Zugriff
Elemente
Aufbau [s]
Zugriff [s]
30.000
0
1
50.000
0
4
100.000
0
20
130.000
0
33
150.000
0
46
200.000
0
89
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE)
Objektorientiertes VBA
160 / 161
Container-Klassen
Performance
Performance der VBA-build-in-Collection
Die Performance der Zugriffe ist dimensionsabhängig.
Die Performance des Aufbaus ist quasi dimensionsunabhängig.
Geeignet, falls Schlüssel, keine Indizierung verwendet wird.
Direkte Zugriffe schneller als bei Listen, langsamer als bei Arrays.
Zufälliger Direkter Zugriff
Elemente
Aufbau [s]
Zugriff [s]
30.000
0
1
50.000
0
4
100.000
0
20
130.000
0
33
150.000
0
46
200.000
0
89
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE)
Objektorientiertes VBA
160 / 161
Literatur I
Alan Kay (1. März 1993): The Early History of Smalltalk (en). In: The second ACM SIGPLAN conference on History of
programming languages S. 78. ACM. doi:10.1145/155360.155364
Alan Kay On Messaging (10. Oktober 1998). Abgerufen am 4. Juni 2012. [. . . ] Smalltalk is not only NOT its syntax or
”
the class library, it is not even about classes. I’m sorry that I long ago coined the term öbjects”for this topic because it
gets many people to focus on the lesser idea. The big idea is ”messaging”[. . . ]“
Luca Cardelli: Bad Engineering Properties of Object-Oriented Languages. In: ACM (Hrsg.): ACM Comput. Surv. 28,
1996, S. 150. doi:10.1145/242224.242415. Abgerufen am 21. April 2010.
Thomas Potok, Mladen Vouk, Andy Rindos: Productivity Analysis of Object-Oriented Software Developed in a
Commercial Environment. In: Software – Practice and Experience. 29, Nr. 10, 1999, S. 833–847. Abgerufen am 21. April
2010.
ISO 2382-15 : 1998 Information technology - Vocabulary - Part 15: Programming languages; Revision of first edition ISO
2382-15 : 1985 (englisch)
Wikipedia, die freie Enzyklopädie (http://wikipedia.org)
E. Baeck (Uni-DUE)
Objektorientiertes VBA
161 / 161
Herunterladen