1 / 107

Σημερινή παρουσίαση

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Λεπτομερής Σχεδίαση (2/2) Μανόλης Γιακουμάκης αναπληρωτής καθηγητής ΟΠΑ. Σημερινή παρουσίαση. Από το σχέδιο στον κώδικα Κλάσεις Απλοί τύποι Συσχετίσεις Κληρονομικότητα και διεπαφές Διαγράμματα ακολουθίας

rolf
Download Presentation

Σημερινή παρουσίαση

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥΛεπτομερής Σχεδίαση(2/2)Μανόλης Γιακουμάκηςαναπληρωτής καθηγητής ΟΠΑ ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  2. Σημερινή παρουσίαση • Από το σχέδιο στον κώδικα • Κλάσεις • Απλοί τύποι • Συσχετίσεις • Κληρονομικότητα και διεπαφές • Διαγράμματα ακολουθίας • Συστάσεις αντικειμενοστρεφούς σχεδίασης • Σχεδίαση κλάσεων • Μεταβίβαση, κληρονομικότητα και πολυμορφισμός • Συνεργασία αντικειμένων • Σχεδίαση πακέτων ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  3. Από το σχέδιο στον κώδικα • Όταν ο σχεδιαστής του λογισμικού προσεγγίζει τη σχεδίαση των βασικών δομικών μονάδων του λογισμικού, επικοινωνεί τις σχεδιαστικές του επιλογές στον προγραμματιστή. • Επειδή ακριβώς η σχεδίαση με τα διαγράμματα κλάσεων της UML είναι πολύ κοντά και στον προγραμματισμό, ο σχεδιαστής του λογισμικού θα πρέπει να γνωρίζει πώς μεταφέρεται το σχέδιο στον κώδικα. • Επίσης, θα πρέπει σε περιπτώσεις όπου η UML αφήνει περιθώρια ερμηνειών των στοιχείων μοντελοποίησης, να υπάρξει μία εκ των προτέρων συμφωνία μεταξύ σχεδιαστή και του προγραμματιστή για την ερμηνεία τους. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  4. public class Employee {private static int lastEmpId ;protected int Id;private String firstName;private String lastName;public final int maxNumberOfPhones = 2;private String[] phoneNumbers = new String[maxNumberOfPhones];public String getFirstName() {}public void setFistName(String firstName){}public String getLastName() {}public void setLastName(String lastName){}public void paySalary(Month month){}protected void calculateSalary(Month month) {}public static int nextEmployeeId(){} } Κλάσεις ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  5. Κλάσεις • Η υλοποίηση των κλάσεων, των ιδιοτήτων και των λειτουργιών της UML είναι σχεδόν αυτόματη διαδικασία. Οι κλάσεις της UML μετατρέπονται σε κλάσεις της Java, οι ιδιότητες γίνονται πεδία και οι λειτουργίες μέθοδοι. • Ένα σημείο που χρήζει κάποιας προσοχής είναι οι ορατότητες της UML. Οι ορατότητες, όπως ορίζονται στη UML, έχουν όμοια αντιστοιχία με τις ορατότητες της Java με κάποιες λεπτές διαφορές. Για παράδειγμα η προστατευμένη (protected) ορατότητα της Java είναι ταυτόχρονα και ορατότητα πακέτου (package). ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  6. Η έννοια της ισότητας των αντικειμένων τιμών στη Java University a = new University(); a.setName("AUEB"); University b = a; ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  7. Η έννοια της ισότητας των αντικειμένων τιμών στη Java University a = new University(); a.setName("AUEB"); University b = new University(); b.setName("AUEB”); ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  8. Η έννοια της ισότητας των αντικειμένων τιμών στη Java Όταν συγκρίνουμε δύο αναφορές σε αντικείμενα απλών τύπων, πχ ημερομηνιών, μας ενδιαφέρει εάν οι δύο αναφορές αναφέρονται στις ίδιες ημερομηνίες. Θέλουμε επομένως σύγκριση βάσει των τιμών και όχι βάσει των ταυτοτήτων των αντικειμένων. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  9. Συσχετίσεις • Τα δύο σημαντικότερα στοιχεία που θα πρέπει να έχει υπόψη του ο σχεδιαστής για μία συσχέτιση είναι η πολλαπλότητα και η πλοηγησιμότητα στα άκρα των συσχετίσεων. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  10. Μονόδρομες συσχετίσεις με πολλαπλότητα ένα • Ο κώδικας που αντιστοιχεί στο διάγραμμα είναι: • public class Book { • private Publisher publisher; • public void setPublisher(Publisher publisher) { • this.publisher = publisher; • } • public Publisher getPublisher() { • return publisher; • } • } ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  11. Μονόδρομες συσχετίσεις με πολλαπλότητα ένα • Για να υλοποιήσουμε την απλή συσχέτιση όπου κάθε αντικείμενο της κλάσης Book γνωρίζει ένα αντικείμενο της κλάσης Publisher, δημιουργούμε ένα πεδίο publisher με τύπο Publisher εντός της κλάσης Book . Την ονομασία του πεδίου την πήραμε από το όνομα του άκρου της συσχέτισης του σχήματος 8-33. • Η μέθοδος setPublisher ενημερώνει το πεδίο και η μέθοδος getPublisher το επιστρέφει ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  12. Μονόδρομες συσχετίσεις με πολλαπλότητα πολλά public class Book { private Set<Item> items = new HashSet<Item>(); public Set<Item> getItems(){ return items; } } ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  13. Μονόδρομες συσχετίσεις με πολλαπλότητα πολλά • Θα πρέπει επομένως να χρησιμοποιήσουμε μία συλλογή στην κλάση Book που θα περιέχει αναφορές προς τα συσχετιζόμενα αντικείμενα της κλάσης Item. • Μία συλλογή που μπορεί να χρησιμοποιηθεί είναι τα σύνολα της Java. Για τα σύνολα η Java παρέχει τη διεπαφή Set και ορισμένες κλάσεις που την υλοποιούν, όπως οι κλάσεις HashSet και TreeSet. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  14. Η χρήση συλλογών για την υλοποίηση της πολλαπλότητας Το σχήμα παρουσιάζει διαγραμματικά τη χρήση των συλλογών. Ένα αντικείμενο της κλάσης Book έχει την αναφορά items προς μία συλλογή. Αν και πολλές φορές λέμε ότι μία συλλογή περιέχει αντικείμενα, στην πραγματικότητα περιέχει αναφορές προς αντικείμενα. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  15. Η χρήση συλλογών για την υλοποίηση της πολλαπλότητας • Εφόσον η συλλογή items αρχικοποιείται σε συλλογή HashSet, θα ήταν λογικό να επιστρέφουμε HashSet και από την getItems(). Προτιμούμε όμως να επιστρέφουμε τη συλλογή ως τη διεπαφή Set και όχι την υλοποίηση που είναι η κλάση HashSet. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  16. Η χρήση συλλογών για την υλοποίηση της πολλαπλότητας • Οι πελάτες της κλάσης Book δε γνωρίζουν την υλοποίηση της συλλογής των αντικειμένων, γνωρίζουν μόνο ότι η συλλογή είναι σύνολο. • Η καλή πρακτική για το χειρισμό των συλλογών είναι να δημοσιεύονται στους πελάτες οι διεπαφές (π.χ. Set) και όχι οι κλάσεις που τις υλοποιούν (π.χ. HashSet). Αυτό γιατί οι υλοποιήσεις των συλλογών μπορεί να αλλάζουν, αλλά δε θέλουμε οι αλλαγές αυτές να επηρεάζουν τους πελάτες. • Η υλοποίηση αυτή διευκολύνει ακόμα περισσότερο την αλλαγή της υλοποίησης της συλλογής items. Η αλλαγή στην αρχικοποίηση της συλλογής σε items = new TreeSet() δεν επηρεάζει τους πελάτες της κλάσης Book. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  17. Η χρήση συλλογών για την υλοποίηση της πολλαπλότητας • Έτσι, όταν θέλουμε να χρησιμοποιήσουμε τη συλλογή items, θα έχουμε κάποιοκώδικα όπως:Book oneBook = new Book();Item oneItem = new Item();oneBook.getItems().add(oneItem);oneBook.getItems().remove(oneItem); • Με το τμήμα του κώδικα παραπάνω, δημιουργούνται δύο αντικείμενα oneBookκαι oneItem. Εισάγουμε το αντικείμενο oneItem στη συλλογή items και αμέσωςμετά το απομακρύνουμε από τη συλλογή. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  18. Η χρήση συλλογών για την υλοποίηση της πολλαπλότητας • Σε αυτό το σημείο πρέπει να σημειώσουμε ότι δεν υπάρχει κάποια μέθοδος setItems στην κλάση Book, γιατί δεθέλουμε οι πελάτες να τροποποιούν απευθείας τη συλλογή, αλλά μόνο μέσω τωνμεθόδων εισαγωγής και διαγραφής αντικειμένων. Εάν υπήρχε, θα μπορούσε ναυπάρξει ο κώδικας:oneBook.setItems(null); • κώδικας που διαγράφει όλη τη συλλογή, κάτι που προφανώς δεν είναι επιθυμητό. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  19. Η χρήση συλλογών για την υλοποίηση της πολλαπλότητας • Όταν χρησιμοποιούμε συλλογές σε ένα αντικείμενο, εισάγουμε νέες βοηθητικέςμεθόδους για την πρόσθεση και απομάκρυνση αντικειμένων, έτσι ώστε ο πελάτηςνα μη χρησιμοποιεί απευθείας τη συλλογή. • Έτσι, στην κλάση Book προσθέτουμετις δύο βοηθητικές μεθόδους παρακάτω:public class Book {//…public void addItem(Item item) {if (item != null ) {items.add(item); }}public void removeItem(Item item) {if (item != null) {items.remove(item); }}} ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  20. Η χρήση συλλογών για την υλοποίηση της πολλαπλότητας • Οι βοηθητικές μέθοδοι μας βοηθούν, αλλά ο πελάτης εξακολουθεί να έχει πρόσβαση στη συλλογή μέσω του παρακάτω κώδικα:Set<Item> myItems = oneBook.getItems()myItems.add(aSecondItem) • Μπορεί επομένως ο πελάτης να προσθέσει απευθείας αντικείμενα στη συλλογή,χωρίς να χρησιμοποιήσει τις βοηθητικές μεθόδους. Θα επιθυμούσαμε επομένωςνα ενθυλακώσουμε πλήρως τη συλλογή και να εξαναγκάσουμε τους πελάτεςτης κλάσης Book να χρησιμοποιήσουν τις βοηθητικές μεθόδους addItem καιremoveItem. • Η ενθυλάκωση αυτή γίνεται με την επιστροφή αντιγράφου τηςσυλλογής και όχι την ίδια τη συλλογή. Αυτό επιτυγχάνεται με την τροποποίησητης μεθόδου getItems παρακάτω:public Set<Item> getItems(){ return new HashSet<Item>(items); } ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  21. Η χρήση συλλογών για την υλοποίηση της πολλαπλότητας • Η getItems επιστρέφει πλέον αντίγραφα της συλλογής items και όχι την ίδιατη συλλογή. Τα αντίγραφα των συλλογών δίνουν πρόσβαση στα αντικείμενα πουπεριέχουν και αφήνουν φυσικά την πλήρη χρήση τους, όπως για παράδειγματην τροποποίηση των πεδίων τους. Αυτό που απαγορεύουν είναι η απευθείαςπρόσβαση στη συλλογή. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  22. Η χρήση συλλογών για την υλοποίηση της πολλαπλότητας ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  23. Η χρήση συλλογών για την υλοποίηση της πολλαπλότητας • Το σχήμα 8-36 παρουσιάζει την εικόνα ενός αντιγράφου της συλλογής. Εάνυποθέσουμε ότι έχουμε τον κώδικα:Set<Item> myItems = oneBook.getItems();τότε η συλλογή myItems είναι το αντίγραφο της συλλογής του αντικειμένου oneBook. • Μέσω της συλλογής myItems έχουμε πρόσβαση σε όλα τα αντικείμενακαι μπορούμε να αλλάξουμε την κατάστασή τους. Η πρόσθεση και η απομάκρυνσηαντικειμένων γίνεται πλέον στο αντίγραφο της συλλογής και όχι στην αρχική. Γιανα γίνει πρόσθεση ή απομάκρυνση αντικειμένων στην αρχική συλλογή θα πρέπεινα χρησιμοποιηθούν οι βοηθητικές μέθοδοι addItem και removeItem. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  24. Η χρήση συλλογών για την υλοποίηση της πολλαπλότητας • Έστω για παράδειγμα ο κώδικας:oneBook.addItem(oneItem);oneBook.getItems().add(secondItem); • Η πρώτη γραμμή του κώδικα θα εισαγάγει το αντικείμενο oneItem στην (ενθυλακωμένη) συλλογή items. Η δεύτερη γραμμή όμως θα εισαγάγει το αντικείμενοsecondItem σε αντίγραφο της συλλογής items. Η συλλογή items δε θα αλλάξει. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  25. Η χρήση συλλογών για την υλοποίηση της πολλαπλότητας • Η τελική εικόνα της υλοποίησης γίνεται:public class Book {private Set<Item> items = new HashSet<Item>();public Set<Item> getItems() {return new HashSet<Item>(items); }public void addItem(Item item) {if (item != null ) {items.add(item); }}public void removeItem(Item item) {if (item != null) {items.remove(item); }}} ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  26. Αμφίδρομες Συσχετίσεις • Μία αμφίδρομησυσχέτιση υλοποιείται με δύο μονόδρομες. Υπάρχει όμως μία πολύ σημαντικήδιαφορά. Όλες οι αλλαγές στη μία μονόδρομη συσχέτιση θα πρέπει να απεικονίζονται στην άλλη. • Μία αμφίδρομη συσχέτιση μεταξύ δύο κλάσεων σημαίνειαυτόματα ότι οι δύο κλάσεις είναι αμοιβαία εξαρτώμενες. • Η σύζευξη των κλάσεων με αμφίδρομη συσχέτιση είναι υψηλότερη της σύζευξης με μονόδρομη. Οιαμφίδρομες συσχετίσεις δυσχεραίνουν και τη συντήρηση του λογισμικού. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  27. Αμφίδρομες Συσχετίσεις public class Item { private Book book; public Book getBook() { return book; }} public class Book { private Set<Item> items = new HashSet<Item>(); public void addItem(Item item) {//…} public void removeItem(Item item) {//…} } ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  28. Αμφίδρομες Συσχετίσεις ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  29. Συσσωμάτωση • Η διαφορά μεταξύ της απλής συσχέτισης και της συσσωμάτωσης είναι περισσότερο εννοιολογική. • Η Java δεν προσφέρει κάποια διάκριση μεταξύ της απλής συσχέτισης και της συσσωμάτωσης. • Αν ο σχεδιαστής χρησιμοποιήσει τη συσσωμάτωση στη σχεδίαση, θα πρέπει να συμφωνήσει με τους προγραμματιστές για την ερμηνεία της συσσωμάτωσης κατά την υλοποίηση. • Μία πιθανή εννοιολογική ερμηνεία της συσσωμάτωσης (χωρίς να είναι και η μόνη) είναι ότι το όλο δεν μπορεί να λειτουργήσει χωρίς το τμήμα του. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  30. Συσσωμάτωση public class Car { Engine engine; public void drive() throws CarException { if (engine == null ) { throw new CarException(); } // ο κώδικας της οδήγησης } } Ο κώδικας υλοποίησης της συσσωμάτωσης δεν αλλάζει σε σχέση με τη συσχέτιση. Η συσσωμάτωση υλοποιείται ως ένα πεδίο τύπου Engine στην κλάση Car. Η διαφορά είναι στην υλοποίηση της μεθόδου drive. Δεν μπορούμε να οδηγήσουμε ένα αυτοκίνητο χωρίς τον κινητήρα του, οπότε η κλήση της μεθόδου drive, χωρίς να υπάρχει κινητήρας, δίδει (ρίχνει) εξαίρεση. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  31. Σύνθεση • Η σύνθεση είναι μία ιδιαίτερη περίπτωση της συσχέτισης όλου / τμήματος, μόνο που συνοδεύεται με κάποιους περιορισμούς. Οι περιορισμοί είναι ότι το αντικείμενο τμήμα ανήκει αποκλειστικά σε ένα αντικείμενο όλο και ότι το αντικείμενο όλο διαχειρίζεται πλήρως τον κύκλο ζωής του αντικειμένου τμήμα. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  32. Σύνθεση public class Borrower { private Address address = new Address(); public void setStreet(String street) { address.setStreet(street); } public String getStreet() { return address.getStreet(); } public void setNumber(String number) { address.setNumber(number); } public String getNumber() { return address.getNumber(); } //Όλες οι μέθοδοι πρόσβασης της Address } ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  33. Κληρονομικότητα και διεπαφές • Η χρήση της κληρονομικότητας, της υλοποίησης και των διεπαφών παρέχει συγκεκριμένες οδηγίες στον προγραμματιστή για τη μετάβαση από το σχέδιο στον κώδικα. • Η μεταφορά της κληρονομικότητας και της υλοποίησης των διεπαφών από τη UML στη Java είναι και πάλι σχεδόν αυτόματη. Η μεγαλύτερη ίσως ασυνέπεια μεταξύ της UML και της Java είναι ότι η Java δεν υποστηρίζει την πολλαπλή κληρονομικότητα. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  34. Κληρονομικότητα και διεπαφές ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  35. Κληρονομικότητα και διεπαφές • public interface Transport {public void move(); }public interface Vehicle extends Transport {public void drive(); }public abstract class AutoMobile implements Vehicle{public void drive() {// Η αφηρημένη κλάση AutoMobile υλοποιεί τη μέθοδο drive }public void move() {// Η αφηρημένη κλάση AutoMobile υλοποιεί τη μέθοδο move } } ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  36. Κληρονομικότητα και διεπαφές • public class Car extends AutoMobile{// Η κλάση Car κληρονομεί την υλοποίηση της μεθόδου drive.// Η μέθοδος drive μπορεί να επαναοριστεί }public class Truck extends AutoMobile{// Η κλάση Truck κληρονομεί την υλοποίηση της μεθόδου drive.// Η μέθοδος drive μπορεί να επαναοριστεί }public class Boat implements Transport{public void move() {// Η κλάση Boat υλοποιεί τη μέθοδο move } } ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  37. Διαγράμματα ακολουθίας ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  38. Διαγράμματα ακολουθίας • public class Order {private Set<OrderLine> orderLines = newHashSet<OrderLine>();public int getTotal() {int total = 0;for(OrderLine orderLine : orderLines) {total += orderLine.getSubTotal(); }return total; }}public class OrderLine {private int quantity;private Product product;public int getSubTotal() {return product.getPrice(quantity);} }public class Product {private int price;public int getPrice(int quantity) {return price * quantity; } } ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  39. Συστάσεις αντικειμενοστρεφούςσχεδίασης • συστάσεις για τη σχεδίαση μεμονωμένων κλάσεων, • συστάσεις για την κληρονομικότητα και τον πολυμορφισμό, και • συστάσεις για τη συνεργασία αντικειμένων ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  40. Σχεδίαση κλάσεων • Μία κλάση θα πρέπει να απεικονίζει μία αφαίρεση. • Η δημόσια διεπαφή μίας κλάσης θα πρέπει να είναι σταθερή και συνεπής με το επίπεδο αφαίρεσης της κλάσης. • Μία κλάση θα πρέπει να έχει υψηλή συνεκτικότητα, εξυπηρετώντας ένα συγκεκριμένο και καλά ορισμένο σκοπό. • Οι πράξεις (μέθοδοι) που επιδρούν σε κάποια δεδομένα θα πρέπει να βρίσκονται στην κλάση που είναι τα δεδομένα αυτά. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  41. Σχεδίαση κλάσεων • Όλα τα δεδομένα μίας κλάσης θα πρέπει να έχουν ιδιωτική ορατότητα. • Η δημόσια διεπαφή θα πρέπει να κρύβει λεπτομέρειες της υλοποίησής της. • Η συνεκτικότητα θα πρέπει να αξιολογείται όχι μόνο στο επίπεδο της κλάσης ως ολότητας, αλλά και σε καθεμία από τις λειτουργίες της. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  42. Μεταβίβαση και κληρονομικότητα • Η κληρονομικότητα είναι ένα από τα βασικότερα μέσα για την επαναχρησιμοποίηση λογισμικού. • Το άλλο μέσο επαναχρησιμοποίησης του λογισμικού είναι η μεταβίβαση (delegation) που σε ένα αντικειμενοστρεφές σύστημα λογισμικούείναι εξίσου σημαντική με την κληρονομικότητα. • Η ιδέα της μεταβίβασης είναι ότι μία κλάση μεταβιβάζει δικές της αρμοδιότητες σε κάποια άλλη κλάση, την οποία και χρησιμοποιεί μέσω ανταλλαγής μηνυμάτων. • Όποτε μπορούμε, προτιμούμε τη μεταβίβαση έναντι της κληρονομικότητας (λόγω καλύτερης σύζευξης) ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  43. Μεταβίβαση και κληρονομικότητα ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  44. Κανόνες για τη χρήση μεταβίβασης και κληρονομικότητας • Εάν πολλές κλάσεις έχουν κοινά δεδομένα αλλά όχι κοινή συμπεριφορά, τότε δημιουργείται μία νέα κλάση που ομαδοποιεί τα δεδομένα και οι κλάσεις συσχετίζονται με τη νέα κλάση με χρήση της μεταβίβασης. • Εάν πολλές κλάσεις έχουν κοινή συμπεριφορά αλλά όχι δεδομένα, τότε δημιουργούμε είτε αφηρημένη κλάση την οποία κληρονομούν οι κλάσεις που μας ενδιαφέρουν ή μία διεπαφή την οποία υλοποιούν. • Εάν πολλές κλάσεις έχουν κοινά δεδομένα και συμπεριφορά, τότε ορίζουμε μία νέα αφηρημένη ή συγκεκριμένη κλάση την οποία κληρονομούν οι κλάσεις που μας ενδιαφέρουν και η οποία ορίζει τα κοινά δεδομένα και την κοινή συμπεριφορά. • Εάν πολλές κλάσεις έχουν κοινή δημόσια διεπαφή, χωρίς να έχουν κοινή υλοποίηση και πρόκειται να χρησιμοποιηθούν πολυμορφικά, τότε ορίζεται μία διεπαφή την οποία υλοποιούν οι κλάσεις. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  45. Η μεταβίβαση αντί της κληρονομικότητας στο σύστημα δανεισμού ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  46. Η μεταβίβαση αντί της κληρονομικότητας στο σύστημα δανεισμού Αρχική εκδοχή ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  47. Η μεταβίβαση αντί της κληρονομικότητας στο σύστημα δανεισμού Μεταβίβαση ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  48. Κληρονομικότητα • Η κληρονομικότητα είναι από τα ισχυρότερα εργαλεία που παρέχονται στο σχεδιαστή και τον προγραμματιστή του λογισμικού. • Όμως η χρήση της ενέχει κάποιους κινδύνους. • Εάν τελικά αποφασίσουμε να χρησιμοποιήσουμε την κληρονομικότητα, υπάρχουν δύο πρόσθετοι σημαντικοί έλεγχοι για να διαπιστώσουμε τη σωστή χρήση της. Είναι η εφαρμογή του κανόνα «είναι-ένα» και η αρχή της υποκατάστασης. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  49. Κληρονομικότητα - ο κανόνας«είναι-ένα» • Με την εφαρμογή του κανόνα «είναι-ένα» κάθε υποκλάση θα πρέπει να είναι μία λογική εξειδίκευση της υπερκλάσης της. • Για παράδειγμα, εκφράσεις «ο κύκλος είναι ένα σχήμα», βοηθούν στον ορισμό της κλάσης Κύκλος ως υποκλάση της κλάσης Σχήμα. • Η εφαρμογή του κανόνα στο επίπεδο της σχεδίασης θα πρέπει να περιλαμβάνει υποχρεωτικά τη δημόσια διεπαφή των κλάσεων. Η δημόσια διεπαφή της υποκλάσης θα πρέπει να υπακούει στη δημόσια διεπαφή της υπερκλάσης της. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

  50. Η αρχή της υποκατάστασης • Η αρχή της υποκατάστασης μας λέει ότι κάθε υποκλάση θα πρέπει να υποκαθιστά πλήρως την υπερκλάση της. Τα αντικείμενα μίας υποκλάσης θα πρέπει να χρησιμοποιούνται ως αντικείμενα της υπερκλάσης, χωρίς να δημιουργούνται παρενέργειες. • Με την εφαρμογή της αρχής της υποκατάστασης εξετάζουμε εάν μία υποκλάση είναι πράγματι εξειδίκευση της υπερκλάσης της. • Ένας απλός πρακτικός έλεγχος για την εφαρμογή της αρχής είναι να θεωρήσουμε ότι οι χρήστες της υποκλάσης χρησιμοποιούν τα αντικείμενά μέσω αναφορών στην υπερκλάση της. Ελέγχουμε δηλαδή τη συμπεριφορά της υποκλάσης, όταν οι χρήστες της δε γνωρίζουν την ύπαρξή της. ΟΠΑ -Τεχνολογία Λογισμικού – Εμμ. Γιακουμάκης

More Related