Αντικειµενοστρεφείς Βάσεις εδοµένων. Περιεχόµενα

Σχετικά έγγραφα
ΤΟ ODMG ΚΑΙ ΟΙ ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΠΟΥ ΠΡΟΤΕΙΝΕΙ. Γλώσσα Ορισμού Αντικειμένων (Object Definition Language - ODL)

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΕΙΣ ΒΑΣΕΙΣ Ε ΟΜΕΝΩΝ

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

(Διαφάνειες Νίκου Βιδάκη)

Wrapper Classes, Abstract Classes and Interfaces

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

2.1 Αντικειµενοστρεφής προγραµµατισµός

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

Αντικειµενοστρεφής Προγραµµατισµός

Οντοκεντρικός Προγραμματισμός

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

Π2 Το Σύστηµα Κανόνων CLIPS

Α. Ερωτήσεις Ανάπτυξης

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Διαγράμματα Κλάσεων στη Σχεδίαση

Κλάσεις και Αντικείµενα

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

Διάλεξη 16-17: Πολυμορφισμός (Polymorphism) Διδάσκων: Παναγιώτης Ανδρέου

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού

Ειδικά Θέματα Προγραμματισμού

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Σύνθεση και Κληρονομικότητα

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

Σύνθεση και Κληρονομικότητα

Βασικά της γλώσσας JAVA

Σχεδιασμός Βάσεων Δεδομένων

Database System Concepts and Architecture (Αρχιτεκτονική, οµές, και Μοντέλα)

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

Αντικειμενοστρεφής Προγραμματισμός

Περιεχόμενο του μαθήματος

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Εισαγωγή στις βάσεις δεδομένων - Η ανατομία μιας βάσης δεδομένων

02 Αντικειμενοστρεφής Προγραμματισμός

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Εισαγωγή στην επιστήμη των υπολογιστών

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Week. 6: Java Collections

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 2 ο Μάθημα: Βασικά Θέματα Βάσεων Δεδομένων. Δρ. Κωνσταντίνος Χ.

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Πληροφοριακά Συστήµατα

Κλειδιά (keys) Λογικά, σκεφτόµαστε για «κλειδιά» σαν τα δεδοµένα (τα πεδία) εκείνα τα οποία µας επιτρέπουν να ξεχωρίσουµε τις διάφορες εγγραφές

Σχεδίαση-Ανάπτυξη Εφαρμογών Πληροφορικής - Εβδομάδα 1

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

Οντοκεντρικός Προγραμματισμός

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

Αντικειμενοστρεφής Προγραμματισμός

Αντικειµενοστραφής Προγραµµατισµός

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2016

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Εισαγωγή στον Προγραμματισμό με C++

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Κάποιες γενικές παρατηρήσεις:

ΗΥ 252: Αντικειµενοστρεφής Προγραµµατισµός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

Αρχεία και Βάσεις Δεδομένων

ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

ΗΥ 360 Αρχεία και Βάσεις Δεδομένων

Διάγραμμα Κλάσεων. Class Diagram

Αντικειμενοστρέφεια. Ορισμοί αντικειμενοστρέφειας. Κάποιες γενικές παρατηρήσεις: Περιεχόμενα. Ποιοι είναι οι ορισμοί των παρακάτω;

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, 1908

Πληροφορική 2. Γλώσσες Προγραμματισμού

ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 9ο Γλώσσες Προγραμματισμού

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

ΕΙΔΗ,ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙ- ΣΜΟΥ

ΣΧΕΣΙΑΚΟ ΜΟΝΤΕΛΟ (Relational Model) Μαθ. #10

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Μοντέλο Οντοτήτων-Συσχετίσεων. Η ανάγκη Διαγράμματα ΟΣ Σύνολα Οντοτήτων-Συσχετίσεων Απεικονίσεις Επεκτάσεις

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Entity-Relationship Model (Chen) Οντολογικό Σχεσιακό Μοντέλο

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ - ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΣΒΔ - ΕΙΣΑΓΩΓΗ ΣΤΟ ΜΟΝΤΕΛΟ ΟΝΤΟΤΗΤΩΝ ΣΥΣΧΕΤΙΣΕΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Transcript:

