8502c4be6661e852c200acece2a0a161.ppt
- Количество слайдов: 81
Βάσεις Δεδομένων II Αντικειμενοστρεφείς Βάσεις Δεδομένων Πάνος Βασιλειάδης
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 2
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 3
Αντικειμενοστρεφής Προγραμματισμός – Object Oriented Programming (OOP) «μοντελοποίηση του λογισμικού και κάποιες αρχές ανάπτυξης που διευκολύνουν την κατασκευή σύνθετων συστημάτων από ξεχωριστά συστατικά» Object-Oriented (ΟΟ) = αντικειμενοστρεφής, οντολογικός, προσανατολισμένος στα αντικείμενα ΟΧΙ αντικειμενοστραφής 4
Αντικειμενοστρεφής Προγραμματισμός Η βασική ιδέα πίσω από τον OOP: οι οντότητες προσδιορίζονται από τις λειτουργίες τους! Ερώτηση: Ποια η βασική ιδέα πίσω από το μοντέλο οντοτήτων-συσχετίσεων, το σχεσιακό μοντέλο, τον δομημένο προγραμματισμό. . . ? ? Οντότητες OOP = αντικείμενα 5
Αντικείμενα Αντικείμενο είναι μια ξεχωριστή οντότητα, που προσπαθεί να μοντελοποιήσει και να προσεγγίσει όσον το δυνατό καλύτερα, το φυσικό κόσμο. Συγκριτικά, ότι και μια εγγραφή (πλειάδα) στο σχεσιακό μοντέλο 6
Αντικείμενα Αντικείμενο συμπεριφορά Η συμπεριφορά καθορίζεται από τη διαπροσωπεία (interface) του αντικειμένου, ήτοι, από ένα σύνολο λειτουργιών τις οποίες το αντικείμενο μπορεί να επιτελέσει Η συμπεριφορά καθορίζεται ακόμα, και από τις συγκεκριμένες τιμές που έχουν τα χαρακτηριστικά του αντικειμένου. Το διάνυσμα αυτών των τιμών είναι η τιμή του αντικειμένου 7
Αντικείμενα Τα χαρακτηριστικά των αντικειμένων ονομάζονται instance variables (ελληνιστί, πεδία, χαρακτηριστικά, μεταβλητές, . . . ). Η υλοποίηση μιας λειτουργίας της διαπροσωπείας ενός αντικειμένου ονομάζεται μέθοδος (το αντίστοιχο των συναρτήσεων). Η κλήση μιας λειτουργίας ενός αντικειμένου, ονομάζεται αποστολή μηνύματος στο αντικείμενο 8
Ένα μοντέλο ΒΔ που σέβεται τον εαυτό του διαθέτει. . . Οντότητες (που περιγράφουν τη δομή των δεδομένων) Λειτουργίες (που περιγράφουν πώς μπορούμε να επεξεργαστούμε τα δεδομένα) Περιορισμούς ακεραιότητας (που εγγυώνται την αξιοπιστία των δεδομένων και την καλή ποιότητα της δικής μας σχεδίασης) Εμείς θα επικεντρώσουμε στη δομή του ΟΟ μοντέλου για ΒΔ– δε σημαίνει όμως ότι τα υπόλοιπα είναι δευτερεύοντα. . . 9
Για προχωρημένους. . . Ο όρος «μοντέλο» είναι ατυχής. Ο κανονικός όρος είναι «μεταμοντέλο» (π. χ. , με βάση το σχεσιακό μεταμοντέλο, φτιάχνουμε τα δικά μας μοντέλα = τα σχήματα των ΒΔ που υλοποιούμε κάθε φορά) Μια data base (κανονικά, γράφεται database) χωρίς περιορισμούς ακεραιότητας = data dump (αχούρι, σκουπιδότοπος) χωρίς λειτουργίες = data graveyard (νεκροταφείο) 10
Δομή των αντικειμένων Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Σύνθετοι Τύποι Ιεραρχίες Κλάσεων – Κληρονομικότητα Πολυμορφισμός – Late Binding 11
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 12
OID – Object Identity Ταυτότητα Αντικειμένου: προσδιορίζει ένα αντικείμενο μονοσήμαντα στην ΒΔ Δεν αλλάζει ποτέ – συνυπάρχει με το αντικείμενο για όλη τη διάρκεια ζωής του αντικειμένου (object’s lifetime) Απονέμεται από το σύστημα και είναι κρυμμένο από το χρήστη Πιο προφανής χρήση: υλοποίηση αναφορών (μοίρασμα και ενημερώσεις αντικειμένων) 13
OID – Object Identifier OID: OID 12 Name: Πέτρος Age: 40 Children: {OID 15} OID: OID 15 Name: Γιάννης Age: 15 Children: {} OID: OID 13 Name: Μαρία Age: 41 Children: {OID 15} Ο Πέτρος και η Μαρία έχουν το ίδιο παιδί OID: OID 105 Name: Γιάννης Age: 105 Children: {} 14
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 15
Ενθυλάκωση (Encapsulation) OOP διάκριση μεταξύ καθορισμού και υλοποίησης μιας εφαρμογής, ήτοι, . . . Interface vs. Implementation object = interface part + implementation part 16
Ενθυλάκωση (Encapsulation) object = interface part + implementation part Τμήμα Διαπροσωπείας = ο ορισμός των λειτουργιών που μπορεί να επιτελέσει το αντικείμενο (πρβλ. , υπογραφή συναρτήσεων) Τμήμα Υλοποίησης = η αναπαράσταση του αντικειμένου (όπως π. χ. , σε ένα struct στη C) + η υλοποίηση των λειτουργιών (π. χ. , ο κώδικας μιας συνάρτησης), ήτοι, implementation part = (data part + procedural part) 17
Ενθυλάκωση (Encapsulation) Σχεσιακό μοντέλο: αν είχαμε τον πίνακα CAR_FACTORY[NAME, CAPACITY, ADDRESS], η εφαρμογή RAISE_CAPACITY(PERCENTAGE) θα ήταν ένα εξωτερικό πρόγραμμα ΟΟ: CAR_FACTORY[NAME, CAPACITY, ADDRESS, RAISE_CAPACITY(PERCENTAGE)] 18
Ενθυλάκωση (Encapsulation) Interface Part: RAISE_CAPACITY(PERCENTAGE) Data Part: NAME, CAPACITY, ADDRESS Implementation Part: RAISE_CAPACITY(PERCENTAGE){ return CAPACITY * (1+ PERCENTAGE); } 19
Ενθυλάκωση (Encapsulation) Καμιά λειτουργία πέραν αυτών που καθορίστηκαν στο τμήμα διαπροσωπείας δεν μπορεί να εκτελεστεί! Για το προηγούμενο παράδειγμα, το ΜΟΝΟ που μπορώ να κάνω είναι να αυξήσω την παραγωγή. ΔΕΝ ΜΠΟΡΩ να ορίσω τιμή στο όνομα, ή να ρωτήσω ποια είναι η δ/ση του εργοστασίου 20
Ενθυλάκωση (Encapsulation) Ενσωματώνει, εκτός από δεδομένα, και λειτουργίες στα αντικείμενα Αποκρύπτει τον τρόπο υλοποίησης των μεθόδων, οπότε, απεξαρτά τη διαχείριση του αντικειμένου από τη δομή του, Επιβάλει τη διαχείριση του κάθε αντικειμένου, αυστηρά και μόνο από τις δικές του μεθόδους*, μέσω των αντίστοιχων μηνυμάτων. * Πολλές φορές θα δείτε τον όρο «μέθοδος» να χαρακτηρίζει το 21 interface part …
Ενθυλάκωση (Encapsulation) Από το μάθημα Γλωσσών Προγραμματισμού: θυμάστε τη διαφορά μεταξύ Private, Public, Protected πεδίων ? 22
Από 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; } 23
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 24
Τύποι και Κλάσεις Τύποι Αντιστοιχούν σε αφηρημένους τύπους δεδομένων (abstract data types), ήτοι, Αποτελούνται από interface part και implementation part Έχουν τιμές (values) ως στιγμιότυπα Διαισθητικά, πρόκειται για «καλούπια» αντικειμένων (για την ακρίβεια: τιμών), π. χ. , σαν structs επεκτεταμένα με μεθόδους. . . 25
Τύποι και Κλάσεις Ομαδοποιούν αντικείμενα με ίδιες σημασιολογικές ιδιότητες Χτίζονται πάνω σε τύπους Έχουν αντικείμενα ως στιγμιότυπα Διαισθητικά, πρόκειται για «συλλογές» αντικειμένων, π. χ. , σαν σχεσιακοί πίνακες, των οποίων το σχήμα προκύπτει από ένα τύπο. . . 26
Τύποι και Κλάσεις Αντιστοιχούν σε αφηρημένους Ομαδοποιούν αντικείμενα με τύπους δεδομένων (abstract ίδιες σημασιολογικές data types) ιδιότητες Αποτελούνται από interface part και implementation part Χτίζονται πάνω σε τύπους Έχουν τιμές (values) ως στιγμιότυπα Έχουν αντικείμενα ως στιγμιότυπα 27
Τιμές και Αντικείμενα Απλές (string, integer, κ. λ. π. ), ή Σύνθετες (αποτελούμενες από άλλες τιμές) Χαρακτηρίζονται μονοσήμαντα από την ταυτότητα αντικειμένου Είναι αναλλοίωτες (κάθε μεταβολή επιφέρει την παραγωγή νέας τιμής). Μια αλλαγή σε ένα αντικείμενο επιφέρει την αλλαγή της τιμής του, χωρίς τη δημιουργία νέου αντικειμένου Η μεταβολή γίνεται μέσω τελεστών της γλώσσας προγραμματισμού Η μεταβολή γίνεται μόνο μέσω μηνυμάτων που μας παρέχει το interface του αντικειμένου 28
Τύποι και Κλάσεις 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 29
Τύποι και Κλάσεις Οι τύποι μοντελοποιούν τη δομική ομοιότητα κάποιων τιμών, ενώ οι κλάσεις μοντελοποιούν τη σημασιολογική ομοιότητα αντικειμένων Στην πράξη (π. χ. , στα συστήματα ή στα στάνταρτ): η διάκριση αυτή είναι ορατή, αν και πρακτικά όχι μεγάλη! 30
Τύποι και Κλάσεις στην Πληροφορική γενικότερα: Τεχνητή Νοημοσύνη: η διάκρισή τους είναι σημαντική (π. χ. , οντολογίες) Γλώσσες Προγραμματισμού: δεν έχουν μεγάλη διαφορά, συνήθως δεν τα διακρίνουμε 31
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 32
Collection Types Σύνολα (Sets) αντικειμένων Πολυσύνολα (Bags) αντικειμένων = σύνολα με διπλοεγγραφές Λίστες (Lists) αντικειμένων = διατεταγμένα πολυσύνολα Πίνακες (Arrays) αντικειμένων = λίστες πεπερασμένου μεγέθους Πλειάδες (Tuples) αντικειμένων = παράθεση αντικειμένων, με συγκεκριμένο τρόπο 33
Collection Types Οι σύνθετοι τύποι είναι ορθογώνιοι: οποιοσδήποτε από αυτούς μπορεί να εφαρμοστεί σε ένα αντικείμενο, μια τιμή, ή ένα σύνθετο τύπο. tuple[set{string}, set{integer}, bag{string}] Μάλλον καλύτερη μετάφραση: «τύποι συλλογών» 34
Σύνθετα Αντικείμενα Δομές αντικειμένων με σχέση Part-Of Η ύπαρξη ενός αντικειμένου εξαρτάται από την ύπαρξη ενός άλλου Υλοποιούνται είτε με φώλιασμα των αντικειμένων, είτε με αναφορές 35
Σύνθετα Αντικείμενα OID: OID 10 Name: Μαμά Καγκουρό Age: 4 Children: { [OID: OID 15 Name: Μωρό Κ. Age: 0. 5 Children: {}] } OID: OID 12 Name: Πέτρος Age: 40 Children: {OID 15} OID: OID 15 Name: Γιάννης Age: 15 Children: {} 36
Σύνθετα Αντικείμενα H ίδια αναφορά έχει και την ευθεία και την ανάστροφη φορά (inverse) OID: OID 12 Name: Πέτρος Age: 40 Father: NULL Children: {OID 15} Children Father OID: OID 15 Name: Γιάννης Age: 15 Father: OID 12 Children: {} 37
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 38
Ιεραρχίες Τύπων και Κλάσεων Κληρονομικότητα (Inheritance): Κατασκευάζουμε ένα δέντρο (ιεραρχία) κλάσεων. Κάθε κλάση που είναι κόμβος του δέντρου «κληρονομεί» , από την πατρική της κλάση όλα τα δομικά και λειτουργικά χαρακτηριστικά της -τις instance variables και τις μεθόδους, δηλαδή. Στα χαρακτηριστικά αυτά, κάθε κλάση νομιμοποιείται να προσθέσει τα δικά της χαρακτηριστικά και λειτουργίες. Οι ιεραρχίες αφορούν και τύπους και κλάσεις 39
Ιεραρχίες Τύπων και Κλάσεων Vehicle - Name - Weight - Color + Get. Name() + Get. Weight + Get. Color() Four. Wheels - Max. Velocity +Get. Max. Velocity() Van - Max. Cargo +Get. Max. Cargo() Bike - Num. Speeds +Get. Num. Speeds() Car - Num. Doors +Get. Num. Doors() 40
Ιεραρχίες Τύπων και Κλάσεων Η ιεραρχία των κλάσεων πρέπει να σέβεται την ιεραρχία των τύπων Πολλαπλή κληρονομικότητα (Multiple Inheritance): μια κλάση έχει περισσότερους από έναν προγόνους Αφηρημένη κλάση (abstract class): απαγορεύεται να έχει στιγμιότυπα 41
Υπερφόρτωση και πολυμορφισμός Υπερφόρτωση (overloading): Το φαινόμενο όπου δύο μηνύματα, σε διαφορετικές κλάσεις, συμφωνούν στο interface τους Υπέρβαση (overriding): Το φαινόμενο όπου κάποιο μήνυμα υλοποιείται με διαφορετική μέθοδο στην κορυφή της ιεραρχίας, απ’ ότι σε κάποιο χαμηλότερο επίπεδο 42
Υπερφόρτωση και πολυμορφισμός Vehicle - Name - Weight - Color + Get. Name() + Get. Weight + Get. Color() Four. Wheels - Max. Velocity +Get. Max. Velocity() Van - Max. Cargo +Get. Max. Cargo() +Get. Weight() Bike - Num. Speeds +Get. Num. Speeds() Car - Num. Doors +Get. Num. Doors() 43
Υπερφόρτωση και πολυμορφισμός Late Binding: Για να υποστηριχθεί η υπέρβαση, τα ονόματα των λειτουργιών "επιλύονται" (resolved) -μεταφράζονται σε διευθύνσεις- στο χρόνο εκτέλεσης Πολυμορφισμός (polymorphism): Το φαινόμενο όπου διαφορετικά αντικείμενα (ή κλάσεις) αντιδρούν με διαφορετικό τρόπο στο ίδιο μήνυμα 44
Τυπικός ορισμός αντικειμένου Αντικείμενο = [OID, τιμή, κατάσταση, κλάση] OID = μοναδικός προσδιοριστής Τιμή = διάνυσμα τιμών των instance variables + τιμές επιστροφής των μεθόδων (public) Κατάσταση = διάνυσμα τιμών των instance variables βάσει του τύπου στον οποίο δομείται το αντικείμενο (private) Κλάση = η κλάση στην οποία ανήκει το αντικείμενο 45
Τυπικός ορισμός κλάσης όνομα κλάσης, τύπος της τιμής των στιγμιοτύπων, τύπος της κατάστασης των στιγμιοτύπων, {μηνύματα στιγμιοτύπων}, {μέθοδοι στιγμιοτύπων}, τιμή της κλάσης, κατάσταση της κλάσης, {μηνύματα της κλάσης}, {μέθοδοι της κλάσης} τύπος της τιμής της κλάσης, τύπος της κατάστασης της κλάσης Η κλάση είναι μια συλλογή στιγμιοτύπων αλλά είναι κι η ίδια ένα αντικείμενο οπότε ανήκει κι αυτή σε μια μετα-κλάση 46
Από το σύστημα 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) 47
Από το σύστημα 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) 48
Από το σύστημα 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 49
Από το σύστημα Gem. Stone (που ακολουθεί το παράδειγμα της Smalltalk) Object subclass: 'Department' inst. Var. Names: #('dpt. ID' 'dpt. Name' 'Sub. Dpts' 'Belongs. To' 'manager') class. Vars: #() constraints: #[ #[#dpt. ID, Integer], #[#dpt. Name, String], #[#manager, String]]. method: Department dpt. Name ^dpt. Name % 50
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 51
Λειτουργίες στα δεδομένα Λειτουργίες για την ταυτότητα αντικειμένου Ταύτιση (OID = OID) Ρηχή Ισότητα (τιμή 1 = τιμή 2, σε επίπεδο αντικειμένων) Βαθειά Ισότητα Ασθενής (τιμή 1 = τιμή 2, σε επίπεδο τιμών) Ισχυρή (ασθενής + ισομορφικοί γράφοι) 52
Λειτουργίες - Identity 53
Λειτουργίες - Shallow Equality Rectangular 1: I 1 Lower. Left Corner X 2 Rectangular 2: I 2 Upper. Right Corner Lower. Left Corner Upper. Right Corner Y X 3 Ρηχή ισότητα αντικειμένων Rectangular 1 = Rectangular 2 5 Y 7 54
Λειτουργίες – Deep Equality Array 1: I 1 Array 2: I 4 I 2 I 3 X Y X 3 2 4 I 5 Y 6 I 6 X Y X 3 2 4 Y 6 Array 3: I 7 I 8 I 9 I 10 X Y X 3 2 4 Y 6 • ARRAY 1 not deep-equal ARRAY 3 (στην ισχυρή εκδοχή ισομορφικών γράφων) • ARRAY 1 deep-equal ARRAY 3 (στην ασθενή εκδοχή) • ARRAY 1 deep-equal ARRAY 2 (και στις δύο εκδοχές) 55
Λειτουργίες στα δεδομένα Λειτουργίες για bags, sets, lists Ένωση Τομή Διαφορά Dup. Eliminate Γενική Επιλογή (General Selection) Φώλιασμα (Nest) Από-Φώλιασμα (Un. Nest) Άνοιγμα (Flatten) 56
Περιορισμοί Ακεραιότητας Κλειδιού (Key constraints) Υπαρξιακός Περιορισμός Ακεραιότητας (Existential constraint) Περιορισμοί Ακεραιότητας Μη Κενού Χαρακτηριστικού (NOT NULL contraints) Περιορισμός Συνέπειας Αντίστροφου Δείκτη (Inverse Link Consistency Constraint) Περιορισμός Διαχωρισιμότητας (Disjointness constraint) Περιορισμός Επικάλυψης (Covering constraint) 57
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 58
ODMG - 93 Το Object Database Management Group (ODMG) είναι μια επιτροπή που, στις αρχές της δεκαετίας του 1990, πρότεινε ένα κοινό interface (ODMG‑ 93) στους διάφορους κατασκευαστές αντικειμενοστρεφών συστημάτων βάσεων δεδομένων Σήμερα: version 3. 0 του στάνταρτ 59
Βασικά κομμάτια του ODMG - 93 Μοντέλο Αντικειμένων (Object Model) Γλώσσα Ορισμού Αντικειμένων (Object Definition Language - ODL) Object Query Language - OQL C++ Language Binding Smalltalk Language Binding 60
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 61
Μοντέλο Αντικειμένων Η βασική οντότητα είναι το αντικείμενο (object) Τα αντικείμενα κατηγοριοποιούνται σε τύπους (types) Η συμπεριφορά των αντικειμένων χαρακτηρίζεται από τις λειτουργίες του Η κατάσταση (state) των αντικειμένων χαρακτηρίζεται από τις τιμές των ιδιοτήτων (properties) = attributes & relationships Εδώ: κατάσταση = τιμή 62
Μοντέλο Αντικειμένων Για κάθε λειτουργία, ο προγραμματιστής πρέπει να καθορίσει την υπογραφή της. Κάθε λειτουργία είναι συνδεδεμένη με μόνο ένα τύπο μπορεί να έχει ορίσματα, να επιστρέφει μία τιμή, να έχει παρενέργειες και να καλεί μια εξαίρεση 63
Πώς δουλεύει. . . Δηλώσεις σε ODL ή σε PL ODL Κώδικας της εφαρμογής σε PL PL Compiler Preprocessor για τις δηλώσεις ODBMS runtime Application Binary metadata Linker Database Data access Running Application 64
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 65
Γλώσσα Ορισμού Αντικειμένων (Object Definition Language, ODL) Υποστηρίζει όλες τις σημασιολογικές δομές του ODMG μοντέλου αντικειμένων Είναι μια γλώσσα προσδιορισμού interface signatures Είναι ανεξάρτητη από προγραμματιστικές γλώσσες Είναι συμβατή με την Interface Definition Language του OMG Είναι επεκτάσιμη Καθορίζει τα χαρακτηριστικά των τύπων και τις υπογραφές των μεθόδων Το ODMG-93 δεν καθορίζει κάποια συγκεκριμένη OML. Περιγράφει, δύο interfaces για τη σύνδεση των C++ και Smalltalk Είναι ανεξάρτητη από την οποιαδήποτε γλώσσα προγραμματισμού 66
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); 67 };
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; }; 68
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 69
Object Query Language - OQL Δεν είναι από μόνη της υπολογιστικά πλήρης Παρέχει δηλωτικό τρόπο προγραμματισμού Βασίζεται στο μοντέλο αντικειμένων του ODMG Έχει αφηρημένο συντακτικό (abstract syntax) Έχει εύκολα καθορίσιμα semantics Έχει συντακτικό SQL-like Παρέχει την ευκολία της άμεσης διαχείρισης για collections αντικειμένων Δεν παρέχει τελεστές για update αλλά βασίζεται στις μεθόδους των αντικειμένων, που έχουν καθοριστεί γι' αυτό το σκοπό Βελτιστοποιείται εύκολα 70
Object Query Language - OQL Person με τα χαρακτηριστικά name, birthdate, salary και τη μέθοδο age. Extent: Persons Employee ISA Person και τον εξειδικεύει με την αναφορά subordinates και τη μέθοδο seniority. Extent: Employees Department, με το χαρακτηριστικό name και την αναφορά employees, η οποία τυχαίνει να είναι και αντίστροφη (στον τύπο Employee υπάρχει η αντίστροφη αναφορά department 71
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. Μπορούμε να έχουμε φώλιασμα ερωτήσεων και μεταβλητών. Μπορούμε να χρησιμοποιούμε εκφράσεις μονοπατιών μέσα σε μια ερώτηση Μπορούμε να χρησιμοποιούμε μεθόδους οπουδήποτε μέσα σε μια ερώτηση 72
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<tuple(attr 1: Department, avg_salary: int)> Το clause group by χωρίζει τους υπαλλήλους σε ομάδες (partitions). Κάθε ομάδα χαρακτηρίζεται από το γεγονός ότι όλοι οι υπάλληλοι δουλεύουν στο ίδιο τμήμα και ονομάζεται partition (που είναι δεσμευμένη λέξη στην OQL). Το clause having περιορίζει τα τμήματα σ’ αυτά που έχουν αριθμό υπαλλήλων πάνω από 5. Η συντόμευση * διατηρείται και στην OQL (όπως και στην SQL) Το order by λειτουργεί όπως και στην SQL 73
Περιεχόμενα Βασικές έννοιες αντικειμενοστρεφούς μοντέλου Ταυτότητα αντικειμένου Ενθυλάκωση Τύποι και Κλάσεις Collection Types – Σύνθετα Αντικείμενα Κληρονομικότητα Λειτουργίες & Περιορισμοί Μοντέλο Αντικειμένων Object Definition Language ODMG-93 Object Query Language Bindings 74
C++ Language Binding Είναι μια βιβλιοθήκη κλάσεων και μια επέκταση στη γραμματική της C++ Η βιβλιοθήκη παρέχει κλάσεις για να υλοποιηθεί το μοντέλο αντικειμένων του ODMG-93 Η επέκταση του συντακτικού της γλώσσας έχει να κάνει με την υποστήριξη σχέσεων μεταξύ των κλάσεων Υπάρχει και μια απεικόνιση της OQL για C++. Τα queries μπορούν να δηλωθούν μέσα σε ένα πρόγραμμα μέσω μιας συναρτήσεως για queries, η οποία παίρνει strings για ορίσματα 75
C++ Language Binding Για να δηλωθούν τα διαρκή (persistent) δεδομένα στη C++ binding, μια κλάση πρέπει να είναι υποκλάση της κλάσης Persistent_Object. Μια κλάση μπορεί να έχει και διαρκή (persistent) και μεταβατικά (transient) αντικείμενα. Ref<Professor> prof. P; 76
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; static const char * const; }; 77
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); } 78
C++ ODL Declarations ODL Preprocessor Generated C++ Header [and source] files User C++ Source [and Header] files with OML C++ Compiler ODBMS Runtime ODBMS Metadata Object Code Linker Executable Application Database ODBMS Runtime 79
Smalltalk Binding Αντίστοιχο με το C++ Binding Εγγυάται την αντιστοιχία μεταξύ transient και persistent δεδομένων ODL Declarations ODL Compiler Meta Objects Class Objects Language Object Instances Database Binding Object Instances Image 80
Smalltalk Binding Object subclass: #City instance. Variable. Names: 'city. Code name population' class. Variable. Names: 'Cities' pool. Dictionaries: '' "attributes" city. Code "return the city. Code" ^city. Code: a. City. Code "set the city. Code" ^city. Code : = a. City. Code 81
8502c4be6661e852c200acece2a0a161.ppt