Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Μεθοδολογίες Προγραμματισμού ΙΙ Σχεδιαστικά Πρότυπα (1) Παναγιώτης Σφέτσος, PhD

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Μεθοδολογίες Προγραμματισμού ΙΙ Σχεδιαστικά Πρότυπα (1) Παναγιώτης Σφέτσος, PhD"— Μεταγράφημα παρουσίασης:

1 Μεθοδολογίες Προγραμματισμού ΙΙ Σχεδιαστικά Πρότυπα (1) Παναγιώτης Σφέτσος, PhD

2 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 2 Στόχοι  Γενικά για τα Πρότυπα  Σχεδιαστικά Πρότυπα  Κατασκευαστικά (Creational)  Δομικά (Structural)  Συμπεριφορικά (Behavioral)

3 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 3 Σχεδιαστικά Πρότυπα Christopher Alexander: Αρχιτέκτονας, 1979 Αναγνώριση κοινών χαρακτηριστικών σε σχέδια «καλής ποιότητας» ή αλλιώς... «Κοινές Λύσεις» σε «Κοινά Προβλήματα» για παραγωγή σχεδίων «καλής ποιότητας» :: Από την Αρχιτεκτονική …

4 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 4 Σχεδιαστικά Πρότυπα Αρχές '90…. Υπάρχουν προβλήματα στο λογισμικό τα οποία επαναλαμβάνονται; Υπάρχει η δυνατότητα σχεδίασης λογισμικού με πρότυπα; Οι Gamma, Helm, Johnson και Vlissides (Gang of Four - GoF) απάντησαν “ΝΑΙ”. :: Στο Λογισμικό…

5 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 5 Σχεδιαστικά Πρότυπα Ένα πρότυπο περιγράφει ένα επαναλαμβανόμενο πρόβλημα, σε ένα συγκεκριμένο περιβάλλον, και μια καλά τεκμηριωμένη λύση του. Συνέπειες:  Επαναχρησιμοποίηση σχεδίων  Επαναχρησιμοποίηση κώδικα  Διαχείριση αλλαγών Οι GoF κατήρτισαν έναν κατάλογο με 23 πρότυπα σχεδίασης. :: Ορισμός

6 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 6 Περιγραφή των Προτύπων Ο κατάλογος των χαρακτηριστικών των προτύπων GoF:

7 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 7 Σχεδιαστικά Πρότυπα  Σχεδιάζουμε με διασυνδέσεις (διεπαφές ή αφηρημένες κλάσεις)  Προτιμούμε την σύνθεση (composition) από την κληρονομικότητα (inheritance)  Βρίσκουμε τι αλλάζει και το ενθυλακώνουμε (encapsulate) :: Κανόνες Σχεδίασης με τα Πρότυπα

8 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 8 Σχεδιαστικά Πρότυπα Κατηγορίες: Κατασκευαστικά (Creational): Ασχολούνται με τις διεργασίες δημιουργίας των αντικειμένων Δομικά (Structural): Ασχολούνται με τις διεργασίες σύνθεσης των κλάσεων/αντικειμένων Συμπεριφορικά (Behavioral): Ασχολούνται με τους τρόπους με τους οποίους οι κλάσεις αλληλεπιδρούν και κατανέμουν τις αρμοδιότητες :: Στοιχεία των προτύπων

9 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 9 Strategy (Στρατηγική) 1/6 Κατηγορία: Behavioral Σκοπός: Το πρότυπο αυτό ορίζει και ενσωματώνει μια οικογένεια αλγορίθμων (σαν αντικείμενα) επιτρέποντας ταυτόχρονα και την εναλλακτική εκτέλεση των. Επιτρέπει τη μεταβολή των αλγορίθμων, ανεξάρτητα από τους πελάτες που τους χρησιμοποιούν. Συνώνυμα: -

10 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 10 Strategy (Στρατηγική) 2/6  Χρησιμοποιείται στις περιπτώσεις υλοποίησης ενός κοινού γενικού αλγορίθμου (π.χ. ταξινόμηση) αλλά και πολλές διαφοροποιήσεις του (π.χ. φυσαλίδας, εισαγωγής κ.τ.λ.).  Τέτοιες συμπεριφορές είναι συχνές στον αντικειμενοστρεφή προγραμματισμό και παραπέμπουν συνήθως στην κληρο- νομικότητα. Το πρότυπο Στρατηγική αντιμετωπίζει τέτοια προβλήματα στηριζόμενο όχι μόνο στην κληρονομικότητα, αλλά και στη σύνθεση αντικειμένων.  Εφαρμόζει την αρχή της Αντιστροφής των Εξαρτήσεων αναγκάζοντας τον γενικό αλγόριθμο και τις λεπτομερείς υλοποιήσεις να εξαρτώνται από αφαιρέσεις.

