ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ 3 ο ΕΞΑΜΗΝΟ Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο - ΕΠΙΜΕΛΕΙΑ ΜΑΘΗΜΑΤΟΣ: Πρέντζα Ανδριάννα ΕΠΙΜΕΛΕΙΑ ΕΡΓΑΣΤΗΡΙΟΥ: Στουγιάννου Ελευθερία Email Επικοινωνίας: estoug@unipi.gr
Περιεχόμενο Ενότητας: Διαγράμματα Κλάσεων Κλάσεις και Αντικείμενα Διαγράμματα Κλάσεων Διαγράμματα Αντικειμένων Εύρεση Χαρακτηριστικών & Μεθόδων Κλάσεων Εύρεση Σχέσεων & Συσχετίσεων Κλάσεων Παραδείγματα Δημιουργίας Διαγραμμάτων Κλάσεων με UMLet
Παράδειγμα Διαγράμματος Κλάσεων -Σύστημα Εταιρία- (1/4) Σχεδιάστε το Διάγραμμα Κλάσεων για την παρακάτω εταιρία: Πρόκειται για μια εταιρία που έχει διάφορα τμήματα. Κάθε υπάλληλος δουλεύει σε ένα από αυτά. Ένας υπάλληλος της εταιρίας δουλεύει σε ένα ή περισσότερα projects κάποιες ώρες, τα οποία ανήκουν οικονομικά- σε ένα τμήμα και ανήκουν σε κάποια πόλη. Τα τμήματα βρίσκονται σε διαφορετικές πόλεις. Ένας υπάλληλος μπορεί να είναι διοικητικό ή τεχνικό στέλεχος.
Παράδειγμα Διαγράμματος Κλάσεων Πιθανές Κλάσεις: -- Employee -- Department -- Project -- Location -- Manager Employee (?) -- Technical Employee (?) -Σύστημα Εταιρία-(2/4)
Πώς θα αποτυπώσω στο διάγραμμα την πληροφορία: Ένας υπάλληλος της εταιρίας δουλεύει σε ένα ή περισσότερα projects κάποιες ώρες, τα οποία ανήκουν οικονομικάσε ένα τμήμα? Παράδειγμα Διαγράμματος Κλάσεων -Σύστημα Εταιρία-(3/4)
Πώς θα αποτυπώσω στο διάγραμμα την πληροφορία: Ένας υπάλληλος της εταιρίας δουλεύει σε ένα ή περισσότερα projects κάποιες ώρες, τα οποία ανήκουν οικονομικάσε ένα τμήμα? Παράδειγμα Διαγράμματος Κλάσεων -Σύστημα Εταιρία-(4/4)
-Περιγραφή: «Σύστημα Διαχείρισης Παραγγελιών Εστιατορίου»- (1/2) ΠΕΡΙΓΡΑΦΗ ΣΥΣΤΗΜΑΤΟΣ: Το λογισμικό που πρόκειται να αναπτυχθεί αφορά σε ένα σύστημα διαχείρισης παραγγελιών σε εστιατόριο. Ο σερβιτόρος, αφού λάβει την παραγγελία από τον πελάτη την εισάγει στο σύστημα. Η παραγγελία μπορεί να περιλαμβάνει πιάτα που έχει ετοιμάσει ο μάγειρας. Η παραγγελία τοποθετείται σε μια ουρά, έως ότου ετοιμαστεί από τον μάγειρα. Ο σερβιτόρος μπορεί να μάθει ανά πάσα στιγμή το χρόνο που απαιτείται μέχρι να ετοιμαστεί μια παραγγελία (δίνοντας τον αναγνωριστικό αριθμό της) βάσει της θέσης της στην ουρά.
-Περιγραφή: «Σύστημα Διαχείρισης Παραγγελιών Εστιατορίου»- (2/2) Ο μάγειρας έχει τη δυνατότητα μέσω του συστήματος να δημιουργεί πιάτα καθορίζοντας τα συστατικά που απαιτούνται και τις ποσότητές τους. Επίσης, ο μάγειρας μπορεί να δηλώνει στο σύστημα την ετοιμασία (ολοκλήρωση) κάθε πιάτου που πρέπει να σερβιριστεί. Μόλις ετοιμαστεί ένα πιάτο, αφαιρούνται οι αντίστοιχες ποσότητες από το απόθεμα κάθε συστατικού. Μόλις ο μάγειρας ετοιμάσει όλα τα πιάτα μιας παραγγελίας, η παραγγελία απομακρύνεται από την ουρά. Χάριν απλότητας, θεωρείται ότι τα συστατικά και το απόθεμά τους δεν τροποποιούνται από τους χρήστες του συστήματος. Μπορούν να τροποποιηθούν μόνο προγραμματιστικά με απευθείας επίδραση στον κώδικα. Προφανώς, σε ένα πραγματικό σύστημα θα υπήρχε λειτουργικότητα που θα επέτρεπε και την εισαγωγή/διαγραφή συστατικών, καθώς και την τροποποίηση του αποθέματος.
-Πιθανές Κλάσεις: «Σύστημα Διαχείρισης Παραγγελιών Εστιατορίου»- (1/3) Εξάγω από το κείμενο της περιγραφής τα ουσιαστικά που θα μπορούσαν να δηλωθούν ως κλάσεις: Σύστημα Διαχείρισης Παραγγελιών Εστιατόριο Σερβιτόρος Παραγγελία Πελάτης Πιάτο Μάγειρας Ουρά Χρόνος Αναγνωριστικός Αριθμός Θέση (στην ουρά) Συστατικό Απόθεμα Ποσότητα
-Πιθανές Κλάσεις: «Σύστημα Διαχείρισης Παραγγελιών Εστιατορίου»- (2/3) Από την αρχική Λίστα, θα πρέπει να αφαιρέσω τα παρακάτω: Αναφορές στο ίδιο το σύστημα λογισμικού που αναπτύσσουμε (Σύστημα διαχείρισης παραγγελιών) Αναφορές σε χειριστές του συστήματος που πρόκειται να αναπτύξουμε, καθώς βρίσκονται "έξω" από τα όρια του συστήματος (Σερβιτόρος, Μάγειρας) Αναφορές σε οντότητες που βρίσκονται εκτός του πεδίου του προβλήματος (Εστιατόριο, Πελάτης). Ουσιαστικά που πιθανόν να αποτελέσουν ιδιότητες άλλων κλάσεων (Χρόνος, Αναγνωριστικός Αριθμός, Θέση, Ποσότητα, Απόθεμα).
-Πιθανές Κλάσεις: «Σύστημα Διαχείρισης Παραγγελιών Εστιατορίου»- (3/3) Τελικά, οι πιθανές κλάσεις είναι: Παραγγελία (Order) Πιάτο (Plate) Ουρά (Queue) Συστατικό (Ingredient)
-Μοντέλο Περιπτώσεων Χρήσης: «Σύστημα Διαχείρισης Παραγγελιών Εστιατορίου» -
-Σενάρια Περιπτώσεων Χρήσης: «Σύστημα Διαχείρισης Παραγγελιών Εστιατορίου» - (1/2) Περίπτωση Χρήσης «Προσθήκη Παραγγελίας» Βασική Ροή 1. Ο Σερβιτόρος επιλέγει στην Κύρια Οθόνη το πλήκτρο "προσθήκη παραγγελίας" 2. Το σύστημα εμφανίζει την οθόνη "Προσθήκη Παραγγελίας", η οποία λαμβάνει από τον Κατάλογο Πιάτων τα υπάρχοντα Πιάτα και τα εμφανίζει 3. Το σύστημα δημιουργεί μια νέα Παραγγελία με έναν νέο αύξοντα κωδικό 4. Ο Σερβιτόρος επιλέγει κάθε Πιάτο που ζητήθηκε και πατάει το πλήκτρο "επιλογή" 5. Το σύστημα προσθέτει το επιλεγμένο Πιάτο στην Παραγγελία. Τα βήματα 4, 5 επαναλαμβάνονται για όσα πιάτα επιθυμεί να επιλέξει ο χρήστης 6. Ο Σερβιτόρος επιλέγει το πλήκτρο "ολοκλήρωση παραγγελίας" 7. Το σύστημα καταχωρεί την Παραγγελία στην Ουρά Παραγγελιών και εμφανίζει την Κύρια Οθόνη.
-Σενάρια Περιπτώσεων Χρήσης: «Σύστημα Διαχείρισης Παραγγελιών Εστιατορίου» - (2/2) Περίπτωση Χρήσης «Προσθήκη Παραγγελίας» Εναλλακτική Ροή 1 4.α.1 Ο Σερβιτόρος επιλέγει Πιάτο όπου κάποιο από τα συστατικά έχει εξαντληθεί 4.α.1.1 Το πιάτο δεν προστίθεται στην παραγγελία και εμφανίζεται μήνυμα προειδοποίησης 4.α.1.2. Η περίπτωση χρήσης συνεχίζει από το βήμα 4 της βασικής ροής Ποια τα σενάρια για τις περιπτώσεις χρήσης «Δημιουργία Πιάτου», «Ετοιμασία Παραγγελίας», «Υπολογισμός Χρόνου»?
-Διάγραμμα Κλάσεων: «Σύστημα Διαχείρισης Παραγγελιών Εστιατορίου» - (1/2)
-Διάγραμμα Κλάσεων: «Σύστημα Διαχείρισης Παραγγελιών Εστιατορίου» - (2/2) Queue +add(order) +getfirstorder() : Order +removefirstorder() +getordercodes() : ArrayList<String> +calculatetime(int) : int +findposition(int) : int +calculateplateswaiting(int) : int - code : int * Order - name : String Plate PlateCatalog +addplate(aplate : Plate) +getplates() : ArrayList<Plate> +pickplate(text : String) +getcode() : int +getnumberofplates() : int * +setplatename(text : String) +storeingredient(ingr : Ingredient, amount : int) +getname() : String +isavailable() : boolean +pick() * +add(plate) +getplatenames() : ArrayList<String> - name : String - amount : int Ingredient +getname() : String +checkquantity(int) : boolean +remove(int) * * IngredientCatalog +getingredientnames() : ArrayList<String>
-Περιγραφή: «Σύστημα Αξιολόγησης Επιστημονικών Άρθρων» - (1/3) Ένας ερευνητής θα μπορεί να υποβάλλει άρθρα προς αξιολόγηση (με στόχο τη δημοσίευσή του σε κάποιο τεύχος του επιστημονικού περιοδικού). απαιτούμενα στοιχεία για ένα άρθρο είναι τίτλος, περίληψη, στοιχεία συγγραφέων αυτού, λέξεις κλειδιά, καθώς και το πλήρες κείμενο σε μορφή text. για κάθε συγγραφέα απαιτείται το ονοματεπώνυμό του και το πανεπιστήμιο ή φορέας στον οποίο απασχολείται. Προϋπόθεση για την υποβολή ενός άρθρου είναι η δημιουργία λογαριασμού χρήστη στο σύστημα. απαιτείται το ονοματεπώνυμο του ερευνητή, το πανεπιστήμιο ή ερευνητικό ίδρυμα στο οποίο απασχολείται, το επίπεδο σπουδών και τα ερευνητικά του ενδιαφέροντα. ο νέος χρήστης επιλέγει όνομα username και password.
-Περιγραφή: «Σύστημα Αξιολόγησης Επιστημονικών Άρθρων» - (2/3) Ο ερευνητής μπορεί να βλέπει τα άρθρα που έχει υποβάλλει και εκκρεμούν προς αξιολόγηση. Επιτρέπεται η εκτέλεση διαφόρων ενεργειών σε ένα άρθρο, όπως προβολή των στοιχείων του, απόσυρσή από τη διαδικασία αξιολόγησης, αποστολή μηνυμάτων προς τον υπεύθυνο έκδοσης. Ο υπεύθυνος έκδοσης (editor) αναθέτει κάθε μη αξιολογημένο άρθρο σε 3 κριτές. επιλέγονται μεταξύ των εγγεγραμμένων ερευνητών, ένας κριτής μπορεί να αποδεχθεί ή να απορρίψει το αίτημα αξιολόγησης του editor, o editor μπορεί να τροποποιήσει την ανάθεση σε περίπτωση μη ανταπόκρισης των κριτών.
-Περιγραφή: «Σύστημα Αξιολόγησης Επιστημονικών Άρθρων» - (3/3) Ο κριτής υποβάλλει αξιολογήσεις για άρθρα που εκκρεμούν προς αξιολόγηση. η αξιολόγηση περιλαμβάνει σχόλια προς τον συγγραφέα και ένα βαθμό από 1 εως 10. Ο editor εκδίδει απόφαση βάσει των αξιολογήσεων των κριτών. η έκδοση απόφασης απαιτεί 3 ολοκληρωμένες αξιολογήσεις, ο editor μπορεί να αντικαταστήσει ένα κριτή (με διαγραφή της αξιολόγησή του) αν το κρίνει σκόπιμο, η απόφαση περιλαμβάνει την αποδοχή ή μη του άρθρου, καθώς και διορθώσεις που πρέπει να γίνουν από τον συγγραφέα πριν τη δημοσίευση.
-Μοντέλο Περιπτώσεων Χρήσης: «Σύστημα Αξιολόγησης Επιστημονικών Άρθρων» -
-Διάγραμμα Κλάσεων: «Σύστημα Αξιολόγησης Επιστημονικών Άρθρων» - (1/2) Ποιες είναι οι πιθανές κλάσεις; Πως σχετίζονται συνδέονται μεταξύ τους οι κλάσεις αυτές;
-Διάγραμμα Κλάσεων: «Σύστημα Αξιολόγησης Επιστημονικών Άρθρων» - (2/2)
Άσκηση (1/3) Μέρος του διαγράμματος κλάσεων (class diagram) συστήματος λογισμικού διαχείρισης ATM τράπεζας φαίνεται στο ακόλουθο σχήμα: Με βάση το παραπάνω σχήμα, ποιες από τις παρακάτω προτάσεις είναι ορθές;
Άσκηση (2/3) 1. Ένα αντικείμενο τής κλάσης Deposit αποστέλλει μηνύματα σε αντικείμενα της κλάσης Transaction. Λ 2. Η κλάση Deposit είναι υποκλάση της κλάσης Transaction. 3. Η κλάση Deposit συσχετίζεται με την κλάση Transaction. 4. Η κλάση Transaction είναι υποκλάση της κλάσης Deposit. 5. Για κάθε αντικείμενο της κλάσης ATM πρέπει οπωσδήποτε να υπάρχει ένα αντικείμενο της κλάσης Session. Λ 6. Κάθε αντικείμενο της κλάσης Session είναι τμήμα ενός αντικείμενου της κλάσης ATM. Λ 7. Ένα αντικείμενο της κλάσης ATM συσχετίζεται με ένα μόνο αντικείμενο της κλάσης Session. Σ Λ Λ Λ
Άσκηση (3/3) 8. Κάθε αντικείμενο της κλάσης Session πρέπει οπωσδήποτε να συσχετίζεται με ένα και μόνο ένα αντικείμενο της κλάσης ATM. Σ 9. Ένα αντικείμενο της κλάσης Session μπορεί να έχει ως τμήμα του αντικείμενα των κλάσεων Withdrawal, Deposit, Transfer και Inquiry. Σ 10. Ένα αντικείμενο της κλάσης Session έχει ως τμήμα του αποκλειστικά και μόνο αντικείμενα της κλάσης Transaction και όχι αντικείμενα των κλάσεων Withdrawal, Deposit, Transfer και Inquiry. Λ 11. Ένα ή περισσότερα αντικείμενα της κλάσης Transaction έχουν ως τμήμα τους ένα και μόνο ένα αντικείμενο της κλάσης Session. Λ 12. Αντικείμενα των κλάσεων Withdrawal, Deposit, Transfer, Inquiry έχουν ως τμήμα τους ένα αντικείμενο της κλάσης Session. Λ
Ας δούμε τώρα και έναν άλλο τρόπο απεικόνισης των κλάσεων Διαγράμματα Ευρωστίας (Robustness Diagrams)
Διαγράμματα Ευρωστίας (1/2) Διαγράμματα Κλάσεων Διαγράμματα Ευρωστίας Model-View-Controller Pattern: Κάθε οντότητα η οποία αποτελεί κλάση του συστήματος, απεικονίζεται στο διάγραμμα ευρωστίας ως: ή * Μπορούμε να χρησιμοποιήσουμε τους παραπάνω τρόπους και στα διαγράμματα ακολουθίας που θα δούμε σε επόμενο μάθημα. Τα entity, control, και boundary είναι στερεότυπα των UML κλάσεων.
Διαγράμματα Ευρωστίας (2/2) Συνοριακές κλάσεις (Boundary object): κλάσεις που αποτελούν διασύνδεση μεταξύ του συστήματος και του "εξωτερικού κόσμου", δηλαδή των χειριστών του Κλάσεις οντοτήτων (Entity object): κλάσεις του μοντέλου πεδίου προβλήματος Κλάσεις ελέγχου (Control object): κλάσεις που αποτελούν την "κόλλα" μεταξύ των συνοριακών και των κλάσεων οντοτήτων και αναπαριστούν τη συμπεριφορά του συστήματος. Τέσσερις κανόνες που εφαρμόζονται στην επικοινωνία των τριών παραπάνω objects: Actors μπορούν να επικοινωνούν μόνον με boundary objects. Τα Boundary objects μπορούν να επικοινωνούν με controllers και actors. Τα Entity objects μπορούν να επικοινωνούν με τους controllers. Οι Controllers μπορούν να επικοινωνούν με τα boundary objects και τα entity objects, και με άλλους controllers, αλλά όχι με actors.
Παράδειγμα Απεικόνισης Διαγράμματος Ευρωστίας * Δεν θα ασχοληθούμε περαιτέρω με το συγκεκριμένο τύπο διαγράμματος. ** Θα προσπαθήσουμε να εφαρμόσουμε αυτή την απεικόνιση στο τελευταίο μάθημα (στον σχεδιασμό διαγραμμάτων ακολουθίας) στην επίλυση συγκεκριμένης άσκησης.