Relationen-Algebra und Persistenz Teil I



Ähnliche Dokumente
Relationen-Algebra und Persistenz Teil I

Relationen-Algebra und Persistenz Teil I

Relationen-Algebra und Persistenz Teil I

Relationen-Algebra und Persistenz Teil I

Attributdatentypen. Thomas Behr

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Datenkapselung: public / private

Die C++ Standard Template Library Andreas Obrist

1 Klassen anlegen und Objekte erzeugen

C/C++-Programmierung

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

1 Klassen anlegen und Objekte erzeugen

Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Visuelle Kryptographie. Anwendung von Zufallszahlen

SECONDO: Implementierung einer Algebra

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

U8 7. Übung U8 7. Übung

C++ Teil 10. Sven Groß. 17. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Dez / 14

19. Vererbung und Polymorphie

Secondo: Implementierung einer Algebra

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

Dynamische Speicherverwaltung

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Klassen als Datenstrukturen

Rechtsbelehrung. Java und OOP Das Buch Christian Silberbauer 144

Einstieg in die Informatik mit Java

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Secondo: Implementierung einer Algebra

Ich liebe Java && Ich liebe C# Rolf Borst

Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

Abschnitt 10: Datenstrukturen

7. Vererbung und Polymorphie

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Advanced Programming in C

Objektorientierung. Marc Satkowski 20. November C# Kurs

Informatik - Übungsstunde

Grundkurs C++ IDE Klassenhierarchien

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Grundkurs C++ IDE Klassenhierarchien

Mapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017

IT I: Heute. Klasse Object. equals, hashcode, tostring. HashSet IT I - VO 6 1

