Διαγράμματα Κλάσεων Ανάλυση Συστημάτων 2007
Μέρος Α Τα Βασικά
Εισαγωγή Διαγράμματα κλάσεων (Class diagrams) Το πιο δημοφιλές είδος διαγράμματος UML Έχουν το μεγαλύτερο πλήθος εννοιών μοντελοποίησης, οι οποίες μπορούν να κατηγοριοποιηθούν ως Βασικές έννοιες Προχωρημένες έννοιες
Γενικά Μία κλάση (class) Ένα διάγραμμα κλάσεων (class diagram) Αναπαριστά τον τύπο ενός ή περισσοτέρων αντικειμένων του συστήματος Διαθέτει σειρά από γνωρίσματα (features), που περιγράφουν τις ιδιότητες (properties) και τις λειτουργίες (operations) της Ένα διάγραμμα κλάσεων (class diagram) Περιγράφει τους τύπους των αντικειμένων στο σύστημα και τις μεταξύ τους στατικές σχέσεις Απεικονίζει τα γνωρίσματα των κλάσεων, καθώς και τους περιορισμούς που εφαρμόζονται στους τρόπους σύνδεσης των αντικειμένων του συστήματος
Ένα απλό διάγραμμα κλάσεων περιορισμός πολλαπλότητα κλάση συσχέτιση όνομα ρόλου γενίκευση χαρακτηριστικά λειτουργίες πλοηγήσιμο
Χαρακτηριστικά (Attributes) Αποτελούν έναν τρόπο αναπαράστασης των ιδιοτήτων μιας κλάσης, με τη μορφή μιας γραμμής κειμένου στο πλαίσιο της κλάσης Σύνταξη ορατότητα όνομα: τύπος πολλαπλότητα = προεπιλογή {αλφαριθμητικό ιδιοτήτων}
Επεξήγηση Στοιχείων ορατότητα όνομα τύπος πολλαπλότητα προεπιλογή Δείχνει αν το χαρακτηριστικό είναι δημόσιο (+) ή ιδιωτικό (-) όνομα Αποτελεί τον τρόπο με τον οποίο αναφέρεται η κλάση στο χαρακτηριστικό αυτό τύπος Δείχνει έναν περιορισμό στο είδος των αντικειμένων που μπορούν να αποδοθούν ως τιμή στο ιδιοχαρακτηριστικό πολλαπλότητα ... προεπιλογή Είναι η τιμή που αποδίδεται στο χαρακτηριστικό κατά τη δημιουργία ενός αντικείμενου της κλάσης, αν δεν καθορίζεται κάποια άλλη τιμή για αυτό αλφαριθμητικό ιδιοτήτων Επιτρέπει την απεικόνιση πρόσθετων ιδιοτήτων του χαρακτηριστικού
Παράδειγμα
Συσχετίσεις (Associations) Ένας άλλος συμβολισμός μιας ιδιότητας της κλάσης, υπό τη μορφή μιας συμπαγούς γραμμής μεταξύ δύο κλάσεων, με κατεύθυνση από την κλάση προέλευσης προς την κλάση προορισμού Το όνομα της ιδιότητας γράφεται στο άκρο της συσχέτισης που καταλήγει στην κλάση προορισμού, μαζί με την πολλαπλότητα, την ορατότητα και το αλφαριθμητικό ιδιοτήτων
Παράδειγμα προέλευση προορισμός
Χαρακτηριστικά vs. Συσχετίσεις Τα χαρακτηριστικά χρησιμοποιούνται συνήθως για ιδιότητες που έχουν απλό τύπο (π.χ. Date, Integer, String κτλ) Οι συσχετίσεις χρησιμοποιούνται για ιδιότητες των οποίων ο τύπος είναι μια άλλη κλάση, που αξίζει να απεικονιστεί στο διάγραμμα Το πλαίσιο χαρακτηριστικών σε μια κλάση είναι προτιμότερο να εμφανίζεται μόνο αν η κλάση είναι σημαντική, έτσι ώστε να δίνεται έμφαση
Πολλαπλότητα (Multiplicity) Δηλώνει τον αριθμό των αντικειμένων που μπορούν να τοποθετηθούν σε μια ιδιότητα Συνήθεις πολλαπλότητες 1 (π.χ. μια παραγγελία πρέπει να αφορά σε έναν ακριβώς πελάτη) 0..1 (π.χ. μια επιχείρηση-πελάτης μπορεί να έχει ή να μην έχει έναν αντιπρόσωπο πωλήσεων) * (π.χ. ένας πελάτης μπορεί να υποβάλει μηδέν ή περισσότερες παραγγελίες) Καθορίζεται με ένα κάτω και ένα άνω όριο Κάτω όριο: οποιοσδήποτε αριθμός ≥ 0 Άνω όριο: οποιοσδήποτε αριθμός ≥ 1 ή *
Ορολογία Πολλαπλοτήτων Προαιρετικό (optional) χαρακτηριστικό κάτω όριο = 0 Υποχρεωτικό (mandatory) χαρακτηριστικό κάτω όριο ≥ 1 Μονότιμο (single-valued) χαρακτηριστικό άνω όριο = 1 Χαρακτηριστικό πολλών τιμών (multi-valued) άνω όριο ≥ 1
Προγραμματιστική Ερμηνεία των Ιδιοτήτων Μια ιδιότητα μπορεί να ερμηνεύεται από τον κώδικα ως πεδίο, ιδιότητα, ή υπολογιζόμενη τιμή Αν μια ιδιότητα έχει πολλές τιμές (πολλαπλότητα ≥ 2), τότε συνήθως ερμηνεύεται ως συλλογή τιμών (πίνακας, λίστα, κτλ) Δεν υπάρχει πρακτική αντιστοιχία μεταξύ της UML και του κώδικα, αλλά υπάρχει ομοιότητα Στο πλαίσιο μιας ομάδας ανάπτυξης, οι συμβάσεις της ομάδας θα οδηγήσουν σε μια πιο ακριβή αντιστοιχία
Παράδειγμα 1 Ερμηνεία της ιδιότητας τιμή της κλάσης ΓραμμήΠαραγγελίας ως πεδίο public class OrderLine { // Γραμμή Παραγγελίας private int quantity; // ποσότητα private Money price; // τιμή private Product product; // προϊόν }
Παράδειγμα 2 Ερμηνεία της ιδιότητας τιμή της κλάσης ΓραμμήΠαραγγελίας ως υπολογιζόμενη τιμή public class OrderLine { // Γραμμή Παραγγελίας private int quantity; // ποσότητα private Order order; // παραγγελία private Product product; // προϊόν // ανάθεση ποσότητας public void setQuantity(int quantity) { this.quantity = quantity; } // λήψη τιμής public Money getPrice() { return product.getPrice().multiply(quantity);
Παράδειγμα 3 Ερμηνεία της ιδιότητας στοιχείαΓραμμών της κλάσης Παραγγελία ως συλλογή import java.util.List; public class Order { // Παραγγελία ... // γραμμές παραγγελίας private List<OrderLine> orderLines; }
Αμφίδρομες Συσχετίσεις Μια αμφίδρομη συσχέτιση (bidirectional association) είναι ένα ζεύγος ιδιοτήτων που συνδέονται μεταξύ τους με αντίστροφο τρόπο Στην UML αναπαρίσταται με μία γραμμή που έχει (προαιρετικά) βέλη πλοηγησιμότητας καί στα δύο άκρα
Παράδειγμα Η κλάση Αυτοκίνητο έχει μια ιδιότητα ιδιοκτήτης:Πρόσωπο[1] Η κλαση Πρόσωπο έχει μια ιδιότητα αυτοκίνητα:Αυτοκίνητο[*]
Λειτουργίες (Operations) Αντιπροσωπεύουν τις ενέργειες που διεκπεραιώνει μια κλάση Προγραμματιστικά, αντιστοιχούν στις μεθόδους της κλάσης Λειτουργίες που χειρίζονται ιδιότητες μιας κλάσης δεν είναι απαραίτητο να φαίνονται σε ένα διάγραμμα – η ύπαρξή τους είναι αυτονόητη
Σύνταξη Λειτουργιών ορατότητα όνομα (λίστα-παραμέτρων): επιστρεφόμενος-τύπος {αλφαριθμητικό-ιδιοτήτων} Η ορατότητα είναι συνήθως δημόσια (+) ή ιδιωτική (-) Το όνομα είναι ένα αλφαριθμητικό Η λίστα-παραμέτρων είναι η λίστα παραμέτρων της λειτουργίας Ο επιστρεφόμενος-τύπος είναι ο τύπος της τιμής που επιστρέφεται, αν υπάρχει τιμή επιστροφής Το αλφαριθμητικό-ιδιοτήτων περιέχει επιπλέον τιμές ιδιοτήτων που εφαρμόζονται για μια λειτουργία
Σύνταξη Παραμέτρων Λειτουργιών κατεύθυνση όνομα: τύπος = προεπιλεγμένη-τιμή Το όνομα, ο τύπος και η προεπιλεγμένη-τιμή χρησιμοποιούνται με τον ίδιο τρόπο, όπως και για τα χαρακτηριστικά μιας κλάσης Η κατεύθυνση παίρνει μια από τις ακόλουθες τιμές in: παράμετρος εισόδου (default αν η κατεύθυνση δεν εμφανίζεται) out: παράμετρος εξόδου inout: και τα δύο παραπάνω
Παράδειγμα
Είδη Λειτουργιών Ερώτημα (query) Παίρνει μια τιμή από την κλάση χωρίς να μεταβάλλει την παρατηρήσιμη κατάσταση του συστήματος Επισημαίνεται με το αλφαριθμητικό ιδιοτήτων {query} Τροποποιητής (modifier) ή Διαταγή (command) Μεταβάλλει την κατάσταση του συστήματος Διαχωρισμός Ερωτημάτων-Διαταγών: η δεύτερη κατηγορία λειτουργιών συνήθως δεν επιστρέφουν τιμές
Γενίκευση (Generalization) Εννοιολογική ερμηνεία Αν μια κλάση Α γενικεύει μια κλάση Β, τότε, ο,τιδήποτε ισχύει για την κλάση Β ισχύει και για την κλάση Α Προγραμματιστική ερμηνεία Η κλάση Α είναι μια δευτερεύουσα κλάση της κλάσης Β Η κλάση Α κληρονομεί όλα τα χαρακτηριστικά και τις μεθόδους της κλάσης Β
Γενίκευση και Κληρονομικότητα
Σημειώσεις Αποτελούν τον τρόπο εισαγωγής σχολίων σε ένα διάγραμμα κλάσεων Χρησιμοποιούνται γενικότερα σε όλα τα είδη διαγραμμάτων UML
Εξάρτηση (Dependency) Υφίσταται μεταξύ 2 στοιχείων όταν οι αλλαγές στον ορισμό του ενός –που ονομάζεται προέλευση (source)– ενδέχεται να προκαλέσουν αλλαγές στο άλλο –που ονομάζεται προορισμός (target) Λόγοι ύπαρξης εξαρτήσεων Μια κλάση στέλνει ένα μήνυμα σε μια άλλη Μια κλάση περιέχει μια άλλη ως τμήμα των δεδομένων της Μια κλάση αναφέρει μια άλλη ως τύπο παραμέτρου μιας λειτουργίας
Παράδειγμα εξάρτηση προέλευση προορισμός Η κλάση ΠαράθυροΕπιδομάτων –που αποτελεί τη γραφική διασύνδεση του συστήματος με το χρήστη- εξαρτάται από την κλάση Υπάλληλος, που περιέχει την ουσιαστική συμπεριφορά του συστήματος. Αν η κλάση Υπάλληλος αλλάξει τη διασύνδεσή της, ενδεχομένως η κλάση ΠαράθυροΕπιδομάτων να χρειαστεί αλλαγές. Δεν υπάρχουν απευθείας εξαρτήσεις μεταξύ της κλάσης ΠαράθυροΕπιδομάτων και των κλάσεων ΠύληΔεδομένωνΥπαλλήλου και ΠύληΔεδομένωνΕπιδομάτων.
Λέξεις-κλειδιά για Εξαρτήσεις (1/2) «call» Η προέλευση καλεί μια λειτουργία του προορισμού «create» Η προέλευση δημιουργεί μια παρουσία του προορισμού «derive» Η προέλευση συνάγεται από τον προορισμό «instantiate» Η προέλευση είναι μια παρουσία του προορισμού «permit» Ο προορισμός επιτρέπει στην προέλευση να προσπελάσει τα ιδιωτικά του γνωρίσματα
Λέξεις-κλειδιά για Εξαρτήσεις (2/2) «realize» Η προέλευση αποτελεί υλοποίηση μιας προδιαγραφής ή διασύνδεσης που ορίζεται από τον προορισμό «refine» Δείχνει μια σχέση μεταξύ διαφορετικών σημασιολογικών επιπέδων «substitute» Η προέλευση μπορεί να υποκατασταθεί από τον προορισμό «trace» Χρησιμοποιείται για την παρακολούθηση των αλλαγών στις απαιτήσεις των κλάσεων «use» Η προέλευση χρειάζεται τον προορισμό για την υλοποίηση
Πρακτικές Συμβουλές Ελαχιστοποιήστε τις εξαρτήσεις στο σύστημά σας! Μην προσπαθείτε να δείξετε σε ένα διάγραμμα κλάσεων όλες τις εξαρτήσεις που υπάρχουν: είναι μάταιος κόπος! Καθώς οι εξαρτήσεις είναι συνήθως πολλές και αλλάζουν συχνά, να δείχνετε τις εξαρτήσεις εκείνες που έχουν άμεση σχέση με το βασικό θέμα που περιγράφει το διάγραμμα κλάσεων Είναι πολύ πιο πρακτικό να απεικονίζετε τις εξαρτήσεις σε διαγράμματα πακέτων Ελαχιστοποιήστε τις εξαρτήσεις στο σύστημά σας!
Περιοριστικοί Κανόνες (Constraints) Τα διάφορα στοιχεία σε ένα διάγραμμα κλάσεων απεικονίζουν υποδηλώνουν περιορισμούς Π.χ. Μια παραγγελία μπορεί να δοθεί από έναν μόνο πελάτη (πολλαπλότητα στην αντίστοιχη συσχέτιση) Η UML επιτρέπει οποιονδήποτε άλλον τρόπο περιγραφής περιορισμών, αρκεί να εμπεριέχονται σε άγκιστρα ({ }) Οι περιορισμοί περιγράφονται συνήθως με τη χρήση φυσικής γλώσσας, ή με τον επίσημο τρόπο της UML, τη γλώσσα OCL (Object Constraint Language)