Post on 05-Aug-2019
Bauinformatik 1Teil 1 / OOP, Klassen in VBA
Ernst Baeck
Fachgebiet Statik und Dynamik der Flachentragwerke
10. April 2019
E. Baeck (Uni-DUE) Folien-Skript (O) 1 / 36
ObjektOrientierte Programmierung, OOP
ObjektorientierteProgrammierung
mit VBA
E. Baeck (Uni-DUE) Folien-Skript (O) 2 / 36
ObjektOrientierte Programmierung, OOP Ziele und Motivation
Ziele und Motivation
Reduktion des Entwicklungsaufwandes
Wiederverwertbarkeit von vorhandenen Programmquellen
Vereinfachung der Wiederverwertbarkeit
Reduktion des Wartungsaufwandes
Klare Programmstrukturen
Automatisierung der Dokumentationserstellung
⇓Ressourcen-Optimierung
Kostenoptimierung
E. Baeck (Uni-DUE) Folien-Skript (O) 3 / 36
ObjektOrientierte Programmierung, OOP Ziele und Motivation
Objektbeispiel Fahrzeuge, Daten und Prozeduren
Es gibt Fahrrader, Motorrader, PKWs, LKWs. Es gibt Busse.
Klassische Beschreibung durch Variablen und Prozeduren
In vielen F77-Programmen werden heute noch nur Felder eingesetzt.
LKWPosition
LKWMotor
PKWMotor
FahrradPosition
BusTuren
VerschiebeFahrrad
StartePKW
StarteLKW
OffneBussture
LenkeFahrrad
VerschiebeLKW
LenkeLKW
E. Baeck (Uni-DUE) Folien-Skript (O) 4 / 36
ObjektOrientierte Programmierung, OOP Kassen-Hierarchie
Was ist eine Klasse?
Konsequente Weiterentwicklung einer Struktur.
Eine Klasse enthalt Daten und Methoden (Variablen und Funktionen).
Eine Klasse kann eine Basisklasse beerben (Code Wiederverwertung).(Leider nicht in VBA)
Methode konnen uberschrieben, d.h. spezialisiert werden.(Leider nicht in VBA, da keine Vererbung)
Die Implementierung einer Klasse heißt Objekt oder Instanz.
Klassen werden durch UML-Klassendiagramme beschrieben.
Eine Klasse in VBA ist ein Klassenmodul.
Name1
Attribute1 (Variablen)
Methoden1 (Funktionen)
Name2
Attribute2 (Variablen)
Methoden2 (Funktionen)
Klasse Name2 beerbt Name1und erhalt deren Attribute undMethoden
Klasse Name2 beerbt Name1und erhalt deren Attribute undMethoden
E. Baeck (Uni-DUE) Folien-Skript (O) 5 / 36
ObjektOrientierte Programmierung, OOP UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthalt 13 Diagrammtypen zur OO-Modellierung.
UML zum Erstellen von Skizzen zum Programm-Design.
Es ist moglich aus einer vollstandigen UML Beschreibungen einlauffahiges Programm automatisiert zu erzeugen.
Wir beschranken uns auf Klassendiagramme und Notizen,
Generalisierungen (Vererbung), in VBA nicht moglich!
Kompositionsdiagramme und
Aggregationsdiagramme
E. Baeck (Uni-DUE) Folien-Skript (O) 6 / 36
ObjektOrientierte Programmierung, OOP UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthalt 13 Diagrammtypen zur OO-Modellierung.
UML zum Erstellen von Skizzen zum Programm-Design.
Es ist moglich aus einer vollstandigen UML Beschreibungen einlauffahiges Programm automatisiert zu erzeugen.
Wir beschranken uns auf Klassendiagramme und Notizen,
Generalisierungen (Vererbung), in VBA nicht moglich!
Kompositionsdiagramme und
Aggregationsdiagramme
Klassenname
Eigenschaften
Methoden
Zusatzliche Informationenim Notiz-DiagrammZusatzliche Informationenim Notiz-Diagramm
E. Baeck (Uni-DUE) Folien-Skript (O) 6 / 36
ObjektOrientierte Programmierung, OOP UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthalt 13 Diagrammtypen zur OO-Modellierung.
UML zum Erstellen von Skizzen zum Programm-Design.
Es ist moglich aus einer vollstandigen UML Beschreibungen einlauffahiges Programm automatisiert zu erzeugen.
Wir beschranken uns auf Klassendiagramme und Notizen,
Generalisierungen (Vererbung), in VBA nicht moglich!
Kompositionsdiagramme und
Aggregationsdiagramme
Basisklasse
Basis-Eigenschaften
Basis-Methoden
Abgeleitete Klasse
Eigenschaften
Methoden
E. Baeck (Uni-DUE) Folien-Skript (O) 6 / 36
ObjektOrientierte Programmierung, OOP UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthalt 13 Diagrammtypen zur OO-Modellierung.
UML zum Erstellen von Skizzen zum Programm-Design.
Es ist moglich aus einer vollstandigen UML Beschreibungen einlauffahiges Programm automatisiert zu erzeugen.
Wir beschranken uns auf Klassendiagramme und Notizen,
Generalisierungen (Vererbung), in VBA nicht moglich!
Kompositionsdiagramme und
Aggregationsdiagramme
geordnet
3..* Mittelpunkt
1Polygon Punkt Kreis
E. Baeck (Uni-DUE) Folien-Skript (O) 6 / 36
ObjektOrientierte Programmierung, OOP UML
UML - Unified Modelling Language
Die UML verfeinert die Idee des ER-Diagramms.
UML Version 2 enthalt 13 Diagrammtypen zur OO-Modellierung.
UML zum Erstellen von Skizzen zum Programm-Design.
Es ist moglich aus einer vollstandigen UML Beschreibungen einlauffahiges Programm automatisiert zu erzeugen.
Wir beschranken uns auf Klassendiagramme und Notizen,
Generalisierungen (Vererbung), in VBA nicht moglich!
Kompositionsdiagramme und
Aggregationsdiagramme
1 *
Blech Anschluss
E. Baeck (Uni-DUE) Folien-Skript (O) 6 / 36
ObjektOrientierte Programmierung, OOP UML
Klassen-Hierarchie einiger Fahrzeuge
Fahrzeug
positionbaujahrgewicht
verschiebelenke
Skateboard
rollenbreite
Zweirad
beifahrer
Fahrrad
ritzelsatteltaschen
Motorrad
leistungbeiwagen
schalte
Auto
sitzeplaetzeturenleistung
PKW
schiebedach
LKW
achsen
rueckfahrpiepsen
Camper
wassertank
E. Baeck (Uni-DUE) Folien-Skript (O) 7 / 36
ObjektOrientierte Programmierung, OOP UML
Klassen-Hierarchie von AutoCAD-Geometrieobjekten
Das Beispiel zeigt die Klassenhierarchie eines CAD-Geometriemodells.
Von einem allgemeinen Geometrie-Objekt leiten sich Primitives ab.
+ ist public, kursiv ist eine abstrakte (virtuelle) Methode.
GeoObjekt
+zeichne
Punkt
+zeichne
Linie
+zeichne
Polygon
+zeichne
Solid
+zeichne
MultiLinie
+zeichne
Zylinder
+zeichne
Quader
+zeichne
E. Baeck (Uni-DUE) Folien-Skript (O) 8 / 36
ObjektOrientierte Programmierung, OOP UML
Polymorphie
Polymorphie ist die Fahigkeit je nach Klasse unterschiedlichespezialisierte Funktionen der Basisklasse aufrufen zu konnen, ohnenach der Klasse zu fragen.
Werden z.B. Klassen eines CAD-Programms von einer Basis-Klasseabgeleitet und hat diese z.B. eine virtuelle Funktion zeichnen, die vonabgeleiteten Klassen uberschrieben werde, konnen diese Funktionenbeim Iterieren der vorhanden Objekte ohne if oder switch Abfragespezialisiert aufgerufen werden.
E. Baeck (Uni-DUE) Folien-Skript (O) 9 / 36
ObjektOrientierte Programmierung, OOP Zugriffsrechte
Problem globaler Daten
Globale Daten werden außerhalb der Prozeduren deklariert.Globale Daten konnen ohne explizite Parameterubergaben inUnterprogrammen verandert werden.Es fehlen Schutzmechanismen, alles ist sichtbar, alles ist erlaubt.Globale Daten konnen somit leicht versehentlich verandert werden.
’ D e k l a r a t i o n g l o b a l e r Va r i a b l e nDim a As Double , b as Double , c As Double’ HauptprogrammSub TestGlobVar ( )
a = 1 : b = 2 : c = 3Debug . Pr i n t ”a : ” & a & ” | b : ” & b ; ” | c : ” & cCa l l QuadItDebug . Pr i n t ”a : ” & a & ” | b : ” & b ; ” | c : ” & c
End Sub
Sub QuadIt ( )a = a ˆ 2 : b = b ˆ 2 : c = c ˆ 2
End Sub
E. Baeck (Uni-DUE) Folien-Skript (O) 10 / 36
ObjektOrientierte Programmierung, OOP Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfugen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor raumt 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 geloscht.
Instanzen ohne Referenzen werden automatisch von VBA geloscht.
VBA verfugt uber einen Garbage Collector.
E. Baeck (Uni-DUE) Folien-Skript (O) 11 / 36
ObjektOrientierte Programmierung, OOP Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfugen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor raumt 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 geloscht.
Instanzen ohne Referenzen werden automatisch von VBA geloscht.
VBA verfugt uber einen Garbage Collector.
Klassenmo-dul einfugen
E. Baeck (Uni-DUE) Folien-Skript (O) 11 / 36
ObjektOrientierte Programmierung, OOP Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.Ein Klassenmodul wird mit Rechts-Click/Einfugen erzeugt.Eigenschaften sind globale Variablen des Klassenmoduls.Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor raumt 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 geloscht.Instanzen ohne Referenzen werden automatisch von VBA geloscht.VBA verfugt uber einen Garbage Collector.
GeoObjekt Punkt
double : xc(1:2)
Klassenmodul eines Punktes mit Basisklasse. xc und b sind Eigenschaften
Dim xc(1 To 2) As Double ’ Koordinaten
Dim b As GeoObjekt ’ GeoObject (Basis-Klasse)
Private Sub Class Initialize()
xc(1) = 0#
xc(2) = 0#
Set b = New GeoObjekt
End Sub
E. Baeck (Uni-DUE) Folien-Skript (O) 11 / 36
ObjektOrientierte Programmierung, OOP Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfugen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor raumt 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 geloscht.
Instanzen ohne Referenzen werden automatisch von VBA geloscht.
VBA verfugt uber einen Garbage Collector.
Der Konstruktor initialisiert die Koordinaten und erzeugt die Basis-Instanz
Private Sub Class Initialize()
xc(1) = 0#
xc(2) = 0#
Set b = New GeoObjekt
End Sub
E. Baeck (Uni-DUE) Folien-Skript (O) 11 / 36
ObjektOrientierte Programmierung, OOP Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfugen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor raumt 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 geloscht.
Instanzen ohne Referenzen werden automatisch von VBA geloscht.
VBA verfugt uber einen Garbage Collector.
Der Destruktor gibt die Basis-Instanz frei
Private Sub Class Terminate()
Set b = Nothing
End Sub
E. Baeck (Uni-DUE) Folien-Skript (O) 11 / 36
ObjektOrientierte Programmierung, OOP Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfugen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor raumt 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 geloscht.
Instanzen ohne Referenzen werden automatisch von VBA geloscht.
VBA verfugt uber einen Garbage Collector.
Zwei Versionen, eine Klassenmodul-Instanz zu erzeugen
Dim P1 As New Punkt Dim P1 As Punkt
Set P1 = New Punkt
E. Baeck (Uni-DUE) Folien-Skript (O) 11 / 36
ObjektOrientierte Programmierung, OOP Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfugen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor raumt 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 geloscht.
Instanzen ohne Referenzen werden automatisch von VBA geloscht.
VBA verfugt uber einen Garbage Collector.
Zwei Versionen, eine Klassenmodul-Instanz zu erzeugen
Dim P1 As New Punkt Dim P1 As Punkt
Set P1 = New Punkt
E. Baeck (Uni-DUE) Folien-Skript (O) 11 / 36
ObjektOrientierte Programmierung, OOP Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfugen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor raumt 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 geloscht.
Instanzen ohne Referenzen werden automatisch von VBA geloscht.
VBA verfugt uber einen Garbage Collector.
Der Destruktor gibt die Basis-Instanz frei
Private Sub Class Terminate()
Set b = Nothing
End Sub
E. Baeck (Uni-DUE) Folien-Skript (O) 11 / 36
ObjektOrientierte Programmierung, OOP Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfugen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor raumt 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 geloscht.
Instanzen ohne Referenzen werden automatisch von VBA geloscht.
VBA verfugt uber einen Garbage Collector.
E. Baeck (Uni-DUE) Folien-Skript (O) 11 / 36
ObjektOrientierte Programmierung, OOP Klassenmodule
Klassenmodule
Klassen werden in VBA als Klassenmodul bezeichnet.
Ein Klassenmodul wird mit Rechts-Click/Einfugen erzeugt.
Eigenschaften sind globale Variablen des Klassenmoduls.
Der Konstruktor initialisiert ⇒ Class_Initialize.
Der Destruktor raumt 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 geloscht.
Instanzen ohne Referenzen werden automatisch von VBA geloscht.
VBA verfugt uber einen Garbage Collector.
E. Baeck (Uni-DUE) Folien-Skript (O) 11 / 36
ObjektOrientierte Programmierung, OOP 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 konnen nur mit Private erzeugt werden.
Felder erfordern Interfaces (Zugriffsmethoden).
Eventfunktionen sind immer Private.
E. Baeck (Uni-DUE) Folien-Skript (O) 12 / 36
ObjektOrientierte Programmierung, OOP Interfaces
Interfaces und Pseudo-Vererbung
VBA unterstutzt keine Vererbung.
Die Vererbung kann uber 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.
E. Baeck (Uni-DUE) Folien-Skript (O) 13 / 36
ObjektOrientierte Programmierung, OOP Interfaces
Interfaces und Pseudo-Vererbung
VBA unterstutzt keine Vererbung.
Die Vererbung kann uber 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.
E. Baeck (Uni-DUE) Folien-Skript (O) 13 / 36
ObjektOrientierte Programmierung, OOP Interfaces
Interfaces und Pseudo-Vererbung
VBA unterstutzt keine Vererbung.
Die Vererbung kann uber 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.
E. Baeck (Uni-DUE) Folien-Skript (O) 13 / 36
ObjektOrientierte Programmierung, OOP Interfaces
Interfaces und Pseudo-Vererbung
VBA unterstutzt keine Vererbung.
Die Vererbung kann uber 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 fur 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
Die Zuweisung erfolgt auf die Komponentendes Koordinatenfeldes.
E. Baeck (Uni-DUE) Folien-Skript (O) 13 / 36
ObjektOrientierte Programmierung, OOP Interfaces
Interfaces und Pseudo-Vererbung
VBA unterstutzt keine Vererbung.
Die Vererbung kann uber 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 fur Koordinaten xc
’ Ruckgabe des x-Wertes
Public Property Get x() As Double
x = xc(1)
End Property
’ Ruckgabe des y-Wertes
Public Property Get y() As Double
y = xc(2)
End Property
Die Koorinatenwerte werden mittelsInterface-Routine zuruck gegeben.
E. Baeck (Uni-DUE) Folien-Skript (O) 13 / 36
Beispiel Punktklasse
Beispiel
Die Punkt-Klasse
E. Baeck (Uni-DUE) Folien-Skript (O) 14 / 36
Beispiel Punktklasse Klassenkonzept
Das Klassenkonzept
Die Punkt-Klasse wird abgeleitet von Klasse GeoObjekt.
Die Vererbung ist uber eine Property Interface zu simulieren.
Property-Funktionen sind in der Lage die Parameter zu prufen.
GeoObjekt
integer : farbe
Punkt
double : xc(1:2)
E. Baeck (Uni-DUE) Folien-Skript (O) 15 / 36
Beispiel Punktklasse Klassenkonzept
Das Klassenkonzept
Die Punkt-Klasse wird abgeleitet von Klasse GeoObjekt.
Die Vererbung ist uber eine Property Interface zu simulieren.
Property-Funktionen sind in der Lage die Parameter zu prufen.
Punkt
GeoObjekt : bdouble : xc(1:2)
Let : bGet : bLet : xcGet : xc
Let schreibt Daten in die Instanz,Get liest Daten aus der Instanz,Let schreibt Daten in die Instanz,Get liest Daten aus der Instanz,
E. Baeck (Uni-DUE) Folien-Skript (O) 15 / 36
Beispiel Punktklasse 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 ’ Farbnummer
’ Der Konstruktor
Private Sub Class Initialize()
farbe = 1
End Sub
Das Attribut wird mit Private geschutzt.
E. Baeck (Uni-DUE) Folien-Skript (O) 16 / 36
Beispiel Punktklasse 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 ’ Koordinaten
Dim b As GeoObjekt ’ GeoObject (Basis-Klasse)
’ 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
Der Konstruktor erzeugt die Instanz derBasisklasse mit dem new-Operator. DerDestruktor gibt diese explizit frei.
E. Baeck (Uni-DUE) Folien-Skript (O) 17 / 36
Beispiel Punktklasse Punkt-Interface
Interface-Implementierung zur Klasse Punkt
Interface fur Eigenschaften von Punkt und GeoObjekt.
Die Eigenschaften werden mit Let geschrieben, mit Get gelesen.
Felder konnen uber Let/Get auch angesprochen werden.
’ Farbwert ubernehmen
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 ubernehmen
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) Folien-Skript (O) 18 / 36
Beispiel Punktklasse Testumgebung
Hauptprogramm zum Test der Punktklasse
Zunachst werden die Instanzen erzeugt.
Punkt 1 wird gesetzt. Prufung 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#
’ ubernehmen 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) Folien-Skript (O) 19 / 36
Container-Klassen
Container-Klassen
Arrays, Listen
Collections
E. Baeck (Uni-DUE) Folien-Skript (O) 20 / 36
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
- Daten in die CK zu speichern,- Daten aus der CK abzurufen,- Daten aus der CK zu loschen,- Daten in der CK zu iterieren.
Der Typ der CK beeinflusst die Performance.
⇒ Vorsicht bei der Wahl des CK-Typs!
E. Baeck (Uni-DUE) Folien-Skript (O) 21 / 36
Container-Klassen Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
Zugriff uber Indizierung.
Kein Interface, keine Kapselung.
Kein automatisches Speichermanagement (ReDim)
Vosicht Indexfehler!
Ein Feld ist eine schnelle Losung.
Ein bessere Implementierung bietet ein Klassenmodul.
Hierbei kann durch eine zusatzliche gekapselte Logik, einSpeicherproblem vermieden werden.
E. Baeck (Uni-DUE) Folien-Skript (O) 22 / 36
Container-Klassen Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
Zugriff uber Indizierung.
Kein Interface, keine Kapselung.
Kein automatisches Speichermanagement (ReDim)
Vosicht Indexfehler!
11
Ein Feld ist eine schnelle Losung.
Ein bessere Implementierung bietet ein Klassenmodul.
Hierbei kann durch eine zusatzliche gekapselte Logik, einSpeicherproblem vermieden werden.
E. Baeck (Uni-DUE) Folien-Skript (O) 22 / 36
Container-Klassen Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
Zugriff uber Indizierung.
Kein Interface, keine Kapselung.
Kein automatisches Speichermanagement (ReDim)
Vosicht Indexfehler!
1
22
Ein Feld ist eine schnelle Losung.
Ein bessere Implementierung bietet ein Klassenmodul.
Hierbei kann durch eine zusatzliche gekapselte Logik, einSpeicherproblem vermieden werden.
E. Baeck (Uni-DUE) Folien-Skript (O) 22 / 36
Container-Klassen Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
Zugriff uber Indizierung.
Kein Interface, keine Kapselung.
Kein automatisches Speichermanagement (ReDim)
Vosicht Indexfehler!
1
2
5Fehler
Ein Feld ist eine schnelle Losung.
Ein bessere Implementierung bietet ein Klassenmodul.
Hierbei kann durch eine zusatzliche gekapselte Logik, einSpeicherproblem vermieden werden.
E. Baeck (Uni-DUE) Folien-Skript (O) 22 / 36
Container-Klassen Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
Zugriff uber Indizierung.
Kein Interface, keine Kapselung.
Kein automatisches Speichermanagement (ReDim)
Vosicht Indexfehler!
1
2
5Fehler
Ein Feld ist eine schnelle Losung.
Ein bessere Implementierung bietet ein Klassenmodul.
Hierbei kann durch eine zusatzliche gekapselte Logik, einSpeicherproblem vermieden werden.
E. Baeck (Uni-DUE) Folien-Skript (O) 22 / 36
Container-Klassen Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
Zugriff uber Indizierung.
Kein Interface, keine Kapselung.
Kein automatisches Speichermanagement (ReDim)
Vosicht Indexfehler!
1
2
5Fehler
Ein Feld ist eine schnelle Losung.
Ein bessere Implementierung bietet ein Klassenmodul.
Hierbei kann durch eine zusatzliche gekapselte Logik, einSpeicherproblem vermieden werden.
E. Baeck (Uni-DUE) Folien-Skript (O) 22 / 36
Container-Klassen Felder
Ein Feld, erster Schritt zum Container
Ein Feld ist einfacher Daten-Speicher.
Zugriff uber Indizierung.
Kein Interface, keine Kapselung.
Kein automatisches Speichermanagement (ReDim)
Vosicht Indexfehler!
1
2
5Fehler5
Ein Feld ist eine schnelle Losung.
Ein bessere Implementierung bietet ein Klassenmodul.
Hierbei kann durch eine zusatzliche gekapselte Logik, einSpeicherproblem vermieden werden.
E. Baeck (Uni-DUE) Folien-Skript (O) 22 / 36
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 uber Methoden.
Count liefert den großten gelegten Index.
Mit SetAt wird ein Objekt gespeichert.
Mit GetAt wird ein Objekt abgerufen.
Mit InsertAt wird ein Objekt eingefugt.
Mit RemoveAt wird ein Objekt entfernt.
Mit RemoveAll werden alle Objekte entfernt.
ArrayContainer
E. Baeck (Uni-DUE) Folien-Skript (O) 23 / 36
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 uber Methoden.
Count liefert den großten gelegten Index.
Mit SetAt wird ein Objekt gespeichert.
Mit GetAt wird ein Objekt abgerufen.
Mit InsertAt wird ein Objekt eingefugt.
Mit RemoveAt wird ein Objekt entfernt.
Mit RemoveAll werden alle Objekte entfernt.
ArrayContainer
+Count
E. Baeck (Uni-DUE) Folien-Skript (O) 23 / 36
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 uber Methoden.
Count liefert den großten gelegten Index.
Mit SetAt wird ein Objekt gespeichert.
Mit GetAt wird ein Objekt abgerufen.
Mit InsertAt wird ein Objekt eingefugt.
Mit RemoveAt wird ein Objekt entfernt.
Mit RemoveAll werden alle Objekte entfernt.
ArrayContainer
+Count
SetAt(i,Object)
E. Baeck (Uni-DUE) Folien-Skript (O) 23 / 36
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 uber Methoden.
Count liefert den großten gelegten Index.
Mit SetAt wird ein Objekt gespeichert.
Mit GetAt wird ein Objekt abgerufen.
Mit InsertAt wird ein Objekt eingefugt.
Mit RemoveAt wird ein Objekt entfernt.
Mit RemoveAll werden alle Objekte entfernt.
ArrayContainer
+Count
SetAt(i,Object)Object GetAt(i)
E. Baeck (Uni-DUE) Folien-Skript (O) 23 / 36
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 uber Methoden.
Count liefert den großten gelegten Index.
Mit SetAt wird ein Objekt gespeichert.
Mit GetAt wird ein Objekt abgerufen.
Mit InsertAt wird ein Objekt eingefugt.
Mit RemoveAt wird ein Objekt entfernt.
Mit RemoveAll werden alle Objekte entfernt.
ArrayContainer
+Count
SetAt(i,Object)Object GetAt(i)InsertAt(i,Object)
E. Baeck (Uni-DUE) Folien-Skript (O) 23 / 36
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 uber Methoden.
Count liefert den großten gelegten Index.
Mit SetAt wird ein Objekt gespeichert.
Mit GetAt wird ein Objekt abgerufen.
Mit InsertAt wird ein Objekt eingefugt.
Mit RemoveAt wird ein Objekt entfernt.
Mit RemoveAll werden alle Objekte entfernt.
ArrayContainer
+Count
SetAt(i,Object)Object GetAt(i)InsertAt(i,Object)RemoveAt(i)
E. Baeck (Uni-DUE) Folien-Skript (O) 23 / 36
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 uber Methoden.
Count liefert den großten gelegten Index.
Mit SetAt wird ein Objekt gespeichert.
Mit GetAt wird ein Objekt abgerufen.
Mit InsertAt wird ein Objekt eingefugt.
Mit RemoveAt wird ein Objekt entfernt.
Mit RemoveAll werden alle Objekte entfernt.
ArrayContainer
+Count
SetAt(i,Object)Object GetAt(i)InsertAt(i,Object)RemoveAt(i)RemoveAll()
E. Baeck (Uni-DUE) Folien-Skript (O) 23 / 36
Container-Klassen Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewunschter Große anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu loschen.
1 2 3
Kopie
1 2 3
E. Baeck (Uni-DUE) Folien-Skript (O) 24 / 36
Container-Klassen Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewunschter Große anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu loschen.
1 2 3
E. Baeck (Uni-DUE) Folien-Skript (O) 24 / 36
Container-Klassen Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewunschter Große anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu loschen.
1 2 3
E. Baeck (Uni-DUE) Folien-Skript (O) 24 / 36
Container-Klassen Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewunschter Große anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu loschen.
1 2 3
Kopie
1 2 3
E. Baeck (Uni-DUE) Folien-Skript (O) 24 / 36
Container-Klassen Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewunschter Große anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu loschen.
1 2 3
E. Baeck (Uni-DUE) Folien-Skript (O) 24 / 36
Container-Klassen Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewunschter Große anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu loschen.
Das Anlegen (Allokieren) und Loschen (Deallokieren) des Speichersdefragmentiert den Hauptspeicher.
Hauptspeicher-Defragmentierung reduziert die Performance.
Wird die Instanz einer Array-Klasse in einer Anwendung mit kleinenZuwachsen hinreichend oft erweitert, wird die Performanceuberproportional schlechter.
E. Baeck (Uni-DUE) Folien-Skript (O) 24 / 36
Container-Klassen Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewunschter Große anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu loschen.
Das Anlegen (Allokieren) und Loschen (Deallokieren) des Speichersdefragmentiert den Hauptspeicher.
Hauptspeicher-Defragmentierung reduziert die Performance.
Wird die Instanz einer Array-Klasse in einer Anwendung mit kleinenZuwachsen hinreichend oft erweitert, wird die Performanceuberproportional schlechter.
E. Baeck (Uni-DUE) Folien-Skript (O) 24 / 36
Container-Klassen Array-Container
Erweitern einer Array-Container-Instanz
Der Inhalt des Arrays ist zu sichern.
Alten Speicher entfernen.
Neuen Speicher in gewunschter Große anlegen.
Die Sicherung ist in das angepasste Array zu kopieren.
Die Sicherung ist zu loschen.
Das Anlegen (Allokieren) und Loschen (Deallokieren) des Speichersdefragmentiert den Hauptspeicher.
Hauptspeicher-Defragmentierung reduziert die Performance.
Wird die Instanz einer Array-Klasse in einer Anwendung mit kleinenZuwachsen hinreichend oft erweitert, wird die Performanceuberproportional schlechter.
E. Baeck (Uni-DUE) Folien-Skript (O) 24 / 36
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 enthalt Daten oder die Adresse der Daten.
Das Adresselement verweist auf den nachsten Knoten der Kette.
Kopf Knoten 1 Knoten 2 Knoten 3
E. Baeck (Uni-DUE) Folien-Skript (O) 25 / 36
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 enthalt Daten oder die Adresse der Daten.
Das Adresselement verweist auf den nachsten Knoten der Kette.
Kopf Knoten 1 Knoten 2 Knoten 3
E. Baeck (Uni-DUE) Folien-Skript (O) 25 / 36
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 enthalt Daten oder die Adresse der Daten.
Das Adresselement verweist auf den nachsten Knoten der Kette.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE) Folien-Skript (O) 25 / 36
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 enthalt Daten oder die Adresse der Daten.
Das Adresselement verweist auf den nachsten Knoten der Kette.
Knoten
Knoten: nextDaten: data
Daten
Knoten
Knoten: nextDaten: data
E. Baeck (Uni-DUE) Folien-Skript (O) 25 / 36
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 enthalt Daten oder die Adresse der Daten.
Das Adresselement verweist auf den nachsten Knoten der Kette.
Knoten
Knoten: nextDaten: data
Daten
Knoten
Knoten: nextDaten: data
E. Baeck (Uni-DUE) Folien-Skript (O) 25 / 36
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 enthalt Daten oder die Adresse der Daten.
Das Adresselement verweist auf den nachsten Knoten der Kette.
Knoten
Knoten: nextDaten: data
Daten
Knoten
Knoten: nextDaten: data
E. Baeck (Uni-DUE) Folien-Skript (O) 25 / 36
Container-Klassen List-Container
Einfugen eines neuen Knotens in die Liste
Das Einfugen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Anpassen der Listen-Zeiger (Knoten einhangen).
Zunachst Zeiger von neuem Knoten auf Nachfolger setzen.
Dann Zeiger von Vorganger auf neuen Knoten Setzen
Damit wird der alte Zeiger uberschrieben.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten Einfugen
E. Baeck (Uni-DUE) Folien-Skript (O) 26 / 36
Container-Klassen List-Container
Einfugen eines neuen Knotens in die Liste
Das Einfugen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Anpassen der Listen-Zeiger (Knoten einhangen).
Zunachst Zeiger von neuem Knoten auf Nachfolger setzen.
Dann Zeiger von Vorganger auf neuen Knoten Setzen
Damit wird der alte Zeiger uberschrieben.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten Einfugen
E. Baeck (Uni-DUE) Folien-Skript (O) 26 / 36
Container-Klassen List-Container
Einfugen eines neuen Knotens in die Liste
Das Einfugen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Anpassen der Listen-Zeiger (Knoten einhangen).
Zunachst Zeiger von neuem Knoten auf Nachfolger setzen.
Dann Zeiger von Vorganger auf neuen Knoten Setzen
Damit wird der alte Zeiger uberschrieben.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten Einfugen
Knoten
Knoten: next
E. Baeck (Uni-DUE) Folien-Skript (O) 26 / 36
Container-Klassen List-Container
Einfugen eines neuen Knotens in die Liste
Das Einfugen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Anpassen der Listen-Zeiger (Knoten einhangen).
Zunachst Zeiger von neuem Knoten auf Nachfolger setzen.
Dann Zeiger von Vorganger auf neuen Knoten Setzen
Damit wird der alte Zeiger uberschrieben.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten Einfugen
Knoten
Knoten: next
E. Baeck (Uni-DUE) Folien-Skript (O) 26 / 36
Container-Klassen List-Container
Einfugen eines neuen Knotens in die Liste
Das Einfugen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Anpassen der Listen-Zeiger (Knoten einhangen).
Zunachst Zeiger von neuem Knoten auf Nachfolger setzen.
Dann Zeiger von Vorganger auf neuen Knoten Setzen
Damit wird der alte Zeiger uberschrieben.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE) Folien-Skript (O) 26 / 36
Container-Klassen List-Container
Einfugen eines neuen Knotens in die Liste
Das Einfugen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Anpassen der Listen-Zeiger (Knoten einhangen).
Zunachst Zeiger von neuem Knoten auf Nachfolger setzen.
Dann Zeiger von Vorganger auf neuen Knoten Setzen
Damit wird der alte Zeiger uberschrieben.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE) Folien-Skript (O) 26 / 36
Container-Klassen List-Container
Einfugen eines neuen Knotens in die Liste
Das Einfugen eines neuen Knotens ist relativ einfach.
Keine Speicherplatz-Umorganisation erforderlich.
Es wird eine neue Knoten-Instanz erzeugt.
Anpassen der Listen-Zeiger (Knoten einhangen).
Zunachst Zeiger von neuem Knoten auf Nachfolger setzen.
Dann Zeiger von Vorganger auf neuen Knoten Setzen
Damit wird der alte Zeiger uberschrieben.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE) Folien-Skript (O) 26 / 36
Container-Klassen List-Container
Loschen eines Knotens aus der Liste
Das Entfernen des Knotens ist wie das Einfugen relativ einfach.
Vorganger-Zeiger auf den Nachfolger-Knoten setzen.
Falls erforderlich, zu loschende Instanz explizit deallokieren.
VORSICHT: Falls der Container nicht mehr benotigt wird, sind dieKnoten ggf. explizit mit Zuweisung von Nothing zu entfernen.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten Entfernen
E. Baeck (Uni-DUE) Folien-Skript (O) 27 / 36
Container-Klassen List-Container
Loschen eines Knotens aus der Liste
Das Entfernen des Knotens ist wie das Einfugen relativ einfach.
Vorganger-Zeiger auf den Nachfolger-Knoten setzen.
Falls erforderlich, zu loschende Instanz explizit deallokieren.
VORSICHT: Falls der Container nicht mehr benotigt wird, sind dieKnoten ggf. explizit mit Zuweisung von Nothing zu entfernen.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
Knoten Entfernen
E. Baeck (Uni-DUE) Folien-Skript (O) 27 / 36
Container-Klassen List-Container
Loschen eines Knotens aus der Liste
Das Entfernen des Knotens ist wie das Einfugen relativ einfach.
Vorganger-Zeiger auf den Nachfolger-Knoten setzen.
Falls erforderlich, zu loschende Instanz explizit deallokieren.
VORSICHT: Falls der Container nicht mehr benotigt wird, sind dieKnoten ggf. explizit mit Zuweisung von Nothing zu entfernen.
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE) Folien-Skript (O) 27 / 36
Container-Klassen List-Container
Loschen eines Knotens aus der Liste
Das Entfernen des Knotens ist wie das Einfugen relativ einfach.
Vorganger-Zeiger auf den Nachfolger-Knoten setzen.
Falls erforderlich, zu loschende Instanz explizit deallokieren.
VORSICHT: Falls der Container nicht mehr benotigt wird, sind dieKnoten ggf. explizit mit Zuweisung von Nothing zu entfernen.
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE) Folien-Skript (O) 27 / 36
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 nachste Knoten-Instanz.
Die Daten werden in einer Variant-Variablen abgelegt.
ListAufbau erzeugt eine Liste in einer for-Schleife.Der Schleifenindex wird als Datenobjekt ubernommen.
Node
+Node : nextNode+Variant : data
E. Baeck (Uni-DUE) Folien-Skript (O) 28 / 36
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 nachste Knoten-Instanz.
Die Daten werden in einer Variant-Variablen abgelegt.
ListAufbau erzeugt eine Liste in einer for-Schleife.Der Schleifenindex wird als Datenobjekt ubernommen.
Public nextNode As Node
Public data As Variant
E. Baeck (Uni-DUE) Folien-Skript (O) 28 / 36
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 nachste Knoten-Instanz.
Die Daten werden in einer Variant-Variablen abgelegt.
ListAufbau erzeugt eine Liste in einer for-Schleife.Der Schleifenindex wird als Datenobjekt ubernommen.
Public nextNode As Node
Public data As Variant
E. Baeck (Uni-DUE) Folien-Skript (O) 28 / 36
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 nachste Knoten-Instanz.Die Daten werden in einer Variant-Variablen abgelegt.ListAufbau erzeugt eine Liste in einer for-Schleife.Der Schleifenindex wird als Datenobjekt ubernommen.
Sub ListAufbau()
Dim nHead As New Node ’ Startknoten
Dim nPos As Node ’ aktueller Knoten
Dim nNext As Node ’ nachster 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 SubE. Baeck (Uni-DUE) Folien-Skript (O) 28 / 36
Container-Klassen List-Container
Deallokieren des List-Containers
Einfache Tests zeigen, dass EXCEL beim Verlassen des Programmsnicht in der Lage ist, alle erzeugten Knoten zu loschen. EinMemory-Fehler wird angezeigt und EXCEL ist neu zu starten.
Werden die Knoten entfernt, gibt es keine Probleme.
Das Loschen der Knoten beginnt beim ersten Knoten (Head).
Der Nachfolger wird so der neue Head-Knoten.
Dies erfolgt solange, bis der Nachfolger auf Nothing verweist.
E. Baeck (Uni-DUE) Folien-Skript (O) 29 / 36
Container-Klassen List-Container
Deallokieren des List-Containers
Einfache Tests zeigen, dass EXCEL beim Verlassen des Programmsnicht in der Lage ist, alle erzeugten Knoten zu loschen. EinMemory-Fehler wird angezeigt und EXCEL ist neu zu starten.
Werden die Knoten entfernt, gibt es keine Probleme.
Das Loschen der Knoten beginnt beim ersten Knoten (Head).
Der Nachfolger wird so der neue Head-Knoten.
Dies erfolgt solange, bis der Nachfolger auf Nothing verweist.
E. Baeck (Uni-DUE) Folien-Skript (O) 29 / 36
Container-Klassen List-Container
Deallokieren des List-Containers
Einfache Tests zeigen, dass EXCEL beim Verlassen des Programmsnicht in der Lage ist, alle erzeugten Knoten zu loschen. EinMemory-Fehler wird angezeigt und EXCEL ist neu zu starten.
Werden die Knoten entfernt, gibt es keine Probleme.
Das Loschen der Knoten beginnt beim ersten Knoten (Head).
Der Nachfolger wird so der neue Head-Knoten.
Dies erfolgt solange, bis der Nachfolger auf Nothing verweist.
Knoten
Knoten: next
Head Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE) Folien-Skript (O) 29 / 36
Container-Klassen List-Container
Deallokieren des List-Containers
Einfache Tests zeigen, dass EXCEL beim Verlassen des Programmsnicht in der Lage ist, alle erzeugten Knoten zu loschen. EinMemory-Fehler wird angezeigt und EXCEL ist neu zu starten.
Werden die Knoten entfernt, gibt es keine Probleme.
Das Loschen 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
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE) Folien-Skript (O) 29 / 36
Container-Klassen List-Container
Deallokieren des List-Containers
Einfache Tests zeigen, dass EXCEL beim Verlassen des Programmsnicht in der Lage ist, alle erzeugten Knoten zu loschen. EinMemory-Fehler wird angezeigt und EXCEL ist neu zu starten.
Werden die Knoten entfernt, gibt es keine Probleme.
Das Loschen 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
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE) Folien-Skript (O) 29 / 36
Container-Klassen List-Container
Deallokieren des List-Containers
Einfache Tests zeigen, dass EXCEL beim Verlassen des Programmsnicht in der Lage ist, alle erzeugten Knoten zu loschen. EinMemory-Fehler wird angezeigt und EXCEL ist neu zu starten.
Werden die Knoten entfernt, gibt es keine Probleme.
Das Loschen 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 Nothing
Knoten
Knoten: next
Knoten
Knoten: next
Knoten
Knoten: next
E. Baeck (Uni-DUE) Folien-Skript (O) 29 / 36
Container-Klassen Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten untereinem Schlussel (ein beliebiger String).
Hash-Funktion bildet Schlussel auf Index-Wert ab.
Kollision, falls mehrere Schlussel den selben Index erhalten.
Daten mit selbem Index werden oft in Listen (Buckets) abgelegt.
Durch die Reduktion der Listenlange reduziert sich der Suchaufwand.
Prinzipiell kann eine Collection als Liste entarten.
MD5-Hash codiert Passworte in 128Bit.
IPB 120 :Profildaten
I 100 :Profildaten
L 50x5 :Profildaten
E. Baeck (Uni-DUE) Folien-Skript (O) 30 / 36
Container-Klassen Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten untereinem Schlussel (ein beliebiger String).
Hash-Funktion bildet Schlussel auf Index-Wert ab.
Kollision, falls mehrere Schlussel den selben Index erhalten.
Daten mit selbem Index werden oft in Listen (Buckets) abgelegt.
Durch die Reduktion der Listenlange reduziert sich der Suchaufwand.
Prinzipiell kann eine Collection als Liste entarten.
MD5-Hash codiert Passworte in 128Bit.
IPB 120 :Profildaten
I 100 :Profildaten
L 50x5 :Profildaten
hash: 2 hash: 7 hash: 5
E. Baeck (Uni-DUE) Folien-Skript (O) 30 / 36
Container-Klassen Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten untereinem Schlussel (ein beliebiger String).
Hash-Funktion bildet Schlussel auf Index-Wert ab.
Kollision, falls mehrere Schlussel den selben Index erhalten.
Daten mit selbem Index werden oft in Listen (Buckets) abgelegt.
Durch die Reduktion der Listenlange reduziert sich der Suchaufwand.
Prinzipiell kann eine Collection als Liste entarten.
MD5-Hash codiert Passworte in 128Bit.
IPB 120 :Profildaten
I 100 :Profildaten
L 50x5 :Profildaten
hash: 2 hash: 7 hash: 5
L 60x5 :Profildaten
E. Baeck (Uni-DUE) Folien-Skript (O) 30 / 36
Container-Klassen Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten untereinem Schlussel (ein beliebiger String).Hash-Funktion bildet Schlussel auf Index-Wert ab.Kollision, falls mehrere Schlussel den selben Index erhalten.Daten mit selbem Index werden oft in Listen (Buckets) abgelegt.Durch die Reduktion der Listenlange reduziert sich der Suchaufwand.
Prinzipiell kann eine Collection als Liste entarten.MD5-Hash codiert Passworte in 128Bit.
Anfrage mitSchlussel
Hash-Generator
IPB 120 :Profildaten
I 100 :Profildaten
L 50x5 :Profildaten
L 60x5 :Profildaten
hash: 2 hash: 7 hash: 5
E. Baeck (Uni-DUE) Folien-Skript (O) 30 / 36
Container-Klassen Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten untereinem Schlussel (ein beliebiger String).Hash-Funktion bildet Schlussel auf Index-Wert ab.Kollision, falls mehrere Schlussel den selben Index erhalten.Daten mit selbem Index werden oft in Listen (Buckets) abgelegt.Durch die Reduktion der Listenlange reduziert sich der Suchaufwand.Prinzipiell kann eine Collection als Liste entarten.
MD5-Hash codiert Passworte in 128Bit.
Anfrage mitSchlussel
Hash-Generator
IPB 120 :Profildaten
I 100 :Profildaten
L 50x5 :Profildaten
L 60x5 :Profildaten
hash: 2 hash: 7 hash: 5
Listenlange = 2 anstatt 4
E. Baeck (Uni-DUE) Folien-Skript (O) 30 / 36
Container-Klassen Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten untereinem Schlussel (ein beliebiger String).
Hash-Funktion bildet Schlussel auf Index-Wert ab.
Kollision, falls mehrere Schlussel den selben Index erhalten.
Daten mit selbem Index werden oft in Listen (Buckets) abgelegt.
Durch die Reduktion der Listenlange reduziert sich der Suchaufwand.
Prinzipiell kann eine Collection als Liste entarten.
MD5-Hash codiert Passworte in 128Bit.
Anfrage mitSchlussel
Hash-Generator
IPB 120 :Profildaten
I 100 :Profildaten
L 50x5 :Profildaten
L 60x5 :Profildaten
hash: 2
Listenlange = 4
E. Baeck (Uni-DUE) Folien-Skript (O) 30 / 36
Container-Klassen Collection-Container
Maps, Dictionaries und die VBA Collection
Die Collection (auch Map, Dictionary, Hash) speichert Daten untereinem Schlussel (ein beliebiger String).
Hash-Funktion bildet Schlussel auf Index-Wert ab.
Kollision, falls mehrere Schlussel den selben Index erhalten.
Daten mit selbem Index werden oft in Listen (Buckets) abgelegt.
Durch die Reduktion der Listenlange 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) Folien-Skript (O) 30 / 36
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 Datensatze.
Add ubernimmt einen Datensatze mit bzw. ohne Schlussel.
Item liest einen Datensatz (mit Index oder Schlussel)
Remove entfernt einen Datensatz (mit Index oder Schlussel)
E. Baeck (Uni-DUE) Folien-Skript (O) 31 / 36
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 Datensatze.
Add ubernimmt einen Datensatze mit bzw. ohne Schlussel.
Item liest einen Datensatz (mit Index oder Schlussel)
Remove entfernt einen Datensatz (mit Index oder Schlussel)
Collection
integer: Count
Add(..)Item(..)Remove(..)
E. Baeck (Uni-DUE) Folien-Skript (O) 31 / 36
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 Datensatze.
Add ubernimmt einen Datensatze mit bzw. ohne Schlussel.
Item liest einen Datensatz (mit Index oder Schlussel)
Remove entfernt einen Datensatz (mit Index oder Schlussel)
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
’ Datensate prufen
n = Liste.Count
End Sub
Nach Listenaufbau wird die Anzahl dergespeicherten Datensatze mit Count ermittelt.
E. Baeck (Uni-DUE) Folien-Skript (O) 31 / 36
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 Datensatze.
Add ubernimmt einen Datensatze mit bzw. ohne Schlussel.
Item liest einen Datensatz (mit Index oder Schlussel)
Remove entfernt einen Datensatz (mit Index oder Schlussel)
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
’ Datensate prufen
n = Liste.Count
End Sub
Hier wird mit Add ein Datensatz ohneSchlussel in die Collection ubernommen.
E. Baeck (Uni-DUE) Folien-Skript (O) 31 / 36
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 Datensatze.
Add ubernimmt einen Datensatze mit bzw. ohne Schlussel.
Item liest einen Datensatz (mit Index oder Schlussel)
Remove entfernt einen Datensatz (mit Index oder Schlussel)
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)
Mit Add werden 10 Punkt Instanzen in dieListe aufgenommen. Schlussel ist
”Punkt
[Nr]“. In einem zweiten Schritt wird dieInstanz des 3. Punktes mit der Methode Itemaus der Liste geholt. Item arbeite mit Indexund Schlussel.
E. Baeck (Uni-DUE) Folien-Skript (O) 31 / 36
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 Datensatze.Add ubernimmt einen Datensatze mit bzw. ohne Schlussel.Item liest einen Datensatz (mit Index oder Schlussel)Remove entfernt einen Datensatz (mit Index oder Schlussel)
Sub CreateAndDeleteCollection()
Dim Liste As New Collection
Dim Pkt As Punkt
’ Aufbau der Liste
...
’ Datensate prufen
n = Liste.Count
’ Loschen einer Collection
For i = 1 To n
Set Pkt = Liste(1)
Set Pkt = Nothing
Liste.Remove (1)
Next
Set Liste = Nothing
End Sub
Das Loschen des Container-Inhalts erfolgt hierdurch fortlaufendes Loschen des erstenDatensatzes bis alle Datensatze entfernt sind.Prinzip des Zigarettenautomaten =Entnehmen bis leer. Es ist darauf zu achten,dass nicht nur der Container-Verweis sondernauch die gespeicherte Instanz selbst geloschtwird. Im letzten Schritt wird der Containerselbst geloscht.
E. Baeck (Uni-DUE) Folien-Skript (O) 31 / 36
Container-Klassen Collection-Container
Aufbau und Loschen einer Liste/Collection
Aufbau einer Liste mit Datenelementen.
Es wird ein neuer Knoten erzeugt,
das Datenobjekt wird erzeugt und der Zeiger gesetzt.
Knoten
Knoten: nextDaten: data
E. Baeck (Uni-DUE) Folien-Skript (O) 32 / 36
Container-Klassen Collection-Container
Aufbau und Loschen einer Liste/Collection
Aufbau einer Liste mit Datenelementen.
Es wird ein neuer Knoten erzeugt,
das Datenobjekt wird erzeugt und der Zeiger gesetzt.
Knoten
Knoten: nextDaten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE) Folien-Skript (O) 32 / 36
Container-Klassen Collection-Container
Aufbau und Loschen einer Liste/Collection
Aufbau einer Liste mit Datenelementen.
Es wird ein neuer Knoten erzeugt,
das Datenobjekt wird erzeugt und der Zeiger gesetzt.
Knoten
Knoten: nextDaten: data
Daten
Datensatz 1
Knoten
Knoten: nextDaten: data
E. Baeck (Uni-DUE) Folien-Skript (O) 32 / 36
Container-Klassen Collection-Container
Aufbau und Loschen einer Liste/Collection
Aufbau einer Liste mit Datenelementen.
Es wird ein neuer Knoten erzeugt,
das Datenobjekt wird erzeugt und der Zeiger gesetzt.
Knoten
Knoten: nextDaten: data
Daten
Datensatz 1
Knoten
Knoten: nextDaten: data
Daten
Datensatz 2
E. Baeck (Uni-DUE) Folien-Skript (O) 32 / 36
Container-Klassen Collection-Container
Aufbau und Loschen einer Liste/Collection
Aufbau einer Liste mit Datenelementen.
Es wird ein neuer Knoten erzeugt,
das Datenobjekt wird erzeugt und der Zeiger gesetzt.
Knoten
Knoten: nextDaten: data
Daten
Datensatz 1
Knoten
Knoten: nextDaten: data
Daten
Datensatz 2
Knoten
Knoten: nextDaten: data
E. Baeck (Uni-DUE) Folien-Skript (O) 32 / 36
Container-Klassen Collection-Container
Aufbau und Loschen einer Liste/Collection
Aufbau einer Liste mit Datenelementen.
Es wird ein neuer Knoten erzeugt,
das Datenobjekt wird erzeugt und der Zeiger gesetzt.
Knoten
Knoten: nextDaten: data
Daten
Datensatz 1
Knoten
Knoten: nextDaten: data
Daten
Datensatz 2
Knoten
Knoten: nextDaten: data
Daten
Datensatz 3
E. Baeck (Uni-DUE) Folien-Skript (O) 32 / 36
Container-Klassen Collection-Container
Aufbau und Loschen einer Liste/Collection
Das Loschen einer Liste erfordert das Loschen Daten-Instanzen
und das Loschen der Knoten-Instanzen.
Daten
Datensatz 1
Knoten
Knoten: nextDaten: data
Daten
Datensatz 2
Knoten
Knoten: nextDaten: data
Daten
Datensatz 3
Knoten
Knoten: nextDaten: data
E. Baeck (Uni-DUE) Folien-Skript (O) 32 / 36
Container-Klassen Collection-Container
Aufbau und Loschen einer Liste/Collection
Das Loschen einer Liste erfordert das Loschen Daten-Instanzen
und das Loschen der Knoten-Instanzen.
Knoten
Knoten: nextDaten: data
Daten
Datensatz 2
Knoten
Knoten: nextDaten: data
Daten
Datensatz 3
Knoten
Knoten: nextDaten: data
Daten
Datensatz 1
E. Baeck (Uni-DUE) Folien-Skript (O) 32 / 36
Container-Klassen Collection-Container
Aufbau und Loschen einer Liste/Collection
Das Loschen einer Liste erfordert das Loschen Daten-Instanzen
und das Loschen der Knoten-Instanzen.
Daten
Datensatz 2
Knoten
Knoten: nextDaten: data
Daten
Datensatz 3
Knoten
Knoten: nextDaten: data
Daten
Datensatz 1
Knoten
Knoten: nextDaten: data
E. Baeck (Uni-DUE) Folien-Skript (O) 32 / 36
Container-Klassen Collection-Container
Aufbau und Loschen einer Liste/Collection
Das Loschen einer Liste erfordert das Loschen Daten-Instanzen
und das Loschen der Knoten-Instanzen.
Knoten
Knoten: nextDaten: data
Daten
Datensatz 3
Knoten
Knoten: nextDaten: data
Daten
Datensatz 1
Knoten
Knoten: nextDaten: data
Daten
Datensatz 2
E. Baeck (Uni-DUE) Folien-Skript (O) 32 / 36
Container-Klassen Collection-Container
Aufbau und Loschen einer Liste/Collection
Das Loschen einer Liste erfordert das Loschen Daten-Instanzen
und das Loschen der Knoten-Instanzen.
Daten
Datensatz 3
Knoten
Knoten: nextDaten: data
Daten
Datensatz 1
Knoten
Knoten: nextDaten: data
Daten
Datensatz 2
Knoten
Knoten: nextDaten: data
E. Baeck (Uni-DUE) Folien-Skript (O) 32 / 36
Container-Klassen Collection-Container
Aufbau und Loschen einer Liste/Collection
Das Loschen einer Liste erfordert das Loschen Daten-Instanzen
und das Loschen der Knoten-Instanzen.
Knoten
Knoten: nextDaten: data
Daten
Datensatz 1
Knoten
Knoten: nextDaten: data
Daten
Datensatz 2
Knoten
Knoten: nextDaten: data
Daten
Datensatz 3
E. Baeck (Uni-DUE) Folien-Skript (O) 32 / 36
Container-Klassen Performance
Allgemeines zur Performance-Analyse
Bei der Performance-Analyse der Container-Klassen sind dieSpeicheralgorithmen und die Performance der Datenstrukturen zumessen.
Es ist darauf zu achten, dass Zeiten, die mit den zu analysierendenEigenschaften nichts zu tun haben, vernachlassigt werden konnen(z.B. Programmladezeiten).
Die Performance-Probleme treten haufig erst bei sehr großenProblemen auf, hier bei einer großen Anzahl zu speichernderDatensatze.
Messungen an großen Systemen sind daher wesentlichaussagekraftiger als Messungen an kleinen Systemen. Benchmarks inder Großenordung Millisekunden sind damit i.A. wenig aussagekraftig.
E. Baeck (Uni-DUE) Folien-Skript (O) 33 / 36
Container-Klassen Performance
Allgemeines zur Performance-Analyse
Bei der Performance-Analyse der Container-Klassen sind dieSpeicheralgorithmen und die Performance der Datenstrukturen zumessen.
Es ist darauf zu achten, dass Zeiten, die mit den zu analysierendenEigenschaften nichts zu tun haben, vernachlassigt werden konnen(z.B. Programmladezeiten).
Die Performance-Probleme treten haufig erst bei sehr großenProblemen auf, hier bei einer großen Anzahl zu speichernderDatensatze.
Messungen an großen Systemen sind daher wesentlichaussagekraftiger als Messungen an kleinen Systemen. Benchmarks inder Großenordung Millisekunden sind damit i.A. wenig aussagekraftig.
E. Baeck (Uni-DUE) Folien-Skript (O) 33 / 36
Container-Klassen Performance
Allgemeines zur Performance-Analyse
Bei der Performance-Analyse der Container-Klassen sind dieSpeicheralgorithmen und die Performance der Datenstrukturen zumessen.
Es ist darauf zu achten, dass Zeiten, die mit den zu analysierendenEigenschaften nichts zu tun haben, vernachlassigt werden konnen(z.B. Programmladezeiten).
Die Performance-Probleme treten haufig erst bei sehr großenProblemen auf, hier bei einer großen Anzahl zu speichernderDatensatze.
Messungen an großen Systemen sind daher wesentlichaussagekraftiger als Messungen an kleinen Systemen. Benchmarks inder Großenordung Millisekunden sind damit i.A. wenig aussagekraftig.
E. Baeck (Uni-DUE) Folien-Skript (O) 33 / 36
Container-Klassen Performance
Allgemeines zur Performance-Analyse
Bei der Performance-Analyse der Container-Klassen sind dieSpeicheralgorithmen und die Performance der Datenstrukturen zumessen.
Es ist darauf zu achten, dass Zeiten, die mit den zu analysierendenEigenschaften nichts zu tun haben, vernachlassigt werden konnen(z.B. Programmladezeiten).
Die Performance-Probleme treten haufig erst bei sehr großenProblemen auf, hier bei einer großen Anzahl zu speichernderDatensatze.
Messungen an großen Systemen sind daher wesentlichaussagekraftiger als Messungen an kleinen Systemen. Benchmarks inder Großenordung Millisekunden sind damit i.A. wenig aussagekraftig.
E. Baeck (Uni-DUE) Folien-Skript (O) 33 / 36
Container-Klassen Performance
Array-Container-Performance
Die Performance der Zugriffe ist dimensionsunabhangig.
Die Aufbau-Performance der Arrays hangt ab von der Große derErweiterungsschritte.
Lasst sich eine Große eindeutig indizieren und wird mit haufigenZugriffen gerechnet, so ist ein Array die beste Container-Form.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s] Erweiterung100.000 104 0 6
51 0 1225 0 2512 0 506 0 100
200.000 48 0 5025 0 100
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 34 / 36
Container-Klassen Performance
Array-Container-Performance
Die Performance der Zugriffe ist dimensionsunabhangig.
Die Aufbau-Performance der Arrays hangt ab von der Große derErweiterungsschritte.
Lasst sich eine Große eindeutig indizieren und wird mit haufigenZugriffen gerechnet, so ist ein Array die beste Container-Form.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s] Erweiterung100.000 104 0 6
51 0 1225 0 2512 0 506 0 100
200.000 48 0 5025 0 100
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 34 / 36
Container-Klassen Performance
Array-Container-Performance
Die Performance der Zugriffe ist dimensionsunabhangig.
Die Aufbau-Performance der Arrays hangt ab von der Große derErweiterungsschritte.
Lasst sich eine Große eindeutig indizieren und wird mit haufigenZugriffen gerechnet, so ist ein Array die beste Container-Form.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s] Erweiterung100.000 104 0 6
51 0 1225 0 2512 0 506 0 100
200.000 48 0 5025 0 100
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 34 / 36
Container-Klassen Performance
Array-Container-Performance
Die Performance der Zugriffe ist dimensionsunabhangig.
Die Aufbau-Performance der Arrays hangt ab von der Große derErweiterungsschritte.
Lasst sich eine Große eindeutig indizieren und wird mit haufigenZugriffen gerechnet, so ist ein Array die beste Container-Form.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s] Erweiterung100.000 104 0 6
51 0 1225 0 2512 0 506 0 100
200.000 48 0 5025 0 100
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 34 / 36
Container-Klassen Performance
Performance einer einfach verketteten Liste
Die Performance der Zugriffe ist dimensionsabhangig.
Die Performance des Aufbaus ist quasi dimensionsunabhangig.
Fur sequentiell abzuarbeitende Datenbestande (Ringbuffer, Stack,etc.) sind Listen geeignet.
Direkte Zugriffe sind sehr langsam.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s]20.000 0 1030.000 1 2240.000 1 3950.000 1 63100.000 1 260
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 35 / 36
Container-Klassen Performance
Performance einer einfach verketteten Liste
Die Performance der Zugriffe ist dimensionsabhangig.
Die Performance des Aufbaus ist quasi dimensionsunabhangig.
Fur sequentiell abzuarbeitende Datenbestande (Ringbuffer, Stack,etc.) sind Listen geeignet.
Direkte Zugriffe sind sehr langsam.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s]20.000 0 1030.000 1 2240.000 1 3950.000 1 63100.000 1 260
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 35 / 36
Container-Klassen Performance
Performance einer einfach verketteten Liste
Die Performance der Zugriffe ist dimensionsabhangig.
Die Performance des Aufbaus ist quasi dimensionsunabhangig.
Fur sequentiell abzuarbeitende Datenbestande (Ringbuffer, Stack,etc.) sind Listen geeignet.
Direkte Zugriffe sind sehr langsam.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s]20.000 0 1030.000 1 2240.000 1 3950.000 1 63100.000 1 260
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 35 / 36
Container-Klassen Performance
Performance einer einfach verketteten Liste
Die Performance der Zugriffe ist dimensionsabhangig.
Die Performance des Aufbaus ist quasi dimensionsunabhangig.
Fur sequentiell abzuarbeitende Datenbestande (Ringbuffer, Stack,etc.) sind Listen geeignet.
Direkte Zugriffe sind sehr langsam.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s]20.000 0 1030.000 1 2240.000 1 3950.000 1 63100.000 1 260
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 35 / 36
Container-Klassen Performance
Performance einer einfach verketteten Liste
Die Performance der Zugriffe ist dimensionsabhangig.
Die Performance des Aufbaus ist quasi dimensionsunabhangig.
Fur sequentiell abzuarbeitende Datenbestande (Ringbuffer, Stack,etc.) sind Listen geeignet.
Direkte Zugriffe sind sehr langsam.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s]20.000 0 1030.000 1 2240.000 1 3950.000 1 63100.000 1 260
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 35 / 36
Container-Klassen Performance
Performance der VBA-build-in-Collection
Die Performance der Zugriffe ist dimensionsabhangig.
Die Performance des Aufbaus ist quasi dimensionsunabhangig.
Geeignet, falls Schlussel, keine Indizierung verwendet wird.
Direkte Zugriffe schneller als bei Listen, langsamer als bei Arrays.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s]30.000 0 150.000 0 4100.000 0 20130.000 0 33150.000 0 46200.000 0 89
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 36 / 36
Container-Klassen Performance
Performance der VBA-build-in-Collection
Die Performance der Zugriffe ist dimensionsabhangig.
Die Performance des Aufbaus ist quasi dimensionsunabhangig.
Geeignet, falls Schlussel, keine Indizierung verwendet wird.
Direkte Zugriffe schneller als bei Listen, langsamer als bei Arrays.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s]30.000 0 150.000 0 4100.000 0 20130.000 0 33150.000 0 46200.000 0 89
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 36 / 36
Container-Klassen Performance
Performance der VBA-build-in-Collection
Die Performance der Zugriffe ist dimensionsabhangig.
Die Performance des Aufbaus ist quasi dimensionsunabhangig.
Geeignet, falls Schlussel, keine Indizierung verwendet wird.
Direkte Zugriffe schneller als bei Listen, langsamer als bei Arrays.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s]30.000 0 150.000 0 4100.000 0 20130.000 0 33150.000 0 46200.000 0 89
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 36 / 36
Container-Klassen Performance
Performance der VBA-build-in-Collection
Die Performance der Zugriffe ist dimensionsabhangig.
Die Performance des Aufbaus ist quasi dimensionsunabhangig.
Geeignet, falls Schlussel, keine Indizierung verwendet wird.
Direkte Zugriffe schneller als bei Listen, langsamer als bei Arrays.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s]30.000 0 150.000 0 4100.000 0 20130.000 0 33150.000 0 46200.000 0 89
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 36 / 36
Container-Klassen Performance
Performance der VBA-build-in-Collection
Die Performance der Zugriffe ist dimensionsabhangig.
Die Performance des Aufbaus ist quasi dimensionsunabhangig.
Geeignet, falls Schlussel, keine Indizierung verwendet wird.
Direkte Zugriffe schneller als bei Listen, langsamer als bei Arrays.
Zufalliger Direkter ZugriffElemente Aufbau [s] Zugriff [s]30.000 0 150.000 0 4100.000 0 20130.000 0 33150.000 0 46200.000 0 89
Messung auf DELL-Notebook mit i7-Prozessor
E. Baeck (Uni-DUE) Folien-Skript (O) 36 / 36