Relationen-Algebra und Persistenz Teil I

Ähnliche Dokumente
Relationen-Algebra und Persistenz Teil I

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

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

C/C++-Programmierung

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

Die C++ Standard Template Library Andreas Obrist

Visuelle Kryptographie. Anwendung von Zufallszahlen

Secondo: Implementierung einer Algebra

Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

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

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

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

U8 7. Übung U8 7. Übung

1 Klassen anlegen und Objekte erzeugen

Grundkurs C++ IDE Klassenhierarchien

Programmierkurs C++ Templates & STL (1/2)

Objektorientierte Programmierung Studiengang Medieninformatik

Grundkurs C++ IDE Klassenhierarchien

Prof. Dr. Wolfgang Schramm. Vorlesung. Techniken der Programmentwicklung. Exkurs: Anonyme Klassen

Objektorientierte Programmierung Studiengang Medieninformatik

12 Abstrakte Klassen, finale Klassen und Interfaces

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Informatik I (D-MAVT)

1 Klassen anlegen und Objekte erzeugen

Prinzipien der objektorientierten Programmierung (OOP)

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

C++ - Objektorientierte Programmierung Konstante und statische Elemente

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

Begriffe 1 (Wiederholung)

Einstieg in die Informatik mit Java

Objektorientierte Programmierung mit C++ Vector und List

Klassen als Datenstrukturen

Dynamische Speicherverwaltung

19. Vererbung und Polymorphie

12.3 Ein Datenmodell für Listen

14 Abstrakte Klassen, finale Klassen, Interfaces

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

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

Vererbung und Polymorphie

Grundlagen der Informatik

Advanced Programming in C

Java I Vorlesung 6 Referenz-Datentypen

Dynamische Datentypen

Einstieg in die Informatik mit Java

1 Abstrakte Klassen, finale Klassen und Interfaces

Fragen zur OOP in Java

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen

6. Globalübung (zu Übungsblatt 8)

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

1 Hashing und die Klasse String

1 Klassen und Objekte

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Einstieg in die Informatik mit Java

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

Vererbung, Polymorphie

55 Ring-Queue. size. push. clear. get. Reinhard Schiedermeier / Klaus Köhler, Das Java-Praktikum, dpunkt.verlag, ISBN

Exkurs: ANONYME KLASSEN. Techniken der Programmentwicklung Prof. Dr. Wolfgang Schramm

Prof. W. Henrich Seite 1

Javakurs für Anfänger

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

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

SECONDO: Implementierung einer Algebra

Java I Vorlesung Collections

C++ - Objektorientierte Programmierung Vererbung

::Zweck. Sicherstellung, dass nur eine Instanz einer bestimmten Klasse existiert

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache:

Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

7 Vererbung. Modul Programmieren mit C++ Kapitel Vererbung

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

C++ Teil 7. Sven Groß. 3. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 3. Juni / 16

Die Klasse java.lang.object. Thorsten Treffer

Einführung in C# Teil 3. Matthias Nübling

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

HSR Rapperswil 2001 Markus Rigling. Programmieren: Templates Auflage

Übung Algorithmen und Datenstrukturen

Objektorientierte Programmierung mit C++ SS 2007

Datenkapselung: public / private

Einführung in C++ Operatoren überladen (Klassen)

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

Programmieren in Java

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

Programmieren in C++ Überladen von Methoden und Operatoren

Java Einführung Vererbung und Polymorphie. Kapitel 13

Container für eine Folge gleichartiger Daten. Dynamische Datentypen. Probleme mit Feldern...aber nicht mit std::vector. ... und auch std::vector

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Objektorientierte Programmierung. Kapitel 14: Interfaces

Programmieren - C++ Templates

Dynamische Speicherverwaltung

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

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. Mein Datentyp verwaltet aber große Datenmengen. Folie 5

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! Folie 6

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? Flob = Faked Large OBject Folie 10

Flob Folie 11

Flob Datenstruktur zur Speicherung beliebiger Datenmengen Folie 12

Flob Datenstruktur zur Speicherung beliebiger Datenmengen Aber: Das Objekt muss insgesamt im Hauptspeicher darstellbar sein! (Zumindest für einige Operationen) Folie 13

Flob Datenstruktur zur Speicherung beliebiger Datenmengen Eingebauter Persistenzmechanismus Folie 14

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

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

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

Flob Datenstruktur zur Speicherung beliebiger Datenmengen Eingebauter Persistenzmechanismus Verwaltet unstrukturierte Speicherblöcke (wie malloc) Zugriff mittels spezieller Funktionen und eines offsets class Flob { Flob( const SmiSize size ); size_t Size() const; bool write(const char* buffer, const SmiSize length, const SmiSize offset); bool read(char* buffer, const SmiSize length, const SmiSize offset); void resize( size_t size ); void clean(); void destroy(); } Folie 18

