OID Object Identifier OID OID 12 Name Age
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
Ενθυλάκωση (Encapsulation) OOP διάκριση μεταξύ καθορισμού και υλοποίησης μιας εφαρμογής, ήτοι, . . . Interface vs. Implementation object = interface part + implementation part 16
Ενθυλάκωση (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
Από 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
Τύποι και Κλάσεις 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
Σύνθετα Αντικείμενα 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
Ιεραρχίες Τύπων και Κλάσεων 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
Υπερφόρτωση και πολυμορφισμός 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
Από το σύστημα 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
Λειτουργίες - 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
Βασικά κομμάτια του ODMG - 93 Μοντέλο Αντικειμένων (Object Model) Γλώσσα Ορισμού Αντικειμένων (Object Definition Language - ODL) Object Query Language - OQL C++ Language Binding Smalltalk Language Binding 60
Πώς δουλεύει. . . Δηλώσεις σε ODL ή σε PL ODL Κώδικας της εφαρμογής σε PL PL Compiler Preprocessor για τις δηλώσεις ODBMS runtime Application Binary metadata Linker Database Data access Running Application 64
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
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
- Slides: 81