Διάγραμμα Κλάσεων. Class Diagram

Σχετικά έγγραφα
Σύντομο Παράδειγμα μιας συνοπτικής μεθοδολογίας ανάπτυξης

Περιγραφή Παραδείγματος. Σκοπός του Παραδείγματος. Περίπτωση Χρήσης και Σενάρια. Σύντομο Παράδειγμα μιας συνοπτικής μεθοδολογίας ανάπτυξης

Η γλώσσα μοντελοποίησης UML. Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση

(Απλή) Κληρονομικότητα

Η γλώσσα μοντελοποίησης UML. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 7

ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡ/ΣΜΟΣ C++

Ανάλυση Πληροφοριακών Συστημάτων. «Βασικές Έννοιες Αντικειμενοστρεφούς Προγραμματισμού Διαγράμματα κλάσεων» Βασίλειος Καρακόιδας

Διαγράμματα Κλάσεων στη Σχεδίαση

Από τη UML στον Κώδικα. Μέρος Α

Ανάλυση Πληροφοριακών Συστημάτων. Εαρινό Εξάμηνο Lec08 09/04/2019 Διδάσκων: Γεώργιος Χρ. Μακρής

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

Διαγράμματα UML στην Ανάλυση. Μέρος Β Διαγράμματα Κλάσεων Διαγράμματα Αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΣΥΣΧΕΤΙΣΕΙΣ ΚΛΑΣΕΩΝ (Class relationships)

Μοντελοποίηση Συστημάτων. Διαγράμματα Κλάσεων ClassDiagrams

ΠΟΛΥΜΟΡΦΙΣΜΟΣ. 4.1 Κληρονομικότητα και Αρχή της Υποκατάστασης

. Μεθοδολογία Προγραμματισμού. Abstract Κλάσεις και Interfaces. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Μοντέλα συστήματος. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 8

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων - 4 ο Εργαστήριο -

Τα διαγράµµατα κλάσεων

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

3 Αλληλεπίδραση Αντικειμένων

Θέματα εξετάσεων. Τύπος: B

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Βασικά Στοιχεία της Java

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ ΥΛΟΠΟΙΗΣΗ ΣΤΟΙΧΕΙΩΝ ΑΝΑΛΥΣΗΣ UML ΜΕ JAVA. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Από τη UML στον Κώδικα. Μέρος Β

Αντικειμενοστρεφής Προγραμματισμός

ΕΡΓΑΣΙΕΣ ΟΝΤΟΚΕΝΤΡΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Διάλεξη 11: Αντικειμενοστρεφής Σχεδιασμός ΙII

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

Βασικά Στοιχεία της Java

Μέθοδοι. Υποσυστήµατα και πακέτα. Μοντέλα αντικειµενοστραφούς σχεδίασης. Αντικειµενοστραφής Σχεδίαση. Στα πρώτα στάδια της ανάλυσης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Φροντιστήριο 3. Ημερομηνία: 22/11/2006 Θεματική Ενότητα: Δομική Μοντελοποίηση Θέμα: Διαγράμματα Κλάσεων

Οντοκεντρικός Προγραμματισμός ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

Διαγράμματα Αλληλεπίδρασης. Διαγράμματα Ακολουθίας Διαγράμματα Συνεργασίας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΟΔΗΓΙΕΣ ΓΙΑ ΧΡΗΣΗ ΤΟΥ ΕΡΓΑΛΕΙΟΥ RATIONAL ROSE

ΑΝΑΛΥΣΗ ΑΠΑΙΤΗΣΕΩΝ ανάλυση απαιτήσεων Σε αυτό το μάθημα θα ασχοληθούμε με : Δημιουργία μοντέλων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

POINTERS, AGGREGATION, COMPOSITION

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Constructors, equals, tostring Αντικείμενα ως παράμετροι

Πανεπιστήµιο Κρήτης, Τµήµα Επιστήµης Υπολογιστών Φθινόπωρο οµική Μοντελοποίηση Class Diagrams

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Η κατασκευή αντικειμένων της κλάσης Student μπορεί να πραγματοποιηθεί είτε στη main είτε σε οποιαδήποτε μέθοδο κλάσης:

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Ειδικά Θέματα Προγραμματισμού

Βασικά της γλώσσας JAVA

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Παράδειγμα χρήσης κληρονομικότητας

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 6/12/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