Flob Achtung! Datenstruktur zur Speicherung beliebiger Datenmengen Eingebauter Flobs werden Persistenzmechanismus direkt en bloc auf die Platte geschrieben. Flobs Verwaltet werden unstrukturierte an irgendeine Stelle Speicherblöcke in den Speicher (wie eingelesen. malloc) Zugriff Verwenden mittels Sie spezieller keine Zeiger Funktionen in Flobs, und eines sondern offsets offsets! class Flob { Flob( const SmiSize size ); size_t Size() const; bool write(const char* buffer, const SmiSize length, const SmiSize offset); bool read(char* buffer, const SmiSize length, const SmiSize offset); 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( const int n ); int Size() const; void resize( const int newsize ); void clean(); void Put( const int index, const DbArrayElement& elem ); void Append( const DbArrayElement& elem ); void Get( const int index, DbArrayElement &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,...) Der Support Datentyp für Polygon den automatischen aus der Polygon Persistenzmechanismus Algebra stellt einen von Datentyp Tupeln dar, (C++ derkennt keine Serialisierung!) (NumOfFLOBs, als Attribut in Relationen verwendet werden kann und 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: DbArray<Vertex> vertices; PolygonState state; }; Klasse Polygon wird von Klasse Attribute abgeleitet Folie 44

Attributdatentyp: Polygon class Polygon : public Attribute { public: Polygon() {} Polygon( const int n, const Wichtig: int *X = 0, Bei Mehrfachvererbung darf keine const Klasse int mehrfach *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: DbArray<Vertex> vertices; PolygonState state; }; Klasse Polygon wird von Klasse 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; [...] private: DbArray<Vertex> vertices; PolygonState state; }; Standard-Konstruktor Wird vom Persistenzmechanismus verwendet. 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, Vermeiden Sie die Nutzung des Standard-Konstruktors. const int *Y = 0 ); ~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; [...] private: DbArray<Vertex> vertices; PolygonState state; }; Standard-Konstruktor Wird vom Persistenzmechanismus verwendet. 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: DbArray<Vertex> vertices; PolygonState state; }; Nicht-Standard-Konstruktor Mindestens einer muss implementiert werden (z.b. mit einem bool Parameter zum Setzen von defined). Folie 50

Attributdatentyp: Polygon Wichtig: In der Implentierung von Nicht-Standard-Konstruktoren muss zuerst ein Nicht-Standardkonstruktor der direkten Oberklasse als Initialisierer class Polygon : public Attribute { public: aufgerufen Polygon() werden. {} Beispiel: Polygon( const int n, const int *X = 0, Polygon( const int n, const const int *X, int const *Y = 0 int ); *Y) ~Polygon(); : Attribute(true) {... } int NumOfFLOBs() const; Flob *GetFLOB(const int i); int Compare(const Attribute*) const; [...] private: DbArray<Vertex> vertices; PolygonState state; }; Nicht-Standard-Konstruktor Mindestens einer muss implementiert werden (z.b. mit einem bool Parameter zum Setzen von defined). Folie 51

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; Einziges Flob Objekt in Polygon 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 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 54

Attributdatentyp: Polygon int class Polygon : public Attribute { public: Polygon() {} Anzahl der Flobs zurückgeben: Polygon::NumOfFLOBs() const { return 1; } 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 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 56

Attributdatentyp: Polygon Den i-ten Flob zurückgeben: Flob *Polygon::GetFLOB(const int i) class Polygon : public Attribute { { public: assert( i >= 0 && Polygon() {} i < NumOfFLOBs() ); Polygon( const int return n, const &vertices; 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 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 58

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

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 60

Attributdatentyp: Polygon class Polygon : public Attribute { public: Weitere zu überschreibende Funktionen: bool Adjacent(const Attribute*) const; Polygon *Clone() const; size_t Sizeof() const; void CopyFrom(const Attribute* right); size_t HashValue() const; Polygon() {} Polygon( const int n, const int *X = 0, Ererbte Funktionen: const int *Y = 0 ); ~Polygon(); bool IsDefined() const; NICHT überschreiben! void SetDefined( bool defined ); Bei Überschreiben Attribute::SetDefined(...) int NumOfFLOBs() const; Flob *GetFLOB(const aufrufen! int i); int Compare(const Attribute*) const; [...] private: DbArray<Vertex> vertices; PolygonState state; }; Folie 61

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

Noch Fragen?! Folie 63