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