Klasse Label. class Label { Code code; List<Integer> fixuplist; // code positions to patch int adr; // address of label in code

Die Klasse string Verfasser: Christian Bartl

IT I: Heute. Klasse Object. equals, hashcode, tostring. HashSet IT I - VO 6 1

Datenkapselung: public / private

12.3 Ein Datenmodell für Listen

12 Abstrakte Klassen, finale Klassen und Interfaces

Programmierkurs Java

Programmierkurs Java

Dynamische Datentypen

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Grundlagen der Informatik

16. Dynamische Datenstrukturen

14 Abstrakte Klassen, finale Klassen, Interfaces

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

Teil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

Programmieren - C++ Templates

Mapra: C++ Teil 4. Felix Gruber, Michael Rom. 24. Mai 2016 IGPM. Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 4 24.

Programmieren in C++ Überladen von Methoden und Operatoren

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

Einführung Pointer. C-Kurs 2013, 2. Vorlesung. Nico Andy

C++ Bit-Access. Detlef Wilkening

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Prinzipien der objektorientierten Programmierung (OOP)

Kapitel 11: Vererbung Ziele von Klassen Einführung in die Informatik für struct Naturwissenschaftler und Ingenieure

Einführung in die Programmierung Vorlesungsprüfung

1 Stückweise konstante Funktionen (ca =10 Punkte)

18. Vererbung und Polymorphie

Funktionale Programmierung mit Haskell

Software Entwicklung 1

Java Closures. Prof. Dr. Nikolaus Wulff

13. Dynamische Datenstrukturen

Konstruktoren und Destruktoren Initialisierung von Objekten

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 2: Einstieg in die OOP

Algorithmen und Datenstrukturen in Java Jiri Spale, Algorithmen und Datenstrukturen in Java 1

Polymorphismus 179. Function.h. #include <string>

Grundlagen der Informatik 12. Strukturen

12. Dynamische Datenstrukturen

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Polymorphismus 44. Function.hpp. #include <string>

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

ALP II Dynamische Datenmengen Datenabstraktion

Datenkapselung: public / private class rational { r.d = 0 int n; int d; // INV: d!= Klassen rational r; r.n = 1; // error: n is private

Prof. W. Henrich Seite 1

Datenstrukturen. Ziele

Objektorientierte Programmierung mit C++ Vector und List

Objektorientierte Programmierung mit C++ SS 2007

1 Hashing und die Klasse String

Einführung in die Programmierung für NF MI. Übung 07

Einstieg in die Informatik mit Java

Crashkurs C++ - Teil 1

Transkript:

Relationen-Algebra und Persistenz Teil I Implementierungskonzepte und Anforderungen an Attributdatentypen LG Datenbanksysteme für neue Anwendungen

Inhalt FLOBs DBArrays Attributsdatentypen Folie 2

Bisher: Folie 3

Bisher: Ich kann bereits einfache Daten fester Größe verwalten. Folie 4

Bisher: Ich kann bereits einfache Daten fester Größe verwalten. Folie 5 Mein Datentyp verwaltet aber große Datenmengen.

Bisher: Ich kann bereits einfache Daten fester Größe verwalten. Folie 6 Mein Datentyp verwaltet aber große Datenmengen. Mein Datentyp hat eine veränderliche Größe!

Bisher: Ich kann bereits einfache Daten fester Größe verwalten. Mein Datentyp verwaltet aber große Datenmengen. Mein Datentyp hat eine veränderliche Größe! Beispiele: Bilder, Videos, Webseiten Folie 7

Bisher: Ich kann bereits einfache Daten fester Größe verwalten. Mein Datentyp verwaltet aber große Datenmengen. Mein Datentyp hat eine veränderliche Größe! Beispiele: Bilder, Videos, Webseiten Wie speichere ich solche Daten persistent und effizient? Folie 8

FLOB Bisher: Ich kann bereits einfache Daten fester Größe verwalten. Mein Datentyp verwaltet aber große Datenmengen. Mein Datentyp hat eine veränderliche Größe! Beispiele: Bilder, Videos, Webseiten Wie speichere ich solche Daten persistent und effizient? Folie 9

FLOB Bisher: Ich kann bereits einfache Daten fester Größe verwalten. Mein Datentyp verwaltet aber große Datenmengen. Mein Datentyp hat eine veränderliche Größe! Beispiele: Bilder, Videos, Webseiten Wie speichere ich solche Daten persistent und effizient? Folie 10 FLOB = Faked Large OBject

FLOB Folie 11

FLOB Folie 12 Datenstruktur zur Speicherung beliebiger Datenmengen

FLOB Folie 13 Datenstruktur zur Speicherung beliebiger Datenmengen Aber: Das Objekt muss insgesamt im Hauptspeicher darstellbar sein!

FLOB Folie 14 Datenstruktur zur Speicherung beliebiger Datenmengen Eingebauter Persistenzmechanismus

FLOB Folie 15 Datenstruktur zur Speicherung beliebiger Datenmengen Eingebauter Persistenzmechanismus Verwaltet unstrukturierte Speicherblöcke (wie malloc)

FLOB Folie 16 Datenstruktur zur Speicherung beliebiger Datenmengen Eingebauter Persistenzmechanismus Verwaltet unstrukturierte Speicherblöcke (wie malloc) Zugriff mittels spezieller Funktionen und eines offsets

FLOB Folie 17 Datenstruktur zur Speicherung beliebiger Datenmengen Eingebauter Persistenzmechanismus Verwaltet unstrukturierte Speicherblöcke (wie malloc) Zugriff mittels spezieller Funktionen und eines offsets

FLOB Datenstruktur zur Speicherung beliebiger Datenmengen Eingebauter Persistenzmechanismus Verwaltet unstrukturierte Speicherblöcke (wie malloc) Zugriff mittels spezieller Funktionen und eines offsets class FLOB { FLOB( size_t size ); size_t Size() const; void Put( size_t offset, size_t length, const void *source ); void Get( size_t offset, const char **target, const bool paged = false ) const; void Resize( size_t size ); void Clean(); void Destroy(); } Folie 18

FLOB Datenstruktur zur Speicherung beliebiger Datenmengen Achtung! Eingebauter Persistenzmechanismus FLOBs werden direkt en bloc auf die Platte geschrieben. Verwaltet Speicherblöcke (wie Flobs werden unstrukturierte an irgendeine Stelle in den Speicher eingelesen. malloc) Verwenden Sie keine Zeiger in FLOBs, sondern offsets! Zugriff mittels spezieller Funktionen und eines offsets class FLOB { FLOB( size_t size ); size_t Size() const; void Put( size_t offset, size_t length, const void *source ); void Get( size_t offset, const char **target, const bool paged = false ) const; void Resize( size_t size ); void Clean(); void Destroy(); } Folie 19

FLOB Problem gelöst! Folie 20

FLOB Problem gelöst? Folie 21

FLOB Problem gelöst? FLOBs sind mir zu unstrukturiert. Folie 22

FLOB Problem gelöst? FLOBs sind mir zu unstrukturiert. Ich bräuchte aber eher etwas, um strukturierte Daten persistent speichern zu können. Folie 23

FLOB Problem gelöst? FLOBs sind mir zu unstrukturiert. Ich bräuchte aber eher etwas, um strukturierte Daten persistent speichern zu können. Ich will variabel viele Einträge fester Größe verwalten. Folie 24

FLOB Problem gelöst? FLOBs sind mir zu unstrukturiert. Ich bräuchte aber eher etwas, um strukturierte Daten persistent speichern zu können. Ich will variabel viele Einträge fester Größe verwalten. Eigentlich hätte ich gerne ein dynamisches array. Folie 25

FLOB Problem gelöst? FLOBs sind mir zu unstrukturiert. Ich bräuchte aber eher etwas, um strukturierte Daten persistent speichern zu können. Ich will variabel viele Einträge fester Größe verwalten. Eigentlich hätte ich gerne ein dynamisches array.??? Folie 26

DBArray Problem gelöst? FLOBs sind mir zu unstrukturiert. Ich bräuchte aber eher etwas, um strukturierte Daten persistent speichern zu können. Ich will variabel viele Einträge fester Größe verwalten. Eigentlich hätte ich gerne ein dynamisches array. Folie 27

DBArray Container für kompakte Datentypen fester Länge. Folie 28

DBArray Container für kompakte Datentypen fester Länge. Elementtyp muss einfach sein: Keine echten Zeiger! Keine FLOBs oder DBArrays als Elemente! Folie 29

DBArray Container für kompakte Datentypen fester Länge. Elementtyp muss einfach sein: Keine echten Zeiger! Keine FLOBs oder DBArrays als Elemente! DBArray ist eine Template-Klasse, die von FLOB abgeleitet ist. Ein- und Auslagerung von Datenteilen muss daher (wie beim FLOB) nicht selbst programmiert werden! Folie 30

DBArray Container für kompakte Datentypen fester Länge. Elementtyp muss einfach sein: Keine echten Zeiger! Keine FLOBs oder DBArrays als Elemente! DBArray ist eine Template-Klasse, die von FLOB abgeleitet ist. Ein- und Auslagerung von Datenteilen muss daher (wie beim FLOB) nicht selbst programmiert werden! Wird ein DBArray sortiert abgespeichert, so ist eine effiziente externe binäre Suche möglich. Folie 31

DBArray template<class DBArrayElement> class DBArray : public FLOB { DBArray( int n ); int Size() const; void Resize( const int newsize ); void Clear(); void Put( int index, const DBArrayElement& elem ); void Append( const DBArrayElement& elem ); void Get( int index, DBArrayElement const*& elem ) const; void TrimToSize(); void Sort( int (*cmp)( const void *a, const void *b) ); bool Find( const void *key, int (*cmp)( const void *a, const void *b), int& result ) const void Destroy(); [...] } Folie 32

Bisher: Einfache Datentypen. Was ging damit? Folie 33

Bisher: Einfache Datentypen. Was ging damit? Erzeugen von Objekten Anwenden von Operatoren Speichern in Datenbank, Löschen aus Datenbank Umwandlung von/zu Nested List Folie 34

Bisher: Einfache Datentypen. Was ging damit? Erzeugen von Objekten Anwenden von Operatoren Speichern in Datenbank, Löschen aus Datenbank Umwandlung von/zu Nested List Was fehlt bislang? Folie 35

Bisher: Einfache Datentypen. Was ging damit? Erzeugen von Objekten Anwenden von Operatoren Speichern in Datenbank, Löschen aus Datenbank Umwandlung von/zu Nested List Was fehlt bislang? Verwendung als Attribut in Relationen Folie 36

Attributdatentypen Bisher: Einfache Datentypen. Was ging damit? Erzeugen von Objekten Anwenden von Operatoren Speichern in Datenbank, Löschen aus Datenbank Umwandlung von/zu Nested List Was fehlt bislang? Verwendung als Attribut in Relationen Folie 37

Attributdatentypen Können in Relationen als Attribute verwendet werden. Attributdatentyp: Oberklasse Attribute, Kind DATA. Erfordernisse: Folie 38

Attributdatentypen Können in Relationen als Attribute verwendet werden. Attributdatentyp: Oberklasse Attribute, Kind DATA. Erfordernisse: Sicherstellen einer Mindest-Funktionalität (Compare, IsDefined, SetDefined, Adjacent, Print,...) Folie 39

Attributdatentypen Können in Relationen als Attribute verwendet werden. Attributdatentyp: Oberklasse Attribute, Kind DATA. Erfordernisse: Sicherstellen einer Mindest-Funktionalität (Compare, IsDefined, SetDefined, Adjacent, Print,...) Support für den automatischen Persistenzmechanismus von Tupeln (C++ kennt keine Serialisierung!) (NumOfFLOBs, GetFLOB, SizeOf, Open, Save) Folie 40

Attributdatentypen Können in Relationen als Attribute verwendet werden. Attributdatentyp: Oberklasse Attribute, Kind DATA. Erfordernisse: Sicherstellen einer Mindest-Funktionalität (Compare, IsDefined, SetDefined, Adjacent, Print,...) Support für den automatischen Persistenzmechanismus von Tupeln (C++ kennt keine Serialisierung!) (NumOfFLOBs, GetFLOB, SizeOf, Open, Save) Verwenden keine dynamischen Objekte/Zeiger! Folie 41

Attributdatentypen Können in Relationen als Attribute verwendet werden. Attributdatentyp: Oberklasse Attribute, Kind DATA. Erfordernisse: Beispiel Sicherstellen einer Mindest-Funktionalität (Compare, IsDefined, SetDefined, Adjacent, Print,...) DerSupport Datentyp aus der Polygon Algebra stellt fürpolygon den automatischen Persistenzmechanismus einen dar, der vondatentyp Tupeln (C++ kennt keine Serialisierung!) als Attribut in Relationen verwendet werden kann und (NumOfFLOBs, GetFLOB, SizeOf, Open, Save) den Speicherverwaltungstyp DBArray verwendet: Verwenden keine dynamischen Objekte/Zeiger Folie 42

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, const int *X = 0, const int *Y = 0 ); ~Polygon(); int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: DBArray<Vertex> vertices; PolygonState state; }; Folie 43

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, const int *X = 0, const int *Y = 0 ); ~Polygon(); int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: Klasse Polygon DBArray<Vertex> vertices; wird von Klasse PolygonState state; Attribute abgeleitet }; Folie 44

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, Wichtig: const int *X = 0, Bei Mehrfachvererbung darf keine Klasse mehrfach const int *Y = 0 ); von ~Polygon(); derselben Klasse (z.b. Attribute) erben. Sonst: Probleme bei der Typkonvertierung (cast). int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: Klasse Polygon DBArray<Vertex> vertices; wird von Klasse PolygonState state; Attribute abgeleitet }; Folie 45

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, const int *X = 0, const int *Y = 0 ); ~Polygon(); int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: DBArray<Vertex> vertices; PolygonState state; }; Folie 46

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, const int *X = 0, const int *Y = 0 ); ~Polygon(); int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] Standard-Konstruktor private: DBArray<Vertex> vertices; Wird vom Persistenzmechanismus verwendet. PolygonState state; Darf das Objekt nicht verändern. }; Folie 47

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, Wichtig: const int *X = 0, int *Y = 0 ); Vermeiden Sie die Nutzung desconst Standard-Konstruktors. ~Polygon(); Diese führt häufig wegen uninitialisierter Werte zu Fehlern. Initialisieren Sie Objekte mittels anderer Konstruktoren. int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] Standard-Konstruktor private: DBArray<Vertex> vertices; Wird vom Persistenzmechanismus verwendet. PolygonState state; Darf das Objekt nicht verändern. }; Folie 48

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, const int *X = 0, const int *Y = 0 ); ~Polygon(); int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: DBArray<Vertex> vertices; PolygonState state; }; Folie 49

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, const int *X = 0, const int *Y = 0 ); ~Polygon(); int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: Einziges DBArray<Vertex> vertices; FLOB-Objekt PolygonState state; in Polygon }; Folie 50

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, const int *X = 0, const int *Y = 0 ); ~Polygon(); int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: DBArray<Vertex> vertices; PolygonState state; }; Folie 51