11 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 11 Strategy (Στρατηγική) 3/6 Χρήση:  Όταν έχουμε συσχετιζόμενες κλάσεις που διαφέρουν μόνο ως προς την συμπεριφορά.  Παρέχει σε μια κλάση τη δυνατότητα να εκτελεί μία από πολλές συμπεριφορές.  Όταν υπάρχουν πολλές παραλλαγές του ίδιου αλγορίθμου. Κάθε παραλλαγή ενσωματώνεται σε κάποια Στρατηγική.  Μία κλάση ορίζει πολλές συμπεριφορές που επιλέγονται από πολλαπλές εντολές συνθηκών τις οποίες μπορούμε να ελαχιστοποιήσουμε με ενσωμάτωση τους σε στρατηγικές.

12 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 12 Strategy (Στρατηγική) 4/6 Διαφορετικοί αλγόριθμοι υλοποιούνται σαν συγκεκριμένες υποκλάσεις της διασύνδεσης Strategy (διεπαφής ή αφηρημένης κλάσης).

13 13 Strategy (Στρατηγική) 5/6 interface FortuneCookies { public void print();} class Six implements FortuneCookies { public void print() { System.out.println("6-Exi");}} class Five implements FortuneCookies { public void print() { System.out.println("5-Pente");}} class Four implements FortuneCookies { public void print() { System.out.println("4-Tessera");}} class Three implements FortuneCookies { public void print() { System.out.println("3-Tria");}} class Two implements FortuneCookies { public void print() { System.out.println("2-Dyo");}} class One implements FortuneCookies { public void print() { System.out.println("1-Ena");}} class Null implements FortuneCookies { public void print() { System.out.println("Tipote");}} Η διεπαφή Οι κλάσεις των αλγορίθμων :