Αντικειµενοστρεφείς Βάσεις εδοµένων Πάνος Βασιλειάδης pvassil@cs.uoi.gr Νοέµβρης 2002 www.cs.uoi.gr/~pvassil/courses/db_advanced/ Περιεχόµενα Βασικές έννοιες αντικειµενοστρεφούς µοντέλου Ταυτότητα αντικειµένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types Σύνθετα Αντικείµενα Κληρονοµικότητα Ορισµοί και παραδείγµατα Λειτουργίες & Περιορισµοί ODMG-93 Μοντέλο Αντικειµένων Object Definition Language Object Query Language Language Bindings 2

Αντικειµενοστρεφής Προγραµµατισµός Object Oriented Programming (OOP) «µοντελοποίηση του λογισµικού και κάποιες αρχές ανάπτυξης που διευκολύνουν την κατασκευή σύνθετων συστηµάτων από ξεχωριστά συστατικά» Object-Oriented (ΟΟ) = αντικειµενοστρεφής, οντολογικός, προσανατολισµένος στα αντικείµενα ΟΧΙ αντικειµενοστραφής 3 Αντικειµενοστρεφής Προγραµµατισµός Η βασική ιδέα πίσω από τον OOP: οι οντότητες προσδιορίζονται από τις λειτουργίες τους! Ερώτηση: Ποια η βασική ιδέα πίσω από το µοντέλο οντοτήτων-συσχετίσεων, το σχεσιακό µοντέλο, τον δοµηµένο προγραµµατισµό...?? Οντότητες OOP = αντικείµενα 4

Αντικείµενα Αντικείµενο είναι µια ξεχωριστή οντότητα, που προσπαθεί να µοντελοποιήσει και να προσεγγίσει όσον το δυνατό καλύτερα, το φυσικό κόσµο. Συγκριτικά, ότι και µια εγγραφή (πλειάδα) στο σχεσιακό µοντέλο 5 Αντικείµενα Αντικείµενο συµπεριφορά Η συµπεριφορά καθορίζεται από τη διαπροσωπεία (interface) του αντικειµένου, ήτοι, από ένα σύνολο λειτουργιών τις οποίες το αντικείµενο µπορεί να επιτελέσει Η συµπεριφορά καθορίζεται ακόµα, και από τις συγκεκριµένες τιµές που έχουν τα χαρακτηριστικά του αντικειµένου. Το διάνυσµα αυτών των τιµών είναι η τιµή του αντικειµένου 6

Αντικείµενα Τα χαρακτηριστικά των αντικειµένων ονοµάζονται instance variables (ελληνιστί, πεδία, χαρακτηριστικά, µεταβλητές,...). Η υλοποίηση µιας λειτουργίας της διαπροσωπείας ενός αντικειµένου ονοµάζεται µέθοδος (το αντίστοιχο των συναρτήσεων). Η κλήση µιας λειτουργίας ενός αντικειµένου, ονοµάζεται αποστολή µηνύµατος στο αντικείµενο 7 Ένα µοντέλο Β που σέβεται τον εαυτό του διαθέτει... Οντότητες (που περιγράφουν τη δοµή των δεδοµένων) Λειτουργίες (που περιγράφουν πώς µπορούµε να επεξεργαστούµε τα δεδοµένα) Περιορισµούς ακεραιότητας (που εγγυώνται την αξιοπιστία των δεδοµένων και την καλή ποιότητα της δικής µας σχεδίασης) Εµείς θα επικεντρώσουµε στη δοµή του ΟΟ µοντέλου για Β δε σηµαίνει όµως ότι τα υπόλοιπα είναι δευτερεύοντα... 8

Για προχωρηµένους... Ο όρος «µοντέλο» είναι ατυχής. Ο κανονικός όρος είναι «µεταµοντέλο» (π.χ., µε βάση το σχεσιακό µεταµοντέλο, φτιάχνουµε τα δικά µας µοντέλα = τα σχήµατα των Β που υλοποιούµε κάθε φορά) Μια data base (κανονικά, γράφεται database) χωρίς περιορισµούς ακεραιότητας = data dump (αχούρι, σκουπιδότοπος) χωρίς λειτουργίες = data graveyard (νεκροταφείο) 9 οµή των αντικειµένων Ταυτότητα αντικειµένου Ενθυλάκωση Τύποι και Κλάσεις Σύνθετοι Τύποι Ιεραρχίες Κλάσεων Κληρονοµικότητα Πολυµορφισµός Late Binding 10