Κεφάλαιο 2ο. Κατανοώντας την αντικειμενοστρέφεια

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

Διδάσκων: Παναγιώτης Ανδρέου

Περιεχόμενο του μαθήματος

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

Abstract classes, Interfaces ΦΡΟΝΤΙΣΤΗΡΙΟ JAVA

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Προγραμματισμός Διαδικτύου

ΠΑΡΑΔΕΙΓΜΑΤΑ USE CASE DIAGRAMS CLASS DIAGRAMS

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Constructors

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

Αντικειµενοστραφής Προγραµµατισµός

02 Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

08 Η γλώσσα UML I. Τεχνολογία Λογισμικού. Σχολή Hλεκτρολόγων Mηχανικών & Mηχανικών Yπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο. Χειμερινό εξάμηνο

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Κλάσεις και Αντικείµενα

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ ΟΜΑΔΑ Α

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Αντικειµενοστρεφής Προγραµµατισµός

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Φροντιστήριο 5. Ημερομηνία: 01/12/2006 Θεματική Ενότητα: Μοντελοποίηση Συμπεριφοράς Θέμα: Διαγράμματα αλληλεπίδρασης και καταστάσεων

Μοντελοποίηση Πεδίου

Εισαγωγή στον Προγραµµατισµό - Εβδοµάδα 7

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors

Transcript:

Διάγραμμα Κλάσεων Class Diagram

Γενικά Ορίζει τις κλάσεις αντικειμένων σε ένα σύστημα, τις μεθόδους και τις συναρτήσεις τους, και τις συσχετίσεις μεταξύ των κλάσεων. Περιγράφουν την δομή και συμπεριφορά των ΠΧ Δίνουν ένα εννοιολογικό μοντέλο του συστήματος, με τους όρους οντοτήτων και σχέσεων Τα αναλυτικά διαγράμματα κλάσεων χρησιμοποιούνται από τους προγραμματιστές

Περιλαμβάνουν Κλάσεις Διασυνδέσεις (interfaces) Συνεργασίες Εξαρτήσεις, Γενικεύσεις, Συσχετίσεις και Σχέσεις Σημειώσεις και Περιορισμούς

Κλάση Κλάση είναι η περιγραφή ενός συνόλου αντικειμένων με κοινά χαρακτηριστικά (attributes) και συμπεριφορά (operations).

Αντικείμενο Ένα αντικείμενο αναπαριστά μία οντότητα, είτε του πραγματικού κόσμου, είτε όχι. Στη UML, το αντικείμενο αναπαριστάτε ως τετράγωνο, με το όνομα του αντικειμένου υπογραμμισμένο. Object Name

Σχέσεις μεταξύ κλάσεων Υπάρχουν δύο τύποι σχέσεων Γενίκευση Συσχέτιση Οι συσχετίσεις χωρίζονται επιπλέον σε Απλή Συσχέτιση Σύνθεση Συγκρότηση

Πολλαπλότητα Σχέσεων Η πολλαπλότητα μίας συσχέτισης καθορίζει τον αριθμό των στιγμιότυπων μιας κλάσης με τα οποία μπορεί να συσχετιστεί μια άλλη κλάση. Παραδείγματα: ένα-προς-ένα, ένα-προς-πολλά, πολλάπρος-πολλά και οποιαδήποτε άλλη αριθμητική σχέση. Symbol Meaning Multiplicity 1 One and only one 0..1 Zero or one M..N From M to N * From zero to any positive integer 0..* From zero to any positive integer 1..* From one to any positive integer

Κλάση Συσχέτισης Μία κλάση συσχέτισης είναι μια κλάση η οποία μοντελοποιεί την σχέση μεταξύ δύο άλλων κλάσεων. Βρίσκει κυρίως εφαρμογή σε σχέσεις πολλά-προς-πολλά. Οι ιδιότητες της σχέσης είναι οι ιδιότητες της κλάσης συσχέτισης

Συγκρότηση (1/2) Συγκρότηση (Aggregation): εκφράζει μια σχέση μεταξύ στιγμιότυπων κλάσεων. Είναι σχέση περιεκτικότητας. Εκφράζει μια σχέση όπου ένα αντικείμενο κλάση-container έχει την ευθύνη να διατηρήσει και να διαχειριστεί αντικείμενα κλάσης-containee τα οποία έχουν δημιουργηθεί εκτός της κλάσης Container. Τα αντικείμενα (Container και Containees) μπορούν να διαχειριστούν ανεξάρτητα. Τα αντικείμενα (Container και Containees) δεν έχουν κάποια ιδιαίτερα δικαιώματα το ένα στο άλλο.