14 14 Strategy (Στρατηγική) 6/6 class Dice { public int throwIt() {return (int)(Math.random()*6)+1;}} class strategyTest { static void goodFortune() { int luckyNum = new Dice().throwIt(); FortuneCookies fc;. switch (luckyNum) { case 6: fc = new Six();break; //δημιουργία αντικ. case 5: fc = new Five();break; case 4: fc = new Four();break; case 3: fc = new Three();break; case 2: fc = new Two();break; case 1: fc = new One();break; default: fc = new Null();} fc.print();} // εκτέλεση public static void main(String[] args) { goodFortune();}}

15 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 15 Singleton (Μοναδιαίο) 1/3 Κατηγορία: Creational Σκοπός: Είναι το πρότυπο που χρησιμοποιείται όταν θέλουμε να εξασφαλίσουμε ότι μία κλάση θα έχει μόνο ένα στιγμιότυπο και ότι θα παρέχει ένα καθολικό σημείο πρόσβασης σε αυτό. Συνώνυμα: -

16 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 16 Singleton (Μοναδιαίο) 2/3  Είναι ένα πρότυπο που χρησιμοποιούμε όταν θέλουμε να δημιουργήσουμε μόνο ένα αντικείμενο σε μία κλάση.  Ο ρόλος του μοναδιαίου αντικειμένου είναι συνήθως η διαχείριση των υπολοίπων αντικειμένων της εφαρμογής.  Τα μοναδιαία αντικείμενα δημιουργούνται από μία ειδική μέθοδο που: - ελέγχει αν κάποιο αντικείμενο έχει ήδη δημιουργηθεί. Αν ναι, η μέθοδος επιστρέφει απλώς έναν δείκτη προς το υπάρχον αντικείμενο. Αν όχι, η μέθοδος δημιουργεί ένα νέο αντικείμενο και επιστρέφει δείκτη προς αυτό.  O κατασκευαστής της κλάσης δηλώνεται ως προστατευμένος (protected) ή ιδιωτικός (private) για να εξασφαλιστεί ότι θα δημιουργηθεί το αντικείμενο μόνο μέσω αυτής της μεθόδου.

17 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 17 Singleton (Μοναδιαίο) 3/3 Στην Java: public class Singleton { private static Singleton instance; // ή instance = null; /* Άρνηση πρόσβασης στον κατασκευαστή */ private Singleton() {} //δομητής – μόνο η Singleton μπορεί να τον χρησιμοποιήσει public static Singleton getInstance() { if (instance == null) instance = new Singleton(); return instance; }

18 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 18 Adapter (Προσαρμογέας) 1/9 Κατηγορία: Structural Σκοπός: Η μετατροπή της διασύνδεσης μιας κλάσης σε μία άλλη (που αναμένουν τα προγράμματα πελάτες). Επιτρέπει σε μη σχετιζόμενες κλάσεις (ασύμβατες διασυνδέσεις) να συλλειτουργήσουν σε ένα κοινό πρόγραμμα. Συνώνυμα: Wrapper (εδώ:περιτύλιγμα αντικειμένου) : προσαρμογείς αντικειμένων  Δύο κατηγορίες: προσαρμογείς αντικειμένων (object adapters) προσαρμογείς κλάσεων και προσαρμογείς κλάσεων (class adapters).

19 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 19 Adapter (Προσαρμογέας) 2/9 Δομή: προσαρμογέας κλάσης  Ο προσαρμογέας κλάσης χρησιμοποιεί την πολλαπλή κληρονομικότητα για να προσαρμόσει μια διασύνδεση σε μια άλλη προσαρμογέας αντικειμένου  Ο προσαρμογέας αντικειμένου βασίζεται στην σύνθεση αντικειμένων (composition) και διαβίβαση μηνυμάτων (delegation)

20 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 20 Adapter (Προσαρμογέας) 3/9 Target Διασύνδεση που χρησιμοποιεί ο Client. Client Χρησιμοποιεί αντικείμενα σύμφωνα με την διασύνδεση Target. Adaptee Η διασύνδεση που χρειάζεται προσαρμογή. Adapter Προσαρμόζει την διασύνδεση της Adaptee στη διασύνδεση της Target. :: Οι συμμετέχοντες...

21 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 21 Adapter (Προσαρμογέας) 4/9  Ο προσαρμογέας αντικειμένου βασίζεται στην σύνθεση αντικειμένων composition) και διαβίβαση μηνυμάτων (delegation).  Κληρονομεί την διεπαφή της Target που χρησιμοποιεί η Client και κατέχει ένα αντικείμενο της Adaptee.  Όταν η Client καλεί την μέθοδο request() με το αντικείμενο-Target, ο προσαρμογέας το ‘μεταφράζει’ - προσαρμόζει στο specificRequest() της Adaptee (…αναφορά).  Ο προσαρμογέας αντικειμένου επιτρέπει τις κλάσεις Client και Adaptee να είναι τελείως ασύνδετες. Μόνο αυτός γνωρίζει και για τις δύο. Προσαρμογεις Αντικειμένων (Object Adapters) :: Προσαρμογεις Αντικειμένων (Object Adapters)

22 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 22 Adapter (Προσαρμογέας) 5/9 class Target { public void request() {}} class Adaptee { public void specificRequest() { System.out.println("Adaptee: SpecificRequest");}} class Adapter extends Target { private Adaptee adaptee; public Adapter(Adaptee a) { adaptee = a;} public void request() { adaptee.specificRequest(); }} adaptee.specificRequest(); }} class TestAdapter { public static void main(String args[]) { Adaptee a = new Adaptee(); Target t = new Adapter(a); t.request(); }} Προσαρμογεις Αντικειμένων (Object Adapters) :: Προσαρμογεις Αντικειμένων (Object Adapters)

23 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 23 Adapter (Προσαρμογέας) 6/9  Ο προσαρμογέας κλάσης χρησιμοποιεί την πολλαπλή κληρονομικότητα για να προσαρμόσει μια διασύνδεση σε μια άλλη  Κληρονομεί τις διασυνδέσεις της Target που χρησιμοποιεί η Client και της Adaptee.  Στην Java επειδή δεν υποστηρίζεται η πολλαπλή κληρονομικότητα θα πρέπει μια από τις διασυνδέσεις να κληρονομείται από διεπαφή της Java. H target και η Adaptee θα μπορούσαν να είναι διεπαφές Java.  H request() στην Target ‘μεταφράζεται’-προσαρμόζεται στην specificRequest() που κληρονομείται από την κλάση Adaptee. Προσαρμογείς Κλάσεων (Class Adapters) :: Προσαρμογείς Κλάσεων (Class Adapters)

24 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 24 Adapter (Προσαρμογέας) 7/9 Παράδειγμα: Θα υλοποιήσουμε τους προσαρμογείς κλάσης και αντικειμένου που προσαρμόζουν την κλάση TextView ώστε να ‘ταιριάξει’ με την διασύνδεση της κλάσης Shape. Οι διαφορές στις δύο αυτές κλάσεις είναι: - Το κουτί πλαισίου (η shape το ορίζει με τις απέναντι γωνίες, ενώ η TextView με το ύψος και μήκος). - Η Shape ορίζει την μέθοδο CreateManipulator() για να χειρίζεται την κίνηση (animation), ενώ η TextView δεν έχει αντίστοιχη μέθοδο. - Η κλάση TextShape θα είναι ο προσαρμογέας μεταξύ αυτών των διαφορετικών διασυνδέσεων.

25 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 25 Adapter (Προσαρμογέας) 8/9 Υλοποίηση με Προσαρμογέα Κλάσης :: Υλοποίηση με Προσαρμογέα Κλάσης Ορίζουμε την TextShape να κληρονομεί την διασύνδεση Shape και την υλοποίηση (implementation) της TextView. Αλλαγή-υπερκάλυψη (override) της μεθόδου BoundingBox() μετατρέποντας την διασύνδεση της TextView ώστε να προσαρμοστεί στην διασύνδεση Shape. Αλλαγή-υπερκάλυψη (override) της μεθόδου IsEmpty() για να στείλουμε το μήνυμα κατευθείαν στην IsEmpty() της TextView. Ορισμός της μεθόδου CreateManipulator() από την αρχή.

26 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 26 Adapter (Προσαρμογέας) 9/9 Υλοποίηση με Προσαρμογέα Αντικειμένου :: Υλοποίηση με Προσαρμογέα Αντικειμένου Ο ορισμός της TextShape υλοποιεί ένα δείκτη για την διασύνδεση TextView. Αρχικοποιεί τον δείκτη στον δομητή. Καλεί μεθόδους με το αντικείμενο της TextView που κατέχει Ορίζει την μέθοδο CreateManipulator() από την αρχή (όπως πριν).

27 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 27 Bridge (Γέφυρα) 1/5 Κατηγορία: Structural Σκοπός: Η αποσύνδεση μιας αφαίρεσης από την υλοποίησή της, ώστε και τα δύο να μπορούν να μεταβάλλονται ανεξάρτητα. Συνώνυμα: Handle/Body

28 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 28 Bridge (Γέφυρα) 2/5  Αφαίρεση και υλοποίηση συνδέονται μόνιμα, κάνοντας δύσκολη την επέκταση, τροποποίηση και επαναχρησιμοποίηση του κώδικα.  Όμως μια αφαίρεση μπορεί να έχει πολλές υλοποιήσεις (υποκλάσεις που υλοποιούν τις μεθόδους της αφηρημένης κλάσης)  Όταν μια αφαίρεση έχει περισσότερες από μία υλοποιήσεις, τότε χρησιμοποιούμε κληρονομικότητα.  Η Γέφυρα χρησιμοποιείται εκεί που συμβαίνουν μεταβολές στην αφαίρεση αλλά και στην υλοποίηση της αφαίρεσης.

29 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 29 Bridge (Γέφυρα) 3/5 Η αφαίρεση (Abstraction) συσσωματώνει μία υλοποίηση (Implementor). H κλάση RefinedAbstraction είναι μία επέκταση της αφαίρεσης χρησιμοποιώντας επιπλέον μεθόδους για περισσότερη λειτουργικότητα. Η διεπαφή (Implementor) παρέχει μια διεπαφή για τις κλάσεις υλοποίησης (τις κλάσεις ConcreateImplementor) H κλάση RefinedAbstraction αφορά την αφαίρεση και όχι την υλοποίηση. Αυτό σημαίνει ότι λεπτομέριες της υλοποίησης ‘κρύβονται’ από τον Client.

30 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 30 Bridge (Γέφυρα) 4/5 Παράδειγμα: To ‘τηλεκοντρόλ’ της τηλεόρασης (από το βιβλίο Head First Design Patterns) Με αυτή την λύση υποστηρίζουμε μεταβολές στην υλοποίηση αλλά όχι στην αφαίρεση. Το δίλλημα: Τι θα γίνει όταν το τηλεκοντρολ αλλάξει; Λύση: Θα σχεδιάσουμε έτσι ώστε να υποστηρί- ζουμε μεταβολές τόσο στην υλοποίηση όσο και στην αφαίρεση.

31 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 31 Bridge (Γέφυρα) 5/5 Χρησιμοποιούμε τo πρότυπο Γέφυρα που επιτρέπει μεταβολές στην υλοποίηση και στην αφαίρεση τοποθετώντας και τα δύο μέρη σε διαφορετικές ιεραρχίες κλάσεων.

32 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 32 Composite (Σύνθετο) 1/5 Κατηγορία: Structural Σκοπός: Συνθέτει αντικείμενα σε δενδροειδείς (σύνθετες) δομές για την αναπαράσταση ιεραρχιών τμήματος-όλου. Το πρότυπο σχεδίασης "Σύνθετο" επιτρέπει στα προγράμματα πελάτες να διαχειρίζονται με ενιαίο τρόπο τόσο τα ανεξάρτητα αντικείμενα όσο και συνθέσεις αντικειμένων. Συνώνυμα: -

33 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 33 Composite (Σύνθετο) 2/5  Μια εφαρμογή μπορεί να περιέχει ή να περιλαμβάνει σύνθετα αντικείμενα (π.χ. Γραφικά) ή μεμονωμένα αντικείμενα (π.χ. Γραμμή).  Αν θέλαμε να προσθέσουμε στο σύστημα μια νέα σύνθετη κλάση (π.χ. Εικόνα), τότε ο κώδικας του προγράμματος πελάτη, θα πρέπει να τροποποιηθεί για να είναι δυνατός ο χειρισμός των νέων αντικειμένων τύπου Εικόνας.  Το πρότυπο Σύνθετο δίνει τη λύση. Δημιουργούμε μια κλάση που επεκτείνει την βασική κλάση αντικειμένων και χειρίζεται με τον ίδιο τρόπο τόσο τα μεμονωμένα αντικείμενα, όσο και τα σύνθετα.

34 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 34 Composite (Σύνθετο) 3/5 Κίνητρο Που ορίζονται οι μέθοδοι Add(), Remove(), getChild(); Στην Component: για διαφάνεια (ίδια λειτουργία για όλα τα αντικείμενα) Στην Composite: για ασφάλεια (κάθε κλήση από επιμέρους αντικ. θα προκαλέσει λάθος κατά την μεταγλώττιση.

35 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 35 Composite (Σύνθετο) 4/5 Component: Μια βασική κλάση αντικ. ή διεπαφή (π.χ. Γραφικά) Composite: Μια σύνθετη κλάση (π.χ. Σχεδίαση) Leaf: Ένα απλό αντικείμενο. Η composite συνήθως είναι μια σύνθετη δομή τύπου Collection.

36 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 36 Composite (Σύνθετο) 5/5 Παράδειγμα: Μενού Εστιατορίου

37 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 37 Visitor (Επισκέπτης) 1/6 Κατηγορία: Behavioral Σκοπός: Είναι το πρότυπο που επιτρέπει την εκτέλεση ξεχωριστών λειτουργιών σε αντικείμενα μιας δομής αντικειμένων. Ο Επισκέπτης επιτρέπει τον ορισμό μιας νέας λειτουργίας χωρίς να αλλάζουν οι κλάσεις των αντικειμένων στα οποία θα εφαρμοστεί αυτή η νέα λειτουργία. Συνώνυμα: -

38 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 38 Visitor (Επισκέπτης) 2/6 Πότε χρησιμοποιείται ο Visitor;  Όταν απαιτείται η προσθήκη μιας νέας μεθόδου σε μια υπάρχουσα ιεραρχία κλάσεων αλλά δεν πρέπει να τροποποιηθούν οι κλάσεις της ιεραρχίας.  Η νέα λειτουργικότητα προστίθεται εύκολα σε μια υποκλάση (Visitor) που κληρονομεί από μια αφηρημένη κλάση.  Για να υλοποιηθεί χρησιμοποιεί τη “διπλή αποστολή” μηνύματος (dual dispatch) Στη "διπλή αποστολή" η λειτουργία που εκτελείται εξαρτάται: από το όνομα της αίτησης και τον τύπο δύο αποδεκτών (στο συγκεκριμένο πρότυπο από τον τύπο του Visitor και τον τύπο του στοιχείου που επισκέπτεται).

39 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 39 Visitor (Επισκέπτης) 3/6 Element: ορίζει μια μέθοδο accept() με παράμετρο το αντικ. visitor. ConcreteElement: υλοποιεί μια μέθοδο accept() με παράμετρο το αντ. visitor. Visitor: ορίζει μια λειτουργία visit() για κάθε αντικ. ConcreteElement. Το όνομα και η υπογραφή της λειτουργίας δηλώνουν την κλάση που στέλνει την ‘πρόσκληση’. Έτσι ο visitor ενεργεί στο αντίστοιχο αντικείμενο. ConcreteVisitor: υλοποιεί κάθε λειτουργία που ορίζει ο visitor για κάθε αντικείμενο. ObjectStructure (program): - μπορεί να είναι διασύνδεση που επιτρέπει τον visitor να ‘καλέσει’ τα αντικείμενα - μπορεί να είναι μια λίστα ή ένα set

40 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 40 Visitor (Επισκέπτης) 4/6 Πως γίνεται η ‘επίσκεψη’ ; - Μέσω public μεθόδων (προσπέλαση από μια κλάση σε άλλη). - Στον visitor ‘επίσκεψη’ σε κάθε κλάση σημαίνει κλήση μιας μεθόδου της accept() που θα έχει σαν παράμετρο το αντικ. του visitor και σαν επιστροφή την κλήση της μεθόδου visit() με παράμετρο τον εαυτό του (this). Δηλαδή για κάθε αντικείμενο θα πρέπει να καλείται η μέθοδος: public void accept(Visitor v) { v.visit(this); //call visitor method } “Διπλή αποστολή” μηνύματος (dual dispatch) Η μέθοδος accept() μέσω της "διπλής αποστολής" καθοδηγεί τη ροή του ελέγχου στην κατάλληλη κλάση Visitor και στη συνέχεια στην εκτέλεση της λειτουργικότητας στην επιθυμητή αρχική κλάση.

41 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 41 Visitor (Επισκέπτης) 5/6 Παράδειγμα: Στις παρακάτω κλάσεις πως θα χειριζόμασταν μια ‘συλλογή’ από πρόσωπα (π.χ. μια εκτύπωση των ονομάτων);

42 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 42 Visitor (Επισκέπτης) 6/6 Επέκταση συμπεριφορών (εδώ εκτύπωση των διευθύνσεων των προσώπων):

43 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 43 Observer (Παρατηρητής) 1/4 Κατηγορία: Behavioral Σκοπός: Ορίζει μια σχέση εξάρτησης ένα-προς-πολλά μεταξύ αντικειμένων έτσι ώστε όταν μεταβάλλεται η κατάσταση ενός αντικειμένου, όλα τα εξαρτώμενα αντικείμενα να ενημερώνονται και να τροποποιούνται αυτόματα. Συνώνυμα: Dependents, Publish-Subscribe, Model-View

44 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 44 Observer (Παρατηρητής) 2/4  Η συνεργασία αλληλεπιδρώντων αντικειμένων επιφέρει υψηλή σύζευξη. Ο Παρατηρητής μειώνει τη σύζευξη μεταξύ των αντικειμένων.  Τα συνεργαζόμενα μέρη είναι δύο: το υποκείμενο και ο παρατηρητής (σχέση ένας-προς-πολλά).  Το υποκείμενο διατηρεί τα δεδομένα, ενώ οι λειτουργίες που αφορούν την παρατήρηση των δεδομένων κατανέμεται σε αντικείμενα - παρατηρητές.  Όταν ένα αντικείμενο αλλάζει κατάσταση, τότε ανακοινώνει προς όλους τους καταχωρημένους παρατηρητές την τρέχουσα αλλαγή.

45 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 45 Observer (Παρατηρητής) 3/4

46 Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ 46 Observer (Παρατηρητής) 4/4


Κατέβασμα ppt "Μεθοδολογίες Προγραμματισμού ΙΙ Σχεδιαστικά Πρότυπα (1) Παναγιώτης Σφέτσος, PhD"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google