OID Object Identity Ταυτότητα Αντικειµένου: προσδιορίζει ένα αντικείµενο µονοσήµαντα στην Β εν αλλάζει ποτέ συνυπάρχει µε το αντικείµενο για όλη τη διάρκεια ζωής του αντικειµένου (object s lifetime) Απονέµεται από το σύστηµα και είναι κρυµµένο από το χρήστη Πιο προφανής χρήση: υλοποίηση αναφορών (µοίρασµα και ενηµερώσεις αντικειµένων) 11 OID Object Identifier OID: OID12 Name: Πέτρος Age: 40 Children: {OID15} OID: OID13 Name: Μαρία Age: 41 Children: {OID15} Ο Πέτρος και η Μαρία έχουν το ίδιο παιδί OID: OID15 Name: Γιάννης Age: 15 Children: {} OID: OID105 Name: Γιάννης Age: 105 Children: {} 12

Ενθυλάκωση (Encapsulation) OOP διάκριση µεταξύ καθορισµού και υλοποίησης µιας εφαρµογής, ήτοι,... Interface vs. Implementation object = interface part + implementation part 13 Ενθυλάκωση (Encapsulation) object = interface part + implementation part Τµήµα ιαπροσωπείας = ο ορισµός των λειτουργιών που µπορεί να επιτελέσει το αντικείµενο (πρβλ., υπογραφή συναρτήσεων) Τµήµα Υλοποίησης = η αναπαράσταση του αντικειµένου (όπως π.χ., σε ένα struct στη C) + η υλοποίηση των λειτουργιών (π.χ., ο κώδικας µιας συνάρτησης), ήτοι, implementation part = (data part + procedural part) 14

Ενθυλάκωση (Encapsulation) Σχεσιακό µοντέλο: αν είχαµε τον πίνακα CAR_FACTORY[NAME,CAPACITY,ADDRESS], η εφαρµογή RAISE_CAPACITY(PERCENTAGE) θα ήταν ένα εξωτερικό πρόγραµµα ΟΟ: CAR_FACTORY[NAME,CAPACITY,ADDRESS, RAISE_CAPACITY(PERCENTAGE)] 15 Ενθυλάκωση (Encapsulation) Interface Part: RAISE_CAPACITY(PERCENTAGE) Data Part: NAME,CAPACITY,ADDRESS Implementation Part: RAISE_CAPACITY(PERCENTAGE){ return CAPACITY * (1+ PERCENTAGE); } 16

Ενθυλάκωση (Encapsulation) Καµιά λειτουργία πέραν αυτών που καθορίστηκαν στο τµήµα διαπροσωπείας δεν µπορεί να εκτελεστεί! Για το προηγούµενο παράδειγµα, το ΜΟΝΟ που µπορώ να κάνω είναι να αυξήσω την παραγωγή. ΕΝ ΜΠΟΡΩ να ορίσω τιµή στο όνοµα, ή να ρωτήσω ποια είναι η δ/ση του εργοστασίου 17 Ενθυλάκωση (Encapsulation) Ενσωµατώνει, εκτός από δεδοµένα, και λειτουργίες στα αντικείµενα Αποκρύπτει τον τρόπο υλοποίησης των µεθόδων, οπότε, απεξαρτά τη διαχείριση του αντικειµένου από τη δοµή του, Επιβάλει τη διαχείριση του κάθε αντικειµένου, αυστηρά και µόνο από τις δικές του µεθόδους*, µέσω των αντίστοιχων µηνυµάτων. * Πολλές φορές θα δείτε τον όρο «µέθοδος» να χαρακτηρίζει το interface part 18