Συγκρότηση (2/2) IS-PART-OF relationships

Σύνθεση (1/3) Σύνθεση (Composition): εκφράζει μια σχέση μεταξύ στιγμιότυπων συσχετιζόμενων κλάσεων. Είναι σχέση της μορφής: Σύνθετο Συστατικό Εκφράζει μια σχέση όπου ένα στιγμιότυπο μιας κλάσης Σύνθετο, έχει την ευθύνη να δημιουργήσει και να αρχικοποιήσει κάθε κλάση- Συστατικό που περιέχει.

Σύνθεση (2/3) Η σύνθεση χρησιμοποιείτε σε περιπτώσεις όπου το αντικείμενο κλάση-σύνθετο έχει αποκλειστική πρόσβαση και έλεγχο στο στιγμιότυπο κλάσησυστατικό. Η συμπεριφορά του συστατικού δεν ορίζετε χωρίς την ύπαρξη του σύνθετου. Η συμπεριφορά του σύνθετου είναι ελλιπής χωρίς την ύπαρξη του συστατικού.

Σύνθεση (3/3) Ισχυρή συσχέτιση Τα συστατικά δημιουργούνται και καταστρέφονται με τον ιδιοκτήτη τους

Συγκρότηση vs. Σύνθεση Η Σύνθεση αποτελεί μια ισχυρή μορφή συγκρότησης Τα συστατικά μπορούν να έχουν μόνο έναν ιδιοκτήτη Τα συστατικά δεν υπάρχουν χωρίς τον ιδιοκτήτη τους Τα συστατικά δημιουργούνται κ καταστρέφονται με τον ιδιοκτήτη τους (π.χ. Μηχανή - Αυτοκίνητο) Στη Συγκρότηση τα αντικείμενα που συμμετέχουν μπορούν να υπάρχουν και ανεξάρτητα το ένα από το άλλο. (π.χ. Μάθημα - Βιβλίο)

Γενίκευση - Κληρονομικότητα Η Γενίκευση εκφράζει μια σχέση γονιού - παιδιού μεταξύ των συνδεδεμένων κλάσεων Χρησιμοποιείτε για να υλοποιεί αφαιρέσεις και για να κληροδοτήσει ιδιότητες - συμπεριφορές

Γενίκευση - Κληρονομικότητα IS-A relationships

Παραδείγματα

Μεταφορά της UML σε Java

Μεταφορα της UML σε Java

Μεταφορα της UML σε Java

Μεταφορα της UML σε Java Θα έπρεπε να μπεί πίνακας

Μεταφορα της UML σε Java

Μεταφορα της UML σε Java

Μεταφορα της UML σε Java

C++ σε UML Class Customer { public: Customer(); Account* getaccount() {return theaccount;} void setaccount(account *value) {theaccount=value;} private: string lastname; string firstname; Account* theaccount; }

C++ σε UML class Customer { public: Customer(); Account* getaccount (int index ) {return theaccounts[index];} void setaccount(int index, Account *value){relatedaccount=v alue;} private: string lastname; string firstname; Account* theaccounts[]; }

C++ σε UML class Car { public: Car(); Engine* getengine () ; void setengine(engine *value); private: string model; int serialno; Engine* theengine; }

C++ σε UML class Car { public: Car(); Engine getengine () ; void setengine(engine value); private: string model; int serialno; Engine theengine; }

C++ σε UML class Flight { public: Flight(); bool addpassenger (Passenger p) ; bool removepassenger (Passenger p); private: int flightno; date flightdate; }

C++ σε UML class Employee { public: Employee(); void Hire() ; void Fire(); virtual double getsalary(); private: string firstname; string lastname; }

C++ σε UML class AdminEmployee: public Employee { public: AdminEmployee(); double getsalary(); private: double salary; double bonus; }

Σύντομο Παράδειγμα μιας συνοπτικής μεθοδολογίας ανάπτυξης

