Bauinformatik 1 - Teil 1 / OOP, Klassen in...

Preview:

Citation preview

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

Recommended