Ενθυλάκωση (Encapsulation) Από το µάθηµα Γλωσσών Προγραµµατισµού: θυµάστε τη διαφορά µεταξύ Private, Public, Protected πεδίων ; 19 Από C++ class Square{ private: int height, width; public: Square(int, int); ~Square(); int area(void); }; Square::Square(int ht, int wd) { height = ht; width = wd; } Square::~Square() { } int Square::area(){ return height*width; } 20

Τύποι και Κλάσεις Τύποι Αντιστοιχούν σε αφηρηµένους τύπους δεδοµένων (abstract data types), ήτοι, Αποτελούνται από interface part και implementation part Έχουν τιµές (values) ως στιγµιότυπα ιαισθητικά, πρόκειται για «καλούπια» αντικειµένων (για την ακρίβεια: τιµών), π.χ., σαν structs επεκτεταµένα µε µεθόδους... 21 Τύποι και Κλάσεις Κλάσεις Οµαδοποιούν αντικείµενα µε ίδιες σηµασιολογικές ιδιότητες Χτίζονται πάνω σε τύπους Έχουν αντικείµενα ως στιγµιότυπα ιαισθητικά, πρόκειται για «συλλογές» αντικειµένων, π.χ., σαν σχεσιακοί πίνακες, των οποίων το σχήµα προκύπτει από ένα τύπο... 22

Τύποι και Κλάσεις Αντιστοιχούν σε αφηρηµένους τύπους δεδοµένων (abstract data types) Αποτελούνται από interface part και implementation part Οµαδοποιούν αντικείµενα µε ίδιες σηµασιολογικές ιδιότητες Χτίζονται πάνω σε τύπους Έχουν τιµές (values) ως στιγµιότυπα Έχουν αντικείµενα ως στιγµιότυπα 23 Τιµές και Αντικείµενα Απλές (string, integer, κ.λ.π.), ή Σύνθετες (αποτελούµενες από άλλες τιµές) Είναι αναλλοίωτες (κάθε µεταβολή επιφέρει την παραγωγή νέας τιµής). Η µεταβολή γίνεται µέσω τελεστών της γλώσσας προγραµµατισµού Χαρακτηρίζονται µονοσήµαντα από την ταυτότητα αντικειµένου Μια αλλαγή σε ένα αντικείµενο επιφέρει την αλλαγή της τιµής του, χωρίς τη δηµιουργία νέου αντικειµένου Η µεταβολή γίνεται µόνο µέσω µηνυµάτων που µας παρέχει το interface του αντικειµένου 24

Τύποι και Κλάσεις add class Monument type tuple(name: string, address: Address, description: string, closing_days: list(string), admission_fee: integer) add method increase_fee(amount: integer) in class Monument 25 Τύποι και Κλάσεις Οι τύποι µοντελοποιούν τη δοµική οµοιότητα κάποιων τιµών, ενώ οι κλάσεις µοντελοποιούν τη σηµασιολογική οµοιότητα αντικειµένων Στην πράξη (π.χ., στα συστήµατα ή στα στάνταρτ): η διάκριση αυτή είναι ορατή, αν και πρακτικά όχι µεγάλη! 26

Τύποι και Κλάσεις Τύποι και Κλάσεις στην Πληροφορική γενικότερα: Τεχνητή Νοηµοσύνη: η διάκρισή τους είναι σηµαντική (π.χ., οντολογίες) Γλώσσες Προγραµµατισµού: δεν έχουν µεγάλη διαφορά, συνήθως δεν τα διακρίνουµε 27 Collection Types Σύνολα (Sets) αντικειµένων Πολυσύνολα (Bags) αντικειµένων = σύνολα µε διπλοεγγραφές Λίστες (Lists) αντικειµένων = διατεταγµένα πολυσύνολα Πίνακες (Arrays) αντικειµένων = λίστες πεπερασµένου µεγέθους Πλειάδες (Tuples) αντικειµένων = παράθεση αντικειµένων, µε συγκεκριµένο τρόπο 28

Collection Types Οι σύνθετοι τύποι είναι ορθογώνιοι: οποιοσδήποτε από αυτούς µπορεί να εφαρµοστεί σε ένα αντικείµενο, µια τιµή, ή ένα σύνθετο τύπο. tuple[set{string},set{integer},bag{string}] Μάλλον καλύτερη µετάφραση: «τύποι συλλογών» 29 Σύνθετα Αντικείµενα οµές αντικειµένων µε σχέση Part-Of Η ύπαρξη ενός αντικειµένου εξαρτάται από την ύπαρξη ενός άλλου Υλοποιούνται είτε µε φώλιασµα των αντικειµένων, είτε µε αναφορές 30