Περιγραφή Παραδείγματος Κράτηση δωματίου σε ξενοδοχείο Ο υπάλληλος δίνει τα στοιχεία του πελάτη το δωμάτιο (μονό, διπλό κλπ) και την περίοδο. Το σύστημα βρίσκει το δωμάτιο και κάνει κράτηση ή αποφαίνεται πως δεν υπάρχει κατάλληλο δωμάτιο για την περίοδο που προσδιορίστηκε

Σκοπός του Παραδείγματος Το παράδειγμα δεν αποσκοπεί στο να κάνουμε ένα πλήρες σύστημα κράτησης δωματίων σε ξενοδοχείο (π.χ. δεν θα ασχοληθούμε με την αποθήκευση των κρατήσεων σε Βάση Δεδομένων). Αποσκοπεί στο να καταλάβουμε: Πως μπορούμε να χρησιμοποιήσουμε τα διαγράμματα ακολουθίας για να διαπιστώσουμε ποιες είναι οι κατάλληλες κλάσεις και λειτουργίες για τον προγραμματισμό ενός σεναρίου μιας περίπτωσης χρήσης. Την ταυτόχρονη εξέλιξη ενός διαγράμματος κλάσεων προκειμένου να καλυφθούν οι απαιτήσεις μιας εφαρμογής Την ροή των μηνυμάτων μεταξύ αντικειμένων

Περίπτωση Χρήσης και Σενάρια Κρατήσεις Δωματίων Επιτυχής Κράτηση Δωματίου Υπάλληλος Ανεπιτυχής Κράτηση Δωματίου Ακύρωση Κράτησης Δωματίου

Αρχικό Διάγραμμα Κλάσεων Hotel 1..N Room 1 0..N Reservation 1 Client Το ξενοδοχείο έχει πολλά δωμάτια Κάθε δωμάτιο έχει 0 ή περισσότερες κρατήσεις Κάθε κράτηση αφορά έναν πελάτη και ένα δωμάτιο

Διάγραμμα Ακολουθίας (1) Reservation Window makereservation (period, client, roomtype,) ReservationWindow: Άλλη μία νέα κλάση. Χωρίς γραφική διασύνδεση ο χρήστης δεν μπορεί να χρησιμοποιήσει το σύστημα. Αυτές οι κλάσεις ονομάζονται «συνοριακές τάξεις» Period: Αυτό είναι μία υποψήφια νέα κλάση; -Έχει δύο ημερομηνίες (αρχής και τέλους). -Έχει την δυνατότητα να μας πει αν μία περίοδος επικαλύπτεται χρονικά από κάποια άλλη περίοδο.

Διάγραμμα Ακολουθίας (2) Reservation Window Hotel makereservation(period,client,roomtype) r:=roomsoftype(roomtype) Το ξενοδοχείο έχει δωμάτια διαφόρων τύπων (μονά, διπλά κλπ.). Η αναζήτηση θα γίνει μόνο στα δωμάτια με τύπο ίδιο με αυτόν για τον οποίο ενδιαφέρεται ο πελάτης

Διάγραμμα Ακολουθίας (3) Hotel room:room r:=roomsoftype(roomtype) * [forall room in r] free:=available(period) Για κάθε Room στο r έλεγξε αν είναι διαθέσιμο για την περίοδο για την οποία ενδιαφέρεται ο πελάτης.

Διάγραμμα Ακολουθίας (4) room:room Reservation * free:=available(period) * ovr:=overlaps(period) Για κάθε μία από τις ήδη υπάρχουσες κρατήσεις για το δωμάτιο έλεγξε αν επικαλύπτει χρονικά την περίοδο για την οποία ενδιαφέρεται ο πελάτης

Διάγραμμα Ακολουθίας (5) Reservation Period * ovr:=overlaps(period) ovr:=overlaps(period) Αυτό το period είναι η περίοδος κράτησης αυτού του Reservation Η κράτηση ελέγχει αν επικαλύπτει χρονικά την περίοδο που ενδιαφέρει τον πελάτη, με την σύγκριση με την δική της περίοδο κράτησης.

Επιτυχής Αναζήτηση Για κάποιο από τα δωμάτια η available θα επιστρέψει true για την περίοδο που ενδιαφέρει τον πελάτη. Σ αυτή τη περίπτωση δημιουργείται μία νέα κράτηση για την περίοδο που ενδιαφέρει τον πελάτη και προστίθεται στις ήδη υπάρχουσες κρατήσεις γι αυτό το δωμάτιο.