Attributdatentyp: Polygon Anzahl der FLOBs zurückgeben: int class Polygon : public Attribute Polygon::NumOfFLOBs() const { { public: return 1; Polygon() {} } Polygon( const int n, const int *X = 0, const int *Y = 0 ); ~Polygon(); int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: DBArray<Vertex> vertices; PolygonState state; }; Folie 52

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, const int *X = 0, const int *Y = 0 ); ~Polygon(); int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: DBArray<Vertex> vertices; PolygonState state; }; Folie 53

Attributdatentyp: Polygon Den i-ten FLOB zurückgeben: FLOB *Polygon::GetFLOB(const int i) class Polygon : public Attribute { { assert( i >= 0 && public: i < NumOfFLOBs() ); Polygon() {} return &vertices; Polygon( const int n, const int *X = 0, } const int *Y = 0 ); ~Polygon(); int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: DBArray<Vertex> vertices; PolygonState state; }; Folie 54

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, const int *X = 0, const int *Y = 0 ); ~Polygon(); int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: DBArray<Vertex> vertices; PolygonState state; }; Folie 55

Attributdatentyp: Polygon int Compare(const Attribute* rhs) const; Falls beide Objekte definiert: class Polygon : public Attribute *this < *rhs -1 { *this = *rhs 0 public: Polygon() {} *this > *rhs 1 Polygon( const int n, const int *X = 0, Sonst: const int *Y *this = 0 ); < *rhs undef x def -1: ~Polygon(); undef x undef 0: *this = *rhs defconst; x undef 1: *this > *rhs int NumOfFLOBs() FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: DBArray<Vertex> vertices; PolygonState state; }; Folie 56

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, const int *X = 0, const int *Y = 0 ); ~Polygon(); int NumOfFLOBs() const; FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: DBArray<Vertex> vertices; PolygonState state; }; Folie 57

Attributdatentyp: Polygon Weitere zu überschreibende Funktionen: class Polygon : public Attribute { bool Adjacent(const Attribute*) const; Polygon *Clone() const; public: size_t Sizeof() const; Polygon() {} Polygon( const int n, const int *X = 0, Eigentlich const int *Y bereits = 0 );ererbte Funktionen: ~Polygon(); int NumOfFLOBs() const;bool IsDefined() const; FLOB *GetFLOB(const intvoid i);setdefined( bool defined int Compare(const Attribute*) const; [...] private: DBArray<Vertex> vertices; PolygonState state; ); }; Folie 58

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, const int *X = 0, Wichtig: const int *Y = 0 ); Überschreibt man diese Funktionen nicht, z.b. weil man ~Polygon(); sich im Namen mit Groß- oder Kleinschreibung vertan hat, führt dies int NumOfFLOBs() const; mitunter zu Speicherfehlern! FLOB *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: DBArray<Vertex> vertices; PolygonState state; }; Folie 59

Noch Fragen?! Folie 60