Σύνθετα Αντικείµενα OID: OID10 Name: Μαµά Καγκουρό Age: 4 Children: { [OID: OID15 Name: Μωρό Κ. Age: 0.5 Children: {}] } OID: OID12 Name: Πέτρος Age: 40 Children: {OID15} OID: OID15 Name: Γιάννης Age: 15 Children: {} 31 Σύνθετα Αντικείµενα OID: OID12 Name: Πέτρος Age: 40 Father: NULL Children: {OID15} Children Father H ίδια αναφορά έχει και την ευθεία και την ανάστροφη φορά (inverse) OID: OID15 Name: Γιάννης Age: 15 Father: OID12 Children: {} 32

Ιεραρχίες Τύπων και Κλάσεων Κληρονοµικότητα (Inheritance): Κατασκευάζουµε ένα δέντρο (ιεραρχία) κλάσεων. Κάθε κλάση που είναι κόµβος του δέντρου «κληρονοµεί», από την πατρική της κλάση όλα τα δοµικά και λειτουργικά χαρακτηριστικά της -τις instance variables και τις µεθόδους, δηλαδή. Στα χαρακτηριστικά αυτά, κάθε κλάση νοµιµοποιείται να προσθέσει τα δικά της χαρακτηριστικά και λειτουργίες. Οι ιεραρχίες αφορούν και τύπους και κλάσεις 33 Ιεραρχίες Τύπων και Κλάσεων Vehicle -Name -Weight - Color + GetName() + GetWeight + GetColor() FourWheels - MaxVelocity +GetMaxVelocity() Bike - NumSpeeds +GetNumSpeeds() Van - MaxCargo +GetMaxCargo() Car - NumDoors +GetNumDoors() 34

Ιεραρχίες Τύπων και Κλάσεων Η ιεραρχία των κλάσεων πρέπει να σέβεται την ιεραρχία των τύπων Πολλαπλή κληρονοµικότητα (Multiple Inheritance): µια κλάση έχει περισσότερους από έναν προγόνους Αφηρηµένη κλάση (abstract class): απαγορεύεται να έχει στιγµιότυπα 35 Υπερφόρτωση και πολυµορφισµός Υπερφόρτωση (overloading): Το φαινόµενο όπου δύο µηνύµατα, σε διαφορετικές κλάσεις, συµφωνούν στο interface τους Υπέρβαση (overriding): Το φαινόµενο όπου κάποιο µήνυµα υλοποιείται µε διαφορετική µέθοδο στην κορυφή της ιεραρχίας, απ ότι σε κάποιο χαµηλότερο επίπεδο 36

Υπερφόρτωση και πολυµορφισµός Vehicle -Name -Weight - Color + GetName() + GetWeight + GetColor() FourWheels - MaxVelocity +GetMaxVelocity() Bike - NumSpeeds +GetNumSpeeds() Van - MaxCargo +GetMaxCargo() +GetWeight() Car - NumDoors +GetNumDoors() 37 Υπερφόρτωση και πολυµορφισµός Late Binding: Για να υποστηριχθεί η υπέρβαση, τα ονόµατα των λειτουργιών "επιλύονται" (resolved) - µεταφράζονται σε διευθύνσεις- στο χρόνο εκτέλεσης Πολυµορφισµός (polymorphism): Το φαινόµενο όπου διαφορετικά αντικείµενα (ή κλάσεις) αντιδρούν µε διαφορετικό τρόπο στο ίδιο µήνυµα 38