Διάγραμμα Ακολουθίας (6) Hotel room: Room r:=roomsoftype(roomtype) * free:=available(period) [free] Reservation(period, client, room) newr: Reservation addreservation(newr) newr

Διάγραμμα Ακολουθίας (7) Reservation Window Hotel makereservation (period, client, roomtype,) makereservation(period,client,roomtype) r:=roomsoftype(roomtype) newr * free:=available(period) newr

Τέλος Κράτησης Τελικά το ReservationWindow παίρνει την νέα κράτηση (newr) και εμφανίζει τις πληροφορίες της κράτησης στον υπάλληλο. Για παράδειγμα εμφανίζει ένα μήνυμα επιβεβαίωσης της κράτησης όπως το ακόλουθο:

Διάγραμμα Ακολουθίας

Εμπλουτισμός του Διαγράμματος Κλάσεων Ξεκινήσαμε με ένα αρχικό διάγραμμα κλάσεων. Τώρα θα πρέπει να προσθέσουμε σε αυτό όλες τις νέες κλάσεις που ανακαλύψαμε (π.χ. Period, ReservationWindow) καθώς και τις μεθόδους που είναι απαραίτητες για την διεκπεραίωση της κράτησης (π.χ. την available στην τάξη Room, την overlaps στην τάξη Period κλπ.)

Διάγραμμα Κλάσεων [ ]

Πρόγραμμα Java Σημείωση: Η βηματική εκτέλεση σε debugger μας επιτρέπει να δούμε την ανταλλαγή των μηνυμάτων μεταξύ των αντικειμένων ακριβώς όπως αυτά απεικονίζονται στο διάγραμμα ακολουθίας.

Η κλάση Period import java.util.date; public class Period { private Date startdate; private Date enddate; public Period(Date startdate, Date enddate) { this.startdate = startdate; this.enddate = enddate; } public Date getstartdate() { return startdate; } public Date getenddate() { return enddate; } public boolean overlaps(period p) { Date pstartd = p.getstartdate(); Date pendd = p.getenddate(); if ((pstartd.compareto(startdate)>=0 && pstartd.compareto(enddate)<=0) (pendd.compareto(startdate)>=0 && pendd.compareto(enddate)<=0)) { return true; } return false; } }

Η κλάση Room (1) import java.util.vector; import java.util.enumeration; public abstract class Room { public final static int SINGLE_ROOM = 1; public final static int DOUBLE_ROOM = 2; private Vector reservations; private String name; public Room(String name) { reservations = new Vector(); this.name = name; } public Reservation[] getreservations() { Object[] o = reservations.toarray(); Reservation[] r = new Reservation[o.length]; System.arraycopy(o, 0, r, 0, o.length); return r; }...

Η κλάση Room (2) public void addreservation(reservation r) { reservations.add(r); } public boolean available(period p) { Enumeration e = reservations.elements(); } while (e.hasmoreelements()) { Reservation r = (Reservation) e.nextelement(); if (r.overlaps(p)) { return false; } } return true; public String getname() { return name; } } abstract public int getroomtype();

Οι κλάσεις DoubleRoom και SingleRoom public class DoubleRoom extends Room { /** Creates a new instance of DoubleRoom */ public DoubleRoom(String name) { super(name); } public int getroomtype() { return Room.DOUBLE_ROOM; } } public class SingleRoom extends Room{ /** Creates a new instance of SingleRoom */ public SingleRoom(String name) { super(name); } public int getroomtype() { return Room.SINGLE_ROOM; } }

Η κλάση Client public class Client { private String name; private String telephone; /** Creates a new instance of Client */ public Client(String name, String telephone) { this.name = name; this.telephone = telephone; } public String getname() { return name; } } public String gettelephone() { return telephone; }

Η κλάση Reservation public class Reservation { private Period period; private Client client; private Room room; } public Reservation(Period period, Client client, Room room) { this.period = period; this.client = client; this.room = room; } public Client getclient() { return client; } public Period getperiod() { return period; } public Room getroom() { return room; } public boolean overlaps(period p) { return period.overlaps(p); }

Άλλες κλάσεις Υπάρχουν επίσης άλλες δύο κλάσεις: Η συνοριακή κλάση ReservationWindow που είναι το παράθυρο μέσω του οποίου γίνεται μία κράτηση Η βασική κλάση Hotel που αποτελεί και το σημείο εισόδου στο πρόγραμμα