Από τα τμήματα στα Αντικείμενα FROM MODULES TO OBJECTS Δρ. Μαρία Ι. Ανδρέου
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 2 Περιεχόμενα Τι είναι ένα τμήμα (module); Συνοχή (Cohesion) Ζεύξη (Coupling) Data encapsulation Αφηρημένοι Τύποι Δεδομένων (Abstract data types) Απόκρυψη Πληροφοριών (Information hiding) Αντικείμενα (Objects) Κληρονομικότητα, Πολυμορφισμός, και δυναμική σύνδεση (Inheritance, polymorphism, and dynamic binding) Το αντικειμενοστρεφές παράδειγμα (The object-oriented paradigm)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 3 Τι είναι ένα Τμήμα (Module) ; Τμήμα είναι μια λεξικογραφικά συνεχής ακολουθία από δηλώσεις προγράμματος (program statements), που φράσσονται από στοιχεία που προσδιορίζουν τα όρια τους (boundary elements), μαζί με ένα αναγνωριστικό όνομα (aggregate identifier) για όλες αυτές τις δηλώσεις. «λεξικογραφικά συνεχής» (“Lexically contiguous”) Συνορεύουν στον κώδικα (Adjoining in the code) «Στοιχεία που προσδιορίζουν τα όρια» (“Boundary elements”) {... } begin... end «Αναγνωριστικό Όνομα» (“Aggregate identifier”) Το όνομα ολόκληρου του τμήματος (module)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 4 Παράδειγμα: Σχεδιασμός ενός υπολογιστή Ένας μη ικανός αρχιτέκτονας υπολογιστών (computer architect) αποφάσισε να κατασκευάσει μια ALU, ένα shifter, και 16 registers χρησιμοποιώντας AND, OR, και NOT gates, παρά NAND ή NOR gates.
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 5 Σχεδιασμός ενός υπολογιστή (συνέχ.) Ο αρχιτέκτονας (architect) σχεδίασε 3 silicon chips
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 6 Σχεδιασμός ενός υπολογιστή(συνέχ.) Επανασχεδιαμός χρησιμοποιώντας μόνο ενός είδους πύλες (gate type) σε κάθε chip Αποτέλεσμα ένα «τερατούργημα» (“masterpiece”)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 7 Σχεδιασμός ενός υπολογιστή(συνέχ.) Τα δυο σχέδια είναι λειτουργικά ισοδύναμα Το δεύτερο σχέδιο είναι Δύσκολο να κατανοηθεί Δύσκολο να εντοπίσουμε λάθη σε αυτό Δύσκολο να το αλλάξουμε ή να το επεκτείνομε Δεν μπορεί να επαναχρησιμοποιηθεί σε άλλο προϊόν Τα τμήματα (Modules) πρέπει να είναι σαν αυτά στο πρώτο σχέδιο Μέγιστη σχέση ΜΕΣΑ στο τμήμα, και Ελαχιστοποίηση σχέσεων ΑΝΑΜΕΣΑ στα τμήματα
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 8 Σύνθετο/Δομημένο Σχέδιο (Composite/Structured Design) Είναι μια μέθοδος για διάσπαση του προϊόντος σε τμήματα (modules) για να επιτύχουμε Μέγιστη αλληλεπίδραση μέσα σε ένα τμήμα, και Ελάχιστη αλληλεπίδραση ανάμεσα στα τμήματα Τμηματική Συνοχή (Module cohesion) Βαθμός αλληλεπίδρασης μέσα στο τμήμα Ζεύξη Τμημάτων (Module coupling) Βαθμός αλληλεπίδρασης ανάμεσα στα τμήματα
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 9 Λειτουργία, λογική και περιεχόμενο ενός τμήματος (Function, Logic, and Context of a Module) στο C/SD, το όνομα του δηλώνει τη λειτουργία του Παράδειγμα: Ένα τμήμα που υπολογίζει την τετραγωνική ρίζα (square root) ενός double precision integers χρησιμοποιώντας τον Newton’s algorithm ονομάζεται compute_square_root Τα underscores δηλώνουν ότι χρησιμοποιούμε το κλασικό παράδειγμα (classical paradigm)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 10 Συνοχή (Cohesion) Βαθμός αλληλεπίδρασης μέσα σε ένα τμήμα Υπάρχουν εφτά κατηγορίες ή επίπεδα συνοχής (μη γραμμική κλίμακα (non-linear scale))
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 11 Συμπτωματική Συνοχή (Coincidental Cohesion) ένα module έχει coincidental cohesion αν εκτελεί διάφορες, πλήρως άσχετες μεταξύ τους ενέργειες παράδειγμα: print_next_line, reverse_string_of_characters_comprising_second_ parameter, add_7_to_fifth_parameter, convert_fourth_parameter_to_ floating_point Τέτοια modules προκύπτουν ως συνέπεια κανόνων όπως: “κάθε module πρέπει να περιλαμβάνει μεταξύ 35 και 50 statements”
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 12 Γιατί η Συμπτωσιακή Συνοχή (Coincidental Cohesion) είναι τόσο ΚΑΚΗ; Δυσκολεύει πολύ την συντηρησημότητα (maintainability) ένα τμήμα με συμπτωσιακή συνοχή (coincidental cohesion) δεν είναι επαναχρησιμοποιήσιμο Αυτό το πρόβλημα μπορεί να διορθωθεί εύκολα Διάσπαση του τμήματος σε ξεχωριστά τμήματα, όπου το καθένα θα εκτελεί ένα καθήκον/σκοπό (task)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 13 Λογική Συνοχή (Logical Cohesion) Ένα τμήμα έχει Λογική Συνοχή (logical cohesion) όταν εκτελεί μια σειρά από σχετιζόμενες ενέργειες (related actions), μια από τις οποίες επιλέγεται με την κλήση του τμήματος αυτού (by the calling module)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 14 Λογική Συνοχή (συνέχ.,) Παράδειγμα 1: function_code = 7; new_operation (op code, dummy_1, dummy_2, dummy_3); // dummy_1, dummy_2, and dummy_3 are dummy // variables,not used if function code is equal to 7 Παράδειγμα 2: Ένα τμήμα που εκτελεί όλες τις ενέργειες εισόδου και εξόδου Παράδειγμα 3: μια έκδοση του OS/VS2 περιλαμβάνει ένα τμήμα με λογική συνοχή που εκτελεί 13 διαφορετικές ενέργειες. Το interface του (δηλ., οι παράμετροι του) περιλαμβάνει 21 δεδομένα (pieces of data)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 15 Γιατί η Λογική Συνοχή είναι ΚΑΚΗ; Το interface είναι δύσκολα κατανοητό Είναι δυνατό να μπλέκεται, μαζί σε ένα τμήμα, κώδικας για περισσότερες από μια ενέργειες Δύσκολο να επαναχρησημοποιηθεί
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 16 Γιατί η Λογική Συνοχή είναι ΚΑΚΗ; (συνεχ.) Έστω ότι ένα νέο tape unit έχει εγκατασταθεί Ποια είναι η επίδραση του σε ένα laser printer;
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 17 Χρονική Συνοχή (Temporal Cohesion) Ένα τμήμα έχει χρονική συνοχή (temporal cohesion) όταν εκτελεί μια σειρά από ενέργειες που σχετίζονται χρονικά Παράδειγμα: open_old_master_file, new_master_file, transaction_file, and print_file; initialize_sales_district_table, read_first_transaction_record, read_first_old_master_record (a.k.a. perform_initialization)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 18 Γιατί η Χρονική Συνοχή είναι κακή; Οι ενέργειες αυτού του τμήματος είναι ασθενώς σχετιζόμενες (are weakly related) μεταξύ τους, αλλά ισχυρά σχετιζόμενες με ενέργειες σε άλλα τμήματα Consider sales_district_table Μη επαναχρησιμοποίηση
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 19 Διαδικασιακή Συνοχή (Procedural Cohesion) Ένα τμήματα έχει Διαδικασιακή Συνοχή (procedural cohesion) αν εκτελεί μια σειρά από ενέργειες σχετικές με τη διαδικασία (procedure) που ακολουθείται από το προϊόν παράδειγμα: read_part_number_and_update_repair_record_on_ master_file
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 20 Γιατί η Διαδικασιακή Συνοχή είναι κακή; Οι ενέργειες εξακολουθούν να είναι ασθενώς συνδεδεμένες, έτσι το τμήμα δεν μπορεί να επαναχρησιμοποιηθεί
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 21 Επικοινωνιακή Συνοχή Communicational Cohesion ένα τμήμα έχει Επικοινωνιακή Συνοχή (communicational cohesion) αν εκτελεί μια σειρά από ενέργειες σχετικές με την διαδικασία που ακολουθείται από το προϊόν, και επιπρόσθετα όλες οι ενέργειες εφαρμόζονται στα ίδια δεδομένα Παράδειγμα 1: update_record_in_database_and_write_it_to_audit_trail Παράδειγμα 2: calculate_new_coordinates_and_send_them_to_terminal
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 22 Γιατί η Communicational Cohesion είναι κακή; Δεν μπορεί να επαναχρησιμοποιηθεί
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 23 Λειτουργική Συνοχή Functional Cohesion ένα τμήμα με Λειτουργική Συνοχή (functional cohesion) εκτελεί Ακριβώς ΜΙΑ ενέργεια
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 24 Functional Cohesion Παράδειγμα 1: get_temperature_of_furnace Παράδειγμα 2: compute_orbital_of_electron Παράδειγμα 3: write_to_floppy_disk Παράδειγμα 4: calculate_sales_commission
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 25 Γιατί η Λειτουργική Συνοχή είναι τόσο ΚΑΛΗ; Περισσότερη επαναχρησιμοποίηση Η Συντήρηση Διόρθωσης (Corrective maintenance) είναι πιο εύκολη Απομόνωση λαθών (Fault isolation) Λιγότερα λάθη οπισθοδρόμησης (regression faults) Είναι πιο εύκολο να επεκτείνουμε το προϊόν
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 26 Πληροφοριακή Συνοχή Informational Cohesion Ένα τμήμα έχει Πληροφοριακή Συνοχή (informational cohesion) αν εκτελεί ένα αριθμό από ενέργειες, κάθε μια με τα δικά της entry point, με ανεξάρτητο κώδικα για κάθε ενέργεια, και ΟΛΕΣ εφαρμοζόμενες στην ίδια δομή δεδομένων (data structure)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 27 Γιατί η Πληροφοριακή Συνοχή είναι τόσο ΚΑΛΗ; Ουσιαστικά,αυτό είναι ένας αφηρημένος τύπος δεδομένων (δες στη συνέχεια) Figure 7.6
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 28 Cohesion Example
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 29 Ζεύξη Coupling Ζεύξη (coupling) είναι ο βαθμός αλληλεπίδρασης ανάμεσα σε δυο τμήματα Υπάρχουν πέντε κατηγορίες ή επίπεδα ζεύξης (non- linear scale)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 30 Ζεύξη Περιεχομένων (Content Coupling) Δυο τμήματα είναι συνδέονται με ζεύξη περιεχομένων αν το ένα αναφέρεται άμεσα στα περιεχόμενα του άλλου παράδειγμα 1: Το τμήμα p τροποποιεί μια δήλωση (statement) του τμήματος q παράδειγμα 2: Το τμήμα p αναφέρεται σε λογικά δεδομένα στο τμήμα q με όρους αριθμητικών μετακινήσεων μέσα στο q παράδειγμα 3: Το τμήμα p διακλαδώνεται (branches) σε λογικές ετικέτες (local label) του τμήματος q
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 31 Γιατί η Ζεύξη Περιεχομένων είναι τόση κακή; Σχεδόν κάθε αλλαγή στο τμήμα q, ακόμα και recompiling q με ένα νέο compiler or assembler, έχει ως συνέπεια να πρέπει να γίνουν αλλαγές στο τμήμα p
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 32 Common Coupling δυο modules έχουν common coupled αν έχουν πρόσβαση για να γράψουν σε καθολικά δεδομένα (global data) παράδειγμα 1 Τα τμήματα cca και ccb μπορούν να έχουν πρόσβαση και να αλλάξουν από κοινού την τιμή της καθολικής μεταβλητής global_variable
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 33 Common Coupling (συνέχ) Παράδειγμα 2: Τα τμήματα cca και ccb έχουν από κοινού πρόσβαση στην ίδια βάση δεδομένων (database), και από κοινού μπορούν να διαβάζουν και να γράφουν στην ίδια εγγραφή (can both read and write the same record) Παράδειγμα 3: FORTRAN common COBOL common (nonstandard) COBOL-80 global
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 34 Γιατί η Common Coupling είναι κακή; Αντικρούει το πνεύμα του δομημένου προγραμματισμού (of structured programming) Ο προκύπτων κώδικας είναι πολύ δύσκολο να κατανοηθεί
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 35 Γιατί η Common Coupling είναι τόσο κακή; (συνεχ) Τα Τμήματα μπορεί να έχουν παράπλευρα φαινόμενα (side-effects) Αυτό επηρεάζει την αναγνωσιμότητα τους (their readability) Παράδειγμα: edit_this_transaction (record_7) Πρέπει να διαβαστεί ολόκληρο το τμήμα για να καταλάβουμε τι κάνει Μια αλλαγή κατά την διάρκεια της συντήρησης στον ορισμό μιας καθολικής μεταβλητής σε ένα τμήμα προκαλεί αναγκαίες αντίστοιχες αλλαγές σε άλλα τμήματα Common-coupled modules είναι δύσκολο να επαναχρησιμοποιηθούν
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 36 Γιατί η Common Coupling είναι κακή; (συνέχ) Common coupling ανάμεσα στο τμήμα p και το υπόλοιπο προϊόν μπορεί να αλλάξει χωρίς να αλλάξει το p με κανένα τρόπο Clandestine common coupling παράδειγμα: The Linux kernel Ένα τμήμα εκτίθεται σε περισσότερα δεδομένα από ότι χρειάζεται Αυτό μπορεί να οδηγήσει σε υπολογιστική κρίση (computer crime)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 37 Ζεύξη ελέγχου Control Coupling Δυο τμήματα συνδέονται με Ζεύξη Ελέγχου (control coupled) αν το ένα περνά (passes) ένα στοιχείο έλεγχου στο άλλο Παράδειγμα 1: Ένας κωδικός λειτουργίας (operation code) περνά σαν σε ένα τμήμα με λογική συνοχή Παράδειγμα 2: Ένας διακόπτης ελέγχου (control switch) περνά σας παράμετρος
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 38 Ζεύξη Ελέγχου (συνέχ.,) Το τμήμα p καλεί το τμήμα q Μήνυμα: I have failed — data Μήνυμα: I have failed, so write error message ABC123 — control
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 39 Γιατί η Ζεύξη Ελέγχου είναι τόσο ΚΑΚΗ; Τα τμήματα ΔΕΝ είναι ανεξάρτητα Το τμήμα q (the called module) πρέπει να ξέρει την εσωτερική δομή (internal structure) και τη λογική του τμήματος p Αυτό έχει επίδραση την επαναχρησιμοποίηση Σχετίζεται με τμήματα τα οποία έχουν λογική συνοχή
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 40 Stamp Coupling Μερικές γλώσσες επιτρέπουν μόνο απλές μεταβλητές αν περάσουν σαν παράμετροι part_number satellite_altitude degree_of_multiprogramming Πολλές γλώσσες υποστηρίζουν το πέρασμα (passing) δομών δεδομένων (of data structures) part_record satellite_coordinates segment_table
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 41 Stamp Coupling (συνέχ.) δυο τμήματα συνδέονται με stamp coupled αν μια δομή δεδομένων περνά σαν παράμετρος, αλλά το κληθέν τμήμα λειτουργεί σε μερικά αλλά ΟΧΙ όλα τα ξεχωριστά κομμάτια (individual components) αυτής της δομής δεδομένων
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 42 Γιατί η Stamp Coupling είναι τόσο ΚΑΚΟ; Δεν είναι ξεκάθαρο, χωρίς να διαβάσουμε ολόκληρο τον κώδικα, σε ποια πεδία μιας εγγραφής έχει γίνει πρόσβαση και ποια έχουν τροποποιηθεί Παράδειγμα calculate_withholding (employee_record) Δύσκολη κατανόηση Μη επαναχρησιμοποίηση Περνάνε σαν παράμετροι περισσότερα από τα απαραίτητα δεδομένα Ανεξέλεγκτη πρόσβαση στα δεδομένα μπορεί να οδηγήσει σε υπολογιστική κρίση
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 43 Γιατί η Stamp Coupling είναι τόσο ΚΑΚΟ; (συνέχ) Όμως, Δεν υπάρχει τίποτα κακό στο να περνάμε μια δομή δεδομένων σαν παράμετρο, όταν εξασφαλίζεται ότι ΟΛΑ τα τμήματα της δομής αυτή προσπελαύνονται και/ή τροποποιούνται Παράδειγμα: invert_matrix (original_matrix, inverted_matrix); print_inventory_record (warehouse_record);
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 44 Ζεύξη δεδομένων Data Coupling Δυο τμήματα συνδέονται με ζεύξη δεδομένων (data coupled) αν όλες οι παράμετροι είναι ομοιογενείς (homogeneous) και όλα τα δεδομένα που πέρνιουνται σαν παράμετροι χρησιμοποιούνται παράδειγμα: display_time_of_arrival (flight_number); compute_product (first_number, second_number); get_job_with_highest_priority (job_queue);
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 45 Γιατί η Ζεύξη Δεδομένων είναι ΚΑΛΗ; Οι δυσκολίες των ζεύξεων περιεχομένων, κοινών καθολικών μεταβλητών και coupling ΔΕΝ υπάρχουν σε αυτή την περίπτωση Ευκολότερη Συντήρηση
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 46 Παράδειγμα Ζεύξεων
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 47 Παράδειγμα Ζεύξεων(συνέχ.) Περιγραφή Interface
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 48 Ζεύξη ανάμεσα σε όλα τα ζεύγη των τμημάτων
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 49 Η σπουδαιότητα της ζεύξης (The Importance of Coupling) Αποτέλεσμα στενής ζεύξης (tight coupling) Με μια αλλαγή σε ένα τμήμα p μπορεί να χρειαστεί να γίνει αντίστοιχη αλλαγή στο τμήμα q Αν η αντίστοιχη Αλλαγή Δεν γίνει, αυτό έχει ως συνέπεια να οδηγηθούμε σε λάθη Καλός σχεδιασμός έχει Υψηλή Συνοχή και Χαμηλή Ζεύξη (high cohesion and low coupling) Τι άλλο χαρακτηρίζει ένα καλό σχεδιασμό;
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 50 Key Definitions
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 51 Data Encapsulation Παράδειγμα Σχεδιάστε ένα λειτουργικό σύστημα (operating system) για ένα μεγάλο mainframe computer. Οι εργασίες δέσμης (Batch jobs) που υποβάλλονται στον υπολογιστή θα κατηγοριοποιούνται με βάση την προτεραιότητα τους σε υψηλή προτεραιότητα (high priority), μέτρια προτεραιότητα (medium priority), ή σε χαμηλή προτεραιότητα (low priority). Για το σκοπό αυτό πρέπει να διατηρούνται τρεις ουρές (queues) for για τις εισερχόμενες δέσμες εργασίας, μια για κάθε τύπο εργασίας (με βάση την προτεραιότητα τους). Όταν μια εργασία υποβάλλεται από ένα χρήστη, τότε αυτή προστίθεται στην κατάλληλη ουρά, και όταν το λειτουργικό σύστημα αποφασίσει ότι μια εργασία είναι έτοιμη για εκτέλεση (run), αφαιρείται από την ουρά και δεσμεύεται μνήμη για αυτήν.
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 52 Data Encapsulation — Design 1: Χαμηλή συνοχή (Low cohesion) — οι λειτουργίες μιας ουράς εργασιών χρησιμοποιούνται σε ΟΛΟ το προϊόν
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 53 Data Encapsulation — Design 2
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 54 Data Encapsulation (συνέχ.) m_encapsulation Έχει πληροφοριακή συνοχή ( informational cohesion) m_encapsulation είναι υλοποίηση του data encapsulation Μια δομή δεδομένων (data structure) ( job_queue ) μαζί με πράξεις/λειτουργίες (operations) που εκτελούνται σε αυτή τη δομή δεδομένων Πλεονεκτήματα Ευκολότερη ανάπτυξη (Development) Ευκολότερη Συντήρηση (Maintenance) Γιατί;
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 55 Data Encapsulation and Development Data encapsulation είναι ένα παράδειγμα αφαιρετικότητας (abstraction) Παράδειγμα - Job queue : Δομή δεδομένων (Data structure) job_queue Τρεις νέες συναρτήσεις (functions) initialize_job_queue add_job_to_queue delete_job_from_queue
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 56 Data Encapsulation and Development Αφαιρετικότητα (Abstraction) Αντίληψη του προβλήματος σε ψηλό επίπεδο (higher level) Ουρές Εργασιών (Job queues) και πράξεις σε ουρές εργασιών Όχι σε χαμηλότερο επίπεδο (lower level) Records or arrays
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 57 Σταδιακή Εκλέπτυνση Stepwise Refinement 1. Σχεδιάστε το προϊόν με ψηλού επιπέδου όρους/ έννοιες Δεν έχει σημασία ΠΩΣ οι ουρές εργασιών υλοποιούνται 2. Στη συνέχεια σχεδιάστε τα χαμηλού επιπέδου τμήματα (lower level components) Αγνοήστε πλήρως το ΠΟΥ μπορεί να χρησιμοποιηθούν
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 58 Σταδιακή Εκλέπτυνση (συνέχ.,) Στο 1ο βήμα, υποθέστε την ύπαρξη του χαμηλότερου επιπέδου Η έγνοια μας είναι η συμπεριφορά (behavior) της δομής δεδομένων job_queue στο 2ο βήμα, αγνοήστε την ύπαρξη του ψηλότερου επιπέδου (higher level) Η έγνοια μας είναι η υλοποίηση αυτής της συμπεριφοράς Σε ένα μεγάλο προϊόν, θα υπάρχουν πολλά επίπεδα αφαιρετικότητας (abstraction)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 59 Data Encapsulation and Maintenance Προσδιορίστε τις πτυχές του προϊόντος που είναι πιθανό να αλλάξουν Σχεδιάστε το προϊόν με τρόπο που να ελαχιστοποιείτε η επίδραση των αλλαγών Οι Δομές δεδομένων (Data structures) είναι πιθανό να αλλάξουν Λεπτομέρειες στην υλοποίηση είναι πιθανό να αλλάξουν Data encapsulation παρέχει ένα τρόπο να αντιμετωπίσομε τις αλλαγές αποδοτικά
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 60 Implementation of Class JobQueue C++ Java
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 61 Υλοποίηση της queueHandler C++ Java
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 62 Data Encapsulation and Maintenance (συνέχ.) Τι θα συμβεί να η ουρά (queue) υλοποιηθεί σαν μια two- way linked list από JobRecord ; Το τμήμα που χρησιμοποιεί JobRecord δεν χρειάζεται να αλλάξει καθόλου, χρειάζεται απλά και μόνο ξανά compile C++ Java
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 63 Data Encapsulation and Maintenance (συνέχ.) ΜΟΝΟ λεπτομέρειες στην υλοποίηση της JobQueue έχουν αλλάξει
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 64 Αφηρημένοι Τύποι Δεδομένων (Abstract Data Types) Χρειαζόμαστε : Τύπους δεδομένων (Data type) + Πράξεις (operations) που θα εκτελούνται σε στιγμιότυπα (instantiations) αυτών των τύπων δεδομένων Αφηρημένοι Τύποι Δεδομένων (Αbstract data type)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 65 Παράδειγμα Abstract Data Type (Προβλήματα που δημιουργούνται από public attributes λύνονται αργότερα)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 66 Ακόμα ένα παράδειγμα Abstract Data Type
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 67 Απόκρυψη Πληροφοριών (Information Hiding) Αφαιρετικότητα Δεδομένων (Data abstraction) Ο σχεδιαστής σκέφτεται στο επίπεδο ενός ADT Αφαιρετικότητα Διαδικασιών (Procedural abstraction) Ορισμός διαδικασίας — επέκταση της γλώσσας (language) Και τα δυο είναι παραδείγματα μιας πιο γενικής έννοιας σχεδιασμού αυτής της απόκρυψης πληροφοριών (information hiding) Σχεδιάστε τα διάφορα κομμάτια (modules) με τέτοιο τρόπο ώστε τα μέρη που είναι πιθανό να αλλάξουν να είναι κριμένα (hidden) Μελλοντικές αλλαγές γίνονται τοπικά Αλλαγές Δεν επηρεάζουν άλλα τμήματα
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 68 Απόκρυψη Πληροφοριών(συνέχ.) Υλοποίηση στη C++ ενός ΑDT με απόκρυψη πληροφοριών ( information hiding)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 69 Απόκρυψη Πληροφοριών(συνέχ.,) Υλοποίηση απόκρυψης πληροφοριών (information hiding) μέσω απόρρητων/ιδιωτικών πεδίων ( private attributes)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 70 Η βασική έννοια αυτού του κεφαλαίου
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 71 Αντικείμενα (Objects) Πρώτη προσέγγιση (First refinement) Το προϊόν σχεδιάζεται με όρους των ADT Μεταβλητές (Variables) (“objects”) είναι στιγμιότυπα (instantiations) ενός αφημένου τύπου δεδομένων (abstract data type) Δεύτερη εκλέπτυνση (Second refinement) Κατηγορία (Class): ένας αφηγημένος τύπος δεδομένων που υποστηρίζει κληρονομικότητα (inheritance) Τα αντικείμενα (Objects) είναι στιγμιότυπα (instantiations) των κατηγοριών (classes)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 72 Κληρονομικότητα Inheritance Ορίστε το HumanBeing να είναι μια class Ένα HumanBeing έχει πεδιά/χαρακτηριστικά (attributes), όπως age, height, gender Αναθέτοντας τιμές στα πεδία περιγράφομε ένα αντικείμενο
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 73 Κληρονομικότητα (συνέχ.) Ορίστε την class Parent να είναι subclass of HumanBeing ένα Parent έχει όλα τα πεδία (attributes) ενός HumanBeing, συν δικά του πεδία (attributes) nameOfOldestChild, numberOfChildren Ένας Parent κληρονομεί ( inherits) όλα τα πεδία του HumanBeing
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 74 Κληρονομικότητα(συνέχ.,) Η ιδιότητα της ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑΣ (inheritance) είναι ένα ουσιαστικό χαρακτηριστικό όλων των αντικειμενοστρεφών γλωσσών προγραμματισμού (object-oriented languages) Όπως, Smalltalk, C++, Ada 95, Java Αλλά ΟΧΙ των κλασικών γλωσσών Όπως, C, COBOL ή FORTRAN
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 75 Κληρονομικότητα (συνέχ.,) Στη Σημειογραφία της UML (UML notation) Η κληρονομικότητα (Inheritance) αναπαριστάται με ένα μεγάλο άχρωμο τρίγωνο (large open triangle)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 76 Java Implementation
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 77 Συσσωμάτωση Aggregation Η UML σημειογραφία για τη συσσωμάτωση (aggregation) είναι άχρωμος ρόμβος (open diamond)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 78 Συνεργασία Association Η UML σημειογραφία για τη συνεργασία (association) είναι μια γραμμή με ένα τρίγωνο πλοήγησης (navigation triangle)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 79 Ισοδυναμία Δεδομένων και Ενεργειών (Equivalence of Data and Action) Κλασικό Παράδειγμα (Classical paradigm) record_1.field_2 Αντικειμενοστρφές Παράδειγμα (Object-oriented paradigm) thisObject.attributeB thisObject.methodC ()
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 80 Κληρονομικότητα, Πολυμορφισμός, και Δυναμική Ζεύξη Inheritance, Polymorphism and Dynamic Binding Κλασικό παράδειγμα Πρέπει να καλέσουμε την κατάλληλη έκδοση της συνάρτησης
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 81 Κληρονομικότητα, Πολυμορφισμός, και Δυναμική Ζεύξη (συνέχ) Αντικειμενοστρεφές Παράδειγμα
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 82 Κληρονομικότητα, Πολυμορφισμός, και Δυναμική Ζεύξη (συνεχ) Κλασική μέθοδος για να ανοίξομε ένα αρχείο (Classical code to open a file) Η σωστή μέθοδος επιλέγεται ξεκάθαρα από την αρχή
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 83 Κληρονομικότητα, Πολυμορφισμός, και Δυναμική Ζεύξη (συνεχ) Object-oriented code to open a file Η σωστή μέθοδος καλείται at run-time (dynamically) Η μέθοδος open μπορεί να εφαρμοστεί σε αντικείμενα (objects) διαφορετικών κατηγοριών (classes) ΠΟΛΥΜΟΡΦΗΣΜΟΣ (“Polymorphic”)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 84 Κληρονομικότητα, Πολυμορφισμός, και Δυναμική Ζεύξη (συνεχ) Η μέθοδος checkOrder (b : Base) μπορεί να εφαρμοστεί σε objects οποιασδήποτε subclass of Base
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 85 Κληρονομικότητα, Πολυμορφισμός, και Δυναμική Ζεύξη (συνεχ) Πολυμορφισμός και Δυναμική Ζεύξη (Polymorphism and dynamic binding) Μπορεί να έχει αρνητική επίδραση στη συντήρηση (on maintenance) Ο κώδικας είναι δύσκολο να κατανοηθεί όταν υπάρχουν διαφορετικές/πολλαπλές πιθανότητες (multiple possibilities) μιας συγκεκριμένης μεθόδου Πολυμορφισμός και Δυναμική Ζεύξη Είναι ταυτόχρονα πλεονέκτημα και μειονέκτημα του object-oriented paradigm
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 86 Το Αντικειμενοστρεφές Παράδειγμα The Object-Oriented (ΟΟ) Paradigm Οι λόγοι επιτυχίας του ΟΟ (object-oriented) παραδείγματος Το ΟΟ παράδειγμα δίνει ίση προσοχή σε δεδομένα και πράξεις (data and operations) Κάθε στιγμή τα δεδομένα και οι λειτουργίες ευνοούνται Ένα καλά σχεδιασμένο αντικείμενο (well-designed object) (με high cohesion, low coupling) μοντελοποιεί όλες τις πτυχές (aspects) μιας φυσικής οντότητας Οι λεπτομέρειες της υλοποίησης είναι κρυμμένες
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 87 Το Αντικειμενοστρεφές Παράδειγμα(συνέχ.,) Ο λόγος που το δομημένο παράδειγμα (structured paradigm) δούλευε καλά στην αρχή Η εναλλακτική ήταν ΚΑΝΕΝΑ παράδειγμα (no paradigm at all)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 88 Το Αντικειμενοστρεφές Παράδειγμα(συνέχ.) Πως ξέρουμε ότι το ΟΟ παράδειγμα είναι η καλύτερη τρέχουσα επιλογή; ΔΕΝ το ξέρουμε Όμως, οι περισσότερες αναφορές το υποστηρίζουν Πειραματικά Δεδομένα (Experimental data) (e.g., IBM [1994]) Survey of programmers [2000]
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 89 Αδυναμίες του Object-Oriented Paradigm Η προσπάθεια που γίνεται για να αναπτυχθεί ένα προϊόν (Development effort) και το μέγεθος (size) του προϊόντος μπορεί να είναι μεγάλα Μπορεί το object-oriented project να είναι μεγαλύτερο από ότι αναμένεται Χρειάζεται να μάθουμε καταρχήν το ΟΟ παράδειγμα Λόγω του GUI όμως, μερικές classes μπορεί συχνά να ξαναχρησημοποιηθούν σε επόμενα projects Ιδικά αν υπάρχει GUI
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 90 Αδυναμίες του Object-Oriented Paradigm (συνέχ) Η κληρονομικότητα μπορεί να προκαλέσει προβλήματα The fragile base class problem Για να περιοριστεί η ripple effect, όλες οι classes πρέπει να σχεδιαστούν προσεκτικά από την αρχή Μια subclass κληρονομά από το πατέρα της τα χαρακτηριστικά του, εκτός αν αυτό έχει οριστεί διαφορετικά Τα Objects στα χαμηλά επίπεδα του δέντρου της ιεραρχίας μπορεί να είναι πολύ μεγάλα “Χρήση κληρονομικότητας Μόνο όπου χρειάζεται” Αποκλείστε μη απαραίτητα inherited attributes
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 91 Αδυναμίες του Object-Oriented Paradigm (συνέχ) Όπως είπαμε και πιο πριν, η χρήση πολυμορφισμού και δυναμικής ζεύξης μπορεί να οδηγήσει σε προβλήματα Είναι εύκολο να γράψει κάποιος κακό κώδικα (bad code) σε οποιαδήποτε γλώσσα Είναι ιδιαίτερος εύκολο να συμβεί αυτό (να γράψει κάποιος κακό object-oriented code)
Τεχνολογία Υπολογισμού Δρ. Μαρία Ι. Ανδρέου 92 Αδυναμίες του Object-Oriented Paradigm (συνέχ) Μια μέρα, το object-oriented paradigm θα αντικατασταθεί από κάποιο καλύτερο Aspect-oriented programming is one possibility But there are many other possibilities