Τυπικός ορισµός αντικειµένου Αντικείµενο = [OID, τιµή, κατάσταση, κλάση] OID = µοναδικός προσδιοριστής Τιµή = διάνυσµα τιµών των instance variables + τιµές επιστροφής των µεθόδων (public) Κατάσταση = διάνυσµα τιµών των instance variables βάσει του τύπου στον οποίο δοµείται το αντικείµενο (private) Κλάση = η κλάση στην οποία ανήκει το αντικείµενο 39 Τυπικός ορισµός κλάσης όνοµα κλάσης, τύπος της τιµής των στιγµιοτύπων, τύπος της κατάστασης των στιγµιοτύπων, {µηνύµατα στιγµιοτύπων}, {µέθοδοι στιγµιοτύπων}, τιµή της κλάσης, κατάσταση της κλάσης, {µηνύµατα της κλάσης}, {µέθοδοι της κλάσης} τύπος της τιµής της κλάσης, τύπος της κατάστασης της κλάσης Η κλάση είναι µια συλλογή στιγµιοτύπων αλλά είναι κι η ίδια ένα αντικείµενο οπότε ανήκει κι αυτή σε µια µετα-κλάση 40

Από το σύστηµα O 2 add class City with extension type tuple(name: string, map: Bitmap, hotels: set(hotel)) add class Monument type tuple(name: string, address: Address, description: string, closing_days: list(string), admission_fee: integer) 41 Από το σύστηµα O 2 add class Address type tuple(street: string, city: City) add class Hotel type tuple(name: string, address: Address, facilities: list(string), stars: integer, rate: float) 42

Από το σύστηµα O 2 add name Eiffel_tower: Monument, ήισοδύναµα Eiffel_tower = new(monument) add method increase_fee(amount: integer) in class Monument is private add class Historical_hotel inherits Monument, Hotel add method print_height(amount: float) in object Eiffel_tower 43 Από το σύστηµα GemStone (που ακολουθεί το παράδειγµα της Smalltalk) Object subclass: 'Department' instvarnames: #('dptid' 'dptname' 'SubDpts' 'BelongsTo' 'manager') classvars: #() constraints: #[ #[#dptid, Integer], #[#dptname, String], #[#manager, String]]. method: Department dptname ^dptname % 44

Λειτουργίες στα δεδοµένα Λειτουργίες για την ταυτότητα αντικειµένου Ταύτιση (OID = OID) Ρηχή Ισότητα (τιµή1 = τιµή2, σε επίπεδο αντικειµένων) Βαθειά Ισότητα Ασθενής (τιµή1 = τιµή2, σε επίπεδο τιµών) Ισχυρή (ασθενής + ισοµορφικοί γράφοι) 45 Λειτουργίες -Identity 46

Λειτουργίες - Shallow Equality Rectangular1: I1 Rectangular2: I2 LowerLeft Corner UpperRight Corner LowerLeft Corner UpperRight Corner X Y X Y 2 3 Ρηχή ισότητα αντικειµένων Rectangular1 = Rectangular2 5 7 47 Λειτουργίες Deep Equality Array1: I1 Array2: I4 I2 X Y I3 X Y I5 X Y I6 X Y 3 2 4 6 3 2 4 6 Array3: I7 I8 X Y 3 2 I9 X 3 Y 2 I10 X Y 4 6 ARRAY1 not deep-equal ARRAY3 (στην ισχυρή εκδοχή ισοµορφικών γράφων) ARRAY1 deep-equal ARRAY3 (στην ασθενή εκδοχή) ARRAY1 deep-equal ARRAY2 (και στις δύο εκδοχές) 48

Λειτουργίες στα δεδοµένα Λειτουργίες για bags, sets, lists Ένωση Τοµή ιαφορά DupEliminate Γενική Επιλογή (General Selection) Φώλιασµα (Nest) Από-Φώλιασµα (UnNest) Άνοιγµα (Flatten) 49 Περιορισµοί Ακεραιότητας Περιορισµοί Ακεραιότητας Κλειδιού (Key constraints) Υπαρξιακός Περιορισµός Ακεραιότητας (Existential constraint) Περιορισµοί Ακεραιότητας Μη Κενού Χαρακτηριστικού (NOT NULL contraints) Περιορισµός Συνέπειας Αντίστροφου είκτη (Inverse Link Consistency Constraint) Περιορισµός ιαχωρισιµότητας (Disjointness constraint) Περιορισµός Επικάλυψης (Covering constraint) 50

