Περίγραμμα Διάλεξη 9η Αντικειμενοστρεφής Σχεδιασμός Αντικειμενοστρεφής Σχεδιασμός - Ανάθεση Ευθυνών Περιπτώσεις Χρήσης (Use cases) Κάρτες CRC Παράδειγμα Εισαγωγή στη UML Chapter 12. Absolute Java. Walter Savitch. Chapter 2. Object-Orieted Desig ad Patters. Cay Horstma, Wiley, 2006. 1 2 l Α/Σ Σχεδιασμός και Ευθύνες Πως σχεδιάζουμε αντικειμενοστρεφή προγράμματα; Ο σχεδιασμός Α/ΣΠ εστιάζει στην ανεύρεση των κλάσεων ενός προβλήματος και στην ανάθεση ευθυνών στις κλάσεις και στα αντικείμενά τους. Η ανάθεση ευθυνών συνεπάγεται ανάθεση ανεξαρτησίας. Δημιουργία ανεξάρτητων υποσυστημάτων, τα οποία μπορούν εύκολα να επαναχρησιμοποιηθούν. Α/Σ Σχεδιασμός και Ευθύνες Η Α/Σ Σχεδίαση είναι παρόμοια με την οργάνωση μιας ομάδας ανθρώπων (π.χ. σε ένα σύνδεσμο, λέσχη κλπ). Βασική οργανωσιακή αρχή: για να πραγματοποιηθεί μια ενέργεια, κάποιος πρέπει να είναι υπεύθυνος γι αυτήν. Στον Α/Σ Προγραμματισμό: βρείτε πρώτα ποιά Δ/Δ είναι υπεύθυνη για κάποια ενέργειαυπολογισμό που πρέπει να πραγματοποιηθεί. 3 4 Περίγραμμα Use cases - Περιπτώσεις Χρήσης Αντικειμενοστρεφής Σχεδιασμός - Ανάθεση Ευθυνών Περιπτώσεις Χρήσης (Use cases) Κάρτες CRC Παράδειγμα Εισαγωγή στη UML Τεχνική ανάλυσης με την οποία περιγράφουμε, με τρόπο τυπικό, πώς πρέπει να λειτουργήσει ένα πρόγραμμα. Κάθε περίπτωση χρήσης εστιάζει σε ένα συγκεκριμένο σενάριο και περιγράφει τα βήματα που πρέπει να πραγματοποιηθούν για να φέρουν το σενάριο σε επιτυχημένη ολοκλήρωση. Η ολοκλήρωση του σεναρίου πρέπει να αντιστοιχεί στην επίτευξη ενός σημαντικού στόχου του χρήστη του προγράμματος Κάθε βήμα αναπαριστά μια αλληλεπίδραση του προγράμματος με ανθρώπους ή οντότητες εξωτερικές του προγραμματιστικού συστήματος 5 6
Περιπτώσεις Χρήσης Οι περιπτώσεις χρήσης είναι συλλογές από σενάρια τα οποία περιγράφουν πως λειτουργεί το σύστημα σε διάφορες περιπτώσεις. Οι περιπτώσεις χρήσης αποσκοπούν στην αποτύπωση του πώς φαίνεται το σύστημα στους χρήστες του (λειτουργικά) και πρέπει να είναι απλές. Actor Use-cases Περιπτώσεις Χρήσης Στην περίπτωση σχεδιασμού ενός φωνοκιβωτίου, στο οποίο εισάγονται τηλεφωνικά μηνύματα: Η Περίπτωση Χρήσης «Άφησε Μήνυμα» περιγράφει τα βήματα που πρέπει να ακολουθήσει ένας χρήστης ώστε να καλέσει ένα φωνοκιβώτιο και να αφήσει μήνυμα. Η Περίπτωση Χρήσης «Ανάκτησε Μηνύματα» περιγράφει τα βήματα που πρέπει να ακολουθήσει ένας χρήστης ώστε να καλέσει το φωνοκιβώτιο και να ακούσει τα μηνύματά του. Iteractios 7 8 Διαχείριση σφαλμάτων και ΠΧ Περιγραφή Περιπτώσεων Χρήσης Κατά την εκτέλεσή του, ένα σενάριο μπορεί σε κάποιο στάδιο να αποτύχει. Όνομα Περίπτωσης Χρήσης Περιγράφει με συνοπτικό τρόπο την ΠΧ Για παράδειγμα, στις Περιπτώσεις Χρήσης του φωνοκιβωτίου: η εισαγωγή ενός μηνύματος μπορεί να αποτύχει γιατί η ουρά των μηνυμάτων είναι γεμάτη η ανάγνωση των μηνυμάτων μπορεί να αποτύχει γιατί ο ιδιοκτήτης του φωνοκιβωτίου εισήγαγε λάθος κωδικό πρόσβασης Για την κάλυψη των περιπτώσεων αποτυχίας ενός σεναρίου, στην περιγραφή της Περίπτωσης Χρήσης συμπεριλαμβάνεται και η περιγραφή Αποκλίσεων (variatios) Κύρια σειρά δραστηριοτήτων που συμπεριλαμβάνονται στην ΠΧ Αποκλίσεις (όπου αυτό απαιτείται) Οι ΠΧ μπορούν να περιγραφούν με μεγαλύτερη αυστηρότητα απαρίθμηση των ΠΧ ενός προγράμματος καθορισμός των χρηστών αναφορά σε σχετικές ΠΧ κλπ 9 10 Περίπτωση Χρήσης Φωνοκιβωτίου Περίπτωση Χρήσης Φωνοκιβωτίου Άφησε Μήνυμα 1. Ο καλών, σχηματίζει τον αριθμό του τηλεφωνικού κέντρου 2. Το τηλεφωνικό κέντρο απαντά με ανακοίνωση προτροπής (prompt): Eter mailbox umber followed by #. 3. Ο καλών δίνει τον αριθμό φωνοκιβωτίου του παραλήπτη 4. Το τηλεφωνικό κέντρο απαντά με το ακόλουθο μήνυμα: You have reached mailbox xxxx. Please leave a message ow. 5. Ο καλών δίνει το μήνυμά του. 6. Ο καλών κλείνει το τηλέφωνο. 7. Το τηλεφωνικό κέντρο τοποθετεί το καταγεγραμμένο μήνυμα στο φωνοκιβώτιο του παραλήπτη. Απόκλιση 1η: 1. Στο Βήμα 3, ο καλών δίνει λάθος αριθμό φωνοκιβωτίου. 2. Το τηλεφωνικό κέντρο δίνει το ακόλουθο μήνυμα: You have typed a ivalid mailbox umber. 3. Συνέχισε με το Βήμα 2 Απόκλιση 2η: 1. Μετά το Βήμα 4, ο καλών κλείνει το τηλέφωνο αντί να μιλήσει 2. Το τηλεφωνικό κέντρο αγνοεί το άδειο μήνυμα 11 12
Ποιά είναι η βασική επιδίωξη του αντικειμενοστρεφούς σχεδιασμού; Ποιό από τα ακόλουθα ισχύει για τις περιπτώσεις χρήσης (use cases) EΠΛ133 Η σαφής και αυστηρή θεμελίωση του προς επίλυση προβλήματος Ο «καλός ορισμός» του υπολογιστικού προβλήματος μέσω αντικειμένων που αλληλεπιδρούν με ανταλλαγή μηνυμάτων Ο διαχωρισμός και η κατανομή ευθυνών σε αντικείμενα/ κλάσεις που «αναλαμβάνουν» την επίλυση του προβλήματος Ο εντοπισμός των δομών δεδομένων που θα κωδικοποιηθούν σαν αντικείμενα και κλάσεις 13 EΠΛ133 Καταγράφουν με κάθε λεπτομέρεια τις δομές δεδομένων και τους αλγορίθμους που χρησιμοποιούνται για την επίλυση ενός προβλήματος Αποτελούν διαγράμματα σεναρίων που περιγράφουν τις πιθανές χρήσεις ενός λογισμικού Κάθε Π.Χ. είναι η αποτύπωση μιας λειτουργίας του λογισμικού Κάθε Π.Χ. είναι ένα λεπτομερές σενάριο μιας «κανονικής» αλληλεπίδρασης ενός χρήστη με το λογισμικό μαζί με πιθανές αποκλίσεις από την κανονική αλληλεπίδραση 14 Περίγραμμα Κάρτες CRC (ΚEΣ: ΚΛΑΣΕΙΣ-ΕΥΘΥΝΕΣ-ΣΥΝΕΡΓΑΤΕΣ) Αντικειμενοστρεφής Σχεδιασμός - Ανάθεση Ευθυνών Περιπτώσεις Χρήσης (Use cases) Κάρτες CRC Παράδειγμα Εισαγωγή στη UML Προτάθηκε από τους Cuigham και Beck με βάση τις εμπειρίες που αποκόμισαν από την γλώσσα SMALLTALK. Στη μέθοδο των καρτών CRC προκρίνεται: Η διερεύνηση των «υπευθυνοτήτων» των κλάσεων, αποφύγοντας την περιγραφή δομών δεδομένων και αλγοριθμικών διεργασιών. Η χρήση απλών χάρτινων καρτών Class-Resposibility- Collaboratio (CRC) 10cm x 15cm αντί για διαγράμματα, μοντέλα, ή προσδιορισμό μεθόδων και διαπροσωπειών. Ο συμμετοχικός σχεδιασμός. Υπευθυνότητα είναι μια υψηλού επιπέδου περιγραφή της αποστολής μιας κλάσης. Με μια CRC κάρτα μπορούμε να απεικονίσουμε μια κλάση και τα χαρακτηριστικά της, στη φάση της σχεδίασης. 15 16 Δομή καρτών CRC CLASS NAME RESPONSIBILITIES Κατάλογος με τις ευθύνες αυτής της κλάσης COLLABORATORS Τα ονόματα των κλάσεων που θα εξυπηρετήσουν αυτή την κλάση 17 18
Περίπτωση Χρήσης Φωνοκιβωτίου (επαν.) Παράδειγμα CRC Άφησε Μήνυμα 1. Ο καλών, σχηματίζει τον αριθμό του τηλεφωνικού κέντρου 2. Το τηλεφωνικό κέντρο απαντά με ανακοίνωση προτροπής (prompt): Eter mailbox umber followed by #. 3. Ο καλών δίνει τον αριθμό φωνοκιβωτίου του παραλήπτη 4. Το τηλεφωνικό κέντρο απαντά με το ακόλουθο μήνυμα: You have reached mailbox xxxx. Please leave a message ow. 5. Ο καλών δίνει το μήνυμά του. 6. Ο καλών κλείνει το τηλέφωνο. 7. Το τηλεφωνικό κέντρο τοποθετεί το καταγεγραμμένο μήνυμα στο φωνοκιβώτιο του παραλήπτη. Mailbox maage passcode maage greetig maage ew ad saved messages MessageQueue 19 20 Παράδειγμα CRC MailSystem Παράδειγμα CRC Order maage mailboxes MessageQueue Check if items i stock Determie price Check for valid paymet Order Lie Customer Dispatch to delivery address 21 22 Αρχές Ονοματολογίας Κλάσεων Κάρτες CRC: Περιγραφή Ευθυνών Πολύ σημαντική η ονοματολογία: διευκολύνει την ανάγνωση και κατανόηση του κώδικα. Ο χώρος των υπευθυνοτήτων είναι το συµβόλαιο με το οποίο καθορίζονται τα χαρακτηριστικά και οι ευθύνες μιας κλάσης. Βασικές αρχές: χρήση ευανάγνωστων και καλόηχων ονομάτων χρήση κεφαλαίων στην αρχή καινούργιας λέξης, έστω κι αν ενώνουμε δύο ή περισσότερες λέξεις (π.χ. CardReader) προσεκτική χρήση συντομογραφιών για αποφυγή παραξηγήσεων αποφυγή χρήσης αριθμών εντός των ονομάτων κατάλληλη ονομασία λογικών μεταβλητών (π.χ. PriterIsReady - PriterStatus) Οι ευθύνες περιγράφουν το πρόβλημα που πρέπει να επιλύει η κλάση: χρησιμοποιώντας σύντομα ρήματα και μικρές εκφράσεις περιγράφοντας το τι πρέπει να γίνει και όχι το πως θα γίνει βασική επεξήγηση: ποιό θα είναι το αποτέλεσμα αν χρησιμοποιηθεί το αντικείμενο κατά τον Α ή Β τρόπο το πολύ µια κάρτα ανά κλάση 23 24
Κάρτες CRC: Περιγραφή Συνεργατών Κατάλογος των κλάσεων με τις οποίες συνεργάζεται η παρούσα κλάση, δηλ. οι κλάσεις, τις οποίες πρέπει να λαμβάνει υπόψη της: Παρέχουν υπηρεσίες στην κλάση ώστε αυτή να μπορεί να διεκπεραιώσει τις ευθύνες της Δευτερευόντως, κλάσεις που χρησιμοποιούν υπηρεσίες της παρούσας κλάσης. Η απόφαση για συμπερίληψη στον κατάλογο συνεργατών καθορίζεται από το βαθμό συνεργασίας μεταξύ δύο κλάσεων. Π.χ., η στοίβα δεν συμπεριλαμβάνει τις κλάσεις που πιθανώς να την χρησιμοποιούν (όχι όμως το αντίστροφο). Ανακαλύπτοντας τις κλάσεις Κατηγορίες Κλάσεων: Διαχειριστές πληροφοριών, δεδομένων και καταστάσεων (Data maagers, Data or state classes). Πηγές ή αποδέκτες πληροφοριών (data sources or siks). Κλάσεις απεικονίσεως ή παρουσιάσεως (view or observer classes) Data Maager Classes: Models Display Classes: Views Βοηθητικές κατηγορίες (facilitator or helper class) 25 26 Σχεδιασμός με Σενάρια Ο σχεδιασμός με κάρτες CRC δεν ακολουθεί ούτε το topdow ούτε το bottom-up μοντέλο σχεδιασμού λογισμικού. Σχεδιασμός με Σενάρια Δοκιμάζονται διαφορετικά σενάρια και δημιουργούνται νέες υπευθυνότητες. Διεργασία σχεδίασης με CRC: από το γνωστό προς το άγνωστο Ξεκινάµε από τις προφανείς κλάσεις κι αυτές που απαιτούνται για το ξεκίνηµα της εφαρµογής Συνεχίζουµε ξετυλίγοντας υποθετικά σενάρια ( what if ) Χρησιµοποιούµε τις κάρτες για να προσοµοιώσουµε την εξέλιξη του προγράµµατος Κάθε ενέργεια που αναγνωρίζεται, καταχωρείται σαν υπευθυνότητα της σχετικής κλάσης Ελέγχονται σενάρια που εμπεριέχουν καταστάσεις σφάλματος, αποκλίσεις ή έκτακτες περιστάσεις. Οι σχεδιαστές ενθαρρύνονται να εργάζονται με το συγκεκριμένο ανά χείρας πρόβλημα και να μην προσπαθούν να προβλέψουν μελλοντικές απαιτήσεις του λογισμικού, οι οποίες δεν προκύπτουν από τα εξεταζόμενα σενάρια. Συχνά, οι υπευθυνότητες αλλάζουν κλάση, καθώς εξελίσσεται η σχεδίαση και εξετάζονται διαφορετικά σενάρια. 27 28 Πλεονεκτήματα των CRC Ως τεχνική σχεδιασμού είναι: απλή φθηνή όι κάρτες αντικαθιστούνται εύκολα εύκολα μεταβάλλονται Με την χρήση και τον έλεγχο σεναρίων βεβαιωνόμαστε ότι το σχέδιο του λογισμικού περιέχει όλες τις πληροφορίες, οι οποίες είναι αναγκαίες για την εκτέλεση και την εκπλήρωση μιας εργασίας. Σχεδιασμός με CRC Η τεχνική CRC χωρίζεται σε δύο μέρη: 1. Το ερευνητικό μέρος (exploratory phase) ανακαλύπτουμε τις κλάσεις που χρειάζονται για την υλοποίηση του προβλήματος καθορίζουμε και αναθέτουμε τις υπευθυνότητες στις διάφορες κατηγορίες αναγνωρίζουμε τη συνεργασία που υπάρχει μεταξύ των διαφόρων κατηγοριών 29 30
Σχεδιασμός με CRC Βασική παρατήρηση Η μεθοδολογία δεν υποκαθιστά τη σκέψη! 2. Το αναλυτικό μέρος (aalysis phase) εκλέπτυνση του σχεδίου που προέκυψε από το ερευνητικό μέρος δημιουργία κλάσεων που περιέχουν κοινές ευθύνες (ιεραρχία) τοποθέτηση σχετικών κλάσεων μαζί 31 32 Περίγραμμα Αντικειμενοστρεφής Σχεδιασμός - Ανάθεση Ευθυνών Περιπτώσεις Χρήσης (Use cases) Κάρτες CRC Παράδειγμα Εισαγωγή στη UML To σουβλατζίδικο ως αλγοριθμικό πρόβλημα επεξεργασίας πληροφοριών 34 33 Σουβλάκι-133 Θέλουμε να κάνουμε προσομοίωση ενός σουβλατζίδικου take away για να βελτιώσουμε (βελτιστοποιήσουμε) την εξυπηρέτηση των πελατών μας EIΣΟΔΟΣ (iput) Δομές Δεδομένων ΕΞΟΔΟΣ (output) Αλγόριθμος Πρόγραμμα Ποιές είναι οι αφαιρετικές δομές για να λύσουμε το πρόβλημα; Πώς θα προσθέσουμε λίγο ρεαλισμό; 35 36
Το σουβλατζίδικο σαν υπολογιστής Σουβλάκι233 - η φουκού Υποβολή αιτημάτων προς εξυπηρέτηση Διαθέτουμε φουκού μήκους x εκατοστών Αξιοποίηση Πόρων (resources) Χρειάζεται χρόνος t για να ανάψουν τα κάρβουνα Χωρητικότητα (capacity) εξυπηρέτησης Moντελοποίηση προβλήματος - καλά ορισμένο πρόβλημα; Ουρά Λήψης Παραγγελιών Σταθµός εξυπηρέτησης 37 38 Σουβλάκι133 - τα τηγάνια Σουβλάκι233: πρώτες ύλες Διαθέτουμε Ν τηγάνια Κάθε τηγάνι: έχει χωρητικότητα c μερίδες πατάτες. χρειάζεται χρόνο t για να τηγανίσει το περιεχόμενό του Σουβλάκια: Κάθε σμίλα παίρνει χώρο χ εκατοστά Χοιρινό: ψήνεται σε χρόνο 20-25 λεπτών Κοτόπουλο: ψήνεται σε χρόνο 15-20 λεπτών Σεφταλιά: κάθε σμίλα παίρνει χώρο y εκατοστά ψήνεται σε χρόνο 25 λεπτών Πίττα: ψήνεται σε χρόνο 5 λεπτών 39 40 Σουβλάκι233: τα υλικά Άλλα (σημαντικά) θέματα Τι είναι η παραγγελία; Πώς διαχειριζόμαστε τις παραγγελίες; Με τι αλγόριθμο εκτελούμε τις παραγγελίες; Ποιός είναι ο χώρος καταστάσεων; Πώς αξιολογούμε την ικανοποίηση των πελατών μας; Πώς επιτυγχάνουμε την γραφική απεικόνιση της προσομοίωσης; 41 42
Σουβλάκι-133 Περίγραμμα Άσκηση για το σπίτι: αναλύστε το πρόβλημα και εντοπίστε τις κλάσεις/δομές δεδομένων/μεθόδους που χρειάζονται για την προσομοίωση δουλέψτε σε ομάδες των 3 ατόμων Αντικειμενοστρεφής Σχεδιασμός - Ανάθεση Ευθυνών Περιπτώσεις Χρήσης (Use cases) Κάρτες CRC Παράδειγμα Εισαγωγή στη UML 43 44 Uified Modellig Laguage - Σύντοµη Ανασκόπηση Source: Nelso Padua-Perez &William Pugh Departmet of Computer Sciece Uiversity of Marylad, College Park Uified Modellig Laguage Ένα σύνολο από διαγραμματικές συμβάσεις, οι οποίες μπορούν να χρησιμοποιηθούν για την περιγραφή σχεδίων λογισμικού. Υπάρχουν διάφοροι τύποι διαγραμμάτων UML Κάθε τύπος χρησιμοποιείται για περιγραφή διαφορετικών πραγμάτων Πχ: class diagrams, state diagrams, sequece diagrams 45 46 UML Class Diagrams Represet the (static) structure of the system Geeral I Java Name Name State Data Fields Behaviour Methods Συσχετίσεις μεταξύ κλάσεων (Relatioships Betwee Classes) Depedecy - εξάρτηση Temporary, uses a Aggregatio - συσσωμάτωση Compositio - σύνθεση Associatio - συνεταιρισμός Permaet, structural, has a Solid lie (arrowhead optioal) OR Methods Attributes (Data fields) Iheritace - κληρονομικότητα Iheritace, is a Solid lie with ope (triagular) arrowhead Implemetatio - υλοποίηση Dotted lie with ope (triagular) arrowhead 48 47
Πολλαπλότητα Συσχετίσεων (Μultiplicity of Associatios) Κάποιες σχέσεις μπορούν να ποσοτικοποιηθούν Η πολλαπλότητα υποδηλώνει με πόσα αντικείμενα μπορεί να συσχετισθεί με έγκυρο τρόπο το αντικείμενο αφετηρίας (Multiplicity deotes how may objects the source object ca legitimately referece) Σημειογραφία (Notatio) * 0, 1, or more 5 5 exactly 5..8 betwee 5 ad 8, iclusive 5..* 5 or more Συσσωμάτωση - Aggregatio Aggregatio (συσσωμάτωση): προκύπτει όταν αντικείμενα μιας κλάσης περιέχουν αντικείμενα κάποιας άλλης κλάσης για μια χρονική περίοδο Ειδική κατηγορία συσχέτισης ( has-a ) Ένα πεδίο δεδομένων μιας κλάσης μπορεί να περιγραφεί είτε με συνάθροιση είτε σαν κατηγόρημα (attribute) της κλάσης. Message Queue 1 * Message 49 50 Σύνθεση - Compositio Συνεταιρισμός - Associatio Πιό ισχυρή μορφή συσσωμάτωσης τα συσσωματούμενα αντικείμενα δεν έχουν ανεξάρτητη ύπαρξη έξω από το αντικείμενο που τα συσσωματώνει Κάνετε χρήση συσσωμάτωσης ή σύνθεσης μόνο όταν η μια κλάση διαχειρίζεται τα αντικείμενα της άλλης More geeral tha aggregatio/compositio Deotes permaet, structural relatioship State of class A cotais class B Represeted by solid lie (arrowhead optioal) Mailbox Message Queue Car ad Egie classes kow about each other 51 52 Associatio with Roles Πολλαπλότητα Συνεταιρισμών (Μultiplicity of Associatios) May-to-oe Bak has may ATMs, ATM kows oly 1 bak Course registers for has as participat Studet Oe-to-may Ivetory has may items, items kow 1 ivetory 53 54
Associatios w/ Navigatio Iformatio Associatios w/ Navigatio Iformatio Ca idicate directio of relatioship Represeted by solid lie with arrowhead Deotes has-a relatioship betwee classes Gas Pedal has a Egie Gas Pedal class kows about Egie class Egie class does t kow about Gas Pedal class State of Gas Pedal class cotais istace of Egie class ca ivoke its methods 55 56 Εξάρτηση - Depedecy Εξάρτηση - Depedecy Deotes depedece betwee classes Caused by class methods Always directed (Class A depeds o B) Method i Class A temporarily uses a object of type Class B Represeted by dotted lie with arrowhead Chage i Class B may affect class A A B A B A depeds o B A uses object of class B 57 58 Εξάρτηση - Depedecy Depedecy Example Depedece may be caused by Local variable Parameter Retur value Example Class A { Class B { B Foo(B x) { B y = ew B(); retur y; } } } Class Driver depeds o Class Car 59 60
Γενίκευση - Geeralisatio Deotes iheritace (κληρονομικότητα) betwee classes Implemetatio - υλοποίηση Deotes class implemets Java iterface Ca view as is-a relatioship Represeted by dotted lie edig i (ope) triagle Represeted by lie edig i (ope) triagle A «B» Laptop, Desktop, PDA iherit state & behavior from Computers A implemets iterface B 61 62 Στο πρόβλημα του Σουβλάκι233, ποιά Συνεταιρισμός - associatio Εξάρτηση - depedecy Σ > Φ Σύνθεση - compositio Συσσωμάτωση - aggregatio 63