ODMG - 93 Το Object Database Management Group (ODMG) είναι µια επιτροπή που, στις αρχές της δεκαετίας του 1990, πρότεινε ένα κοινό interface (ODMG-93) στους διάφορους κατασκευαστές αντικειµενοστρεφών συστηµάτων βάσεων δεδοµένων Σήµερα: version 3.0 του στάνταρτ 51 Βασικά κοµµάτια του ODMG - 93 Μοντέλο Αντικειµένων (Object Model) Γλώσσα Ορισµού Αντικειµένων (Object Definition Language - ODL) Object Query Language - OQL C++ Language Binding Smalltalk Language Binding 52

Μοντέλο Αντικειµένων Η βασική οντότητα είναι το αντικείµενο (object) Τα αντικείµενα κατηγοριοποιούνται σε τύπους (types) Η συµπεριφορά των αντικειµένων χαρακτηρίζεται από τις λειτουργίες του Η κατάσταση (state) των αντικειµένων χαρακτηρίζεται από τις τιµές των ιδιοτήτων (properties) = attributes & relationships Εδώ: κατάσταση = τιµή 53 Μοντέλο Αντικειµένων Για κάθε λειτουργία, ο προγραµµατιστής πρέπει να καθορίσει την υπογραφή της. Κάθε λειτουργία είναι συνδεδεµένη µε µόνο ένα τύπο µπορεί να έχει ορίσµατα, να επιστρέφει µία τιµή, να έχει παρενέργειες και να καλεί µια εξαίρεση 54

Πώς δουλεύει... ηλώσεις σε ODL ή σε PL ODL Κώδικας της εφαρµογής σε PL Preprocessor για τις δηλώσεις PL Compiler metadata ODBMS runtime Application Binary Linker Database Data access Running Application 55 Γλώσσα Ορισµού Αντικειµένων (Object Definition Language, ODL) Υποστηρίζει όλες τις σηµασιολογικές δοµές του ODMG µοντέλου αντικειµένων Είναι µια γλώσσα προσδιορισµού interface signatures Είναι ανεξάρτητη από προγραµµατιστικές γλώσσες Είναι συµβατή µε την Interface Definition Language του OMG Είναι επεκτάσιµη Καθορίζει τα χαρακτηριστικά των τύπων και τις υπογραφές των µεθόδων Το ODMG-93 δεν καθορίζει κάποια συγκεκριµένη OML. Περιγράφει, δύο interfaces για τη σύνδεση των C++ και Smalltalk Είναι ανεξάρτητη από την οποιαδήποτε γλώσσα προγραµµατισµού 56

Object Definition Language, ODL interface Person ( extent people ) { attribute String name; attribute Struct Address { Unsigned Short number, String Street, String city_name} address; relationship Person spouse inverse Person::spouse; relationship Set<Person> children inverse Person::parents {order by birth_date } relationship List<Person> parents inverse Person::children; void birth (in String name); Boolean marriage (in String person_name) raises (no_such_person); Unsigned Short ancestors (out Set<Person> all_ancestors) raises (no_such_person); void move (in String new_address); }; 57 Object Definition Language, ODL interface Employee: Person ( extent employees key(name, id) ) { attribute Short id; attribute Unsigned Short annual_salary; }; interface City ( extent cities key city_code) ) { attribute Unsigned Short city_code; attribute String name; attribute Set<Person> population; }; 58

Object Query Language - OQL εν είναι από µόνη της υπολογιστικά πλήρης Παρέχει δηλωτικό τρόπο προγραµµατισµού Βασίζεται στο µοντέλο αντικειµένων του ODMG Έχει αφηρηµένο συντακτικό (abstract syntax) Έχει εύκολα καθορίσιµα semantics Έχει συντακτικό SQL-like Παρέχει την ευκολία της άµεσης διαχείρισης για collections αντικειµένων εν παρέχει τελεστές για update αλλά βασίζεται στις µεθόδους των αντικειµένων, που έχουν καθοριστεί γι' αυτό το σκοπό Βελτιστοποιείται εύκολα 59 Object Query Language - OQL Person µε τα χαρακτηριστικά name, birthdate, salary και τη µέθοδο age. Extent: Persons Employee ISA Person και τον εξειδικεύει µε την αναφορά subordinates και τη µέθοδο seniority. Extent: Employees Department, µε το χαρακτηριστικό name και την αναφορά employees, η οποία τυχαίνει να είναι και αντίστροφη (στον τύπο Employee υπάρχει η αντίστροφη αναφορά department 60

Object Query Language - OQL select distinct struct(name: x.name, hps: (select y from x.subordinates as y where y.age > 30)) from Employees x Αποτέλεσµα: set<struct(name:string,hps:bag<employee>)> Μπορούµε να ονοµάζουµε τα χαρακτηριστικά του αποτελέσµατος της ερώτησης Στο from clause µπορούµε να πούµε from Employees x, ή from Employees as x, ή ακόµα καιfrom x in Employees. Μπορούµε να έχουµε φώλιασµα ερωτήσεων και µεταβλητών. Μπορούµε να χρησιµοποιούµε εκφράσεις µονοπατιών µέσα σε µια ερώτηση Μπορούµε να χρησιµοποιούµε µεθόδους οπουδήποτε µέσα σε µια ερώτηση 61 Object Query Language - OQL select department, avg_salary: avg(select e.salary from partition x) from Employees e group by department: e.department having count(select * from partition x) > 5 order by department.name Αποτέλεσµα:set<struct(attr1:Department,avg_salary:int)> Το clause group by χωρίζει τους υπαλλήλους σε οµάδες (partitions). Κάθε οµάδα χαρακτηρίζεται από το γεγονός ότι όλοι οι υπάλληλοι δουλεύουν στο ίδιο τµήµα και ονοµάζεται partition (που είναι δεσµευµένη λέξη στην OQL). Το clause having περιορίζει τα τµήµατα σ αυτά που έχουν αριθµό υπαλλήλων πάνω από 5. Η συντόµευση * διατηρείται και στην OQL (όπως και στην SQL) Το order by λειτουργεί όπως και στην SQL 62

C++ Language Binding Είναι µια βιβλιοθήκη κλάσεων και µια επέκταση στη γραµµατική της C++ Η βιβλιοθήκη παρέχει κλάσεις για να υλοποιηθεί το µοντέλο αντικειµένων του ODMG-93 Η επέκταση του συντακτικού της γλώσσας έχει να κάνει µε την υποστήριξη σχέσεων µεταξύ των κλάσεων Υπάρχει και µια απεικόνιση της OQL για C++. Τα queries µπορούν να δηλωθούν µέσα σε ένα πρόγραµµα µέσω µιας συναρτήσεως για queries, η οποία παίρνει strings για ορίσµατα 63 C++ Language Binding Για να δηλωθούν τα διαρκή (persistent) δεδοµένα στη C++ binding, µια κλάση πρέπει να είναι υποκλάση της κλάσης Persistent_Object. Μια κλάση µπορεί να έχει και διαρκή (persistent) και µεταβατικά (transient) αντικείµενα. Ref<Professor> profp; 64

C++ Language Binding class City : public Persistent_Object { public: int city_code; String name; Ref<Set<Ref<Perosn>>> population; City(int, const char*); //Extension static Ref<Set<Ref<City>>> cities; }; 65 C++ Language Binding //Classes implementation in C++ #include "schema.hxx" const char * const City::extent_name = "cities" ; City::City(int code, const char* cname) : city_code(code), name(cname) { cities->insert_element(this); } 66

C++ ODL Declarations ODL Preprocessor Generated C++ Header [and source] files User C++ Source [and Header] files with OML C++ Compiler ODBMS Runtime Object Code ODBMS Metadata Linker Database Executable Application ODBMS Runtime 67 Smalltalk Binding Αντίστοιχο µε το C++ Binding ODL Declarations ODL Compiler Εγγυάται την αντιστοιχία µεταξύ transient και persistent δεδοµένων Meta Objects Object Instances Database Language Binding Class Objects Object Instances Image 68

Smalltalk Binding Object subclass: #City instancevariablenames: 'citycode name population' classvariablenames: 'Cities' pooldictionaries: '' "attributes" citycode "return the citycode" ^citycode citycode: acitycode "set the citycode" ^citycode := acitycode 69