Ανάλυση και σχεδίαση με UML

Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr

Εισαγωγή

Η ενοποιημένη γλώσσα σχεδιασμού (unified modeling language) (UML) είναι μια γραφική γλώσσα για την οπτική παράσταση, τη διαμόρφωση προδιαγραφών και την τεκμηρίωση συστημάτων που βασίζονται σε λογισμικό. Η UML στοχεύει στο σχεδιασμό αντικειμενοστρεφών συστημάτων. Το σχέδιο είναι μια απλοποιημένη παράσταση της πραγματικότητας.

Σχεδιάζουμε για να μπορέσουμε να καταλάβουμε το σύστημα που αναπτύσσουμε. Έτσι δημιουργώντας ένα σχέδια επιτυγχάνουμε τέσσερεις στόχους:

  1. παριστάνουμε οπτικά το σύστημα που έχουμε ή θέλουμε να κατασκευάσουμε,
  2. προσδιορίζουμε τη δομή και τη συμπεριφορά του συστήματος,
  3. δημιουργούμε ένα πρότυπο για να βασίσουμε την κατασκευή του συστήματος,
  4. τεκμηριώνουμε τις αποφάσεις που λάβαμε.

Σε όλους τους τεχνολογικούς τομείς ο σχεδιασμός βασίζεται σε τέσσερεις βασικές αρχές:

  1. η επιλογή του είδους του σχεδίου έχει επίπτωση στον τρόπο και την μορφή επίλυσης του προβλήματος,
  2. όλα τα σχέδια εκφράζονται σε διαφορετικές βαθμίδες ακρίβειας,
  3. τα καλύτερα σχέδια σχετίζονται με την πραγματικότητα,
  4. ένα είδος σχεδίων δεν είναι ποτέ αρκετό.

Η UML περιλαμβάνει τρία βασικά στοιχεία:

  1. Οντότητες
  2. Σχέσεις
  3. Διαγράμματα
Η UML είναι μια πλήρης και πλούσια γλώσσα με εξαιρετικά ευρύ πεδίο εφαρμογής. Στο μάθημα αυτό θα εξετάσουμε εξαιρετικά συνοπτικά τον τρόπο παράστασης ορισμένων αντικειμενοστρεφών δομών σε UML.

Διαγράμματα

Η UML ορίζει τα παρακάτω διαγράμματα:

Κλάσεις

Σχέσεις

Στη UML ορίζονται τέσσερεις βασικές σχέσεις:
  1. εξάρτηση (dependency)
  2. γενίκευση (generalisation)
  3. σύνδεση (association)
  4. υλοποίηση (realisation)

Εξάρτηση

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

Γενίκευση

Η γενίκευση δηλώνει μια σχέση ανάμεσα σε κάτι γενικό (τη βασική κλάση ή αλλιώς γονέα) και κάτι ειδικό (μιαν υποκλάση ή αλλιώς παιδί της). Παριστάνεται με μια συνεχή γραμμή με κλειστό βέλος που δείχνει προς τη βασική κλάση:

Σύνδεση

Η σύνδεση αναφέρεται σε αντικείμενα τα οποία συνδέονται με κάποιο τρόπο με άλλα. Όταν δύο κλάσεις είναι συνδεδεμένες μπορεί κανείς να μεταβεί από αντικείμενα της μιας σε αντικείμενα της άλλης. Η σύνδεση παριστάνεται με μια ευθεία γραμμή ανάμεσα στα δύο αντικείμενα.

Αν σε μια σχέση τα αντικείμενα απαρτίζουν τμήματα ενός όλου, τότε αυτή απεικονίζεται ως συγκρότημα (aggregation) με την παράσταση ενός διαμαντιού στην άκρη του "όλου".

Αν σχέση τα αντικείμενα που απαρτίζουν τμήματα ενός όλου έχουν την ίδια διάρκεια ζωής με το όλο, τότε αυτή απεικονίζεται ως σύνθεση (composition) με την παράσταση ενός γεμάτου διαμαντιού στην άκρη του "όλου".

Υλοποίηση

Η υλοποίηση δηλώνει πως ο εξυπηρετούμενος (αυτός που βρίσκεται στην ουρά του βέλους) υποστηρίζει τη διεπαφή (τουλάχιστον όλες τις πράξεις) που ορίζονται από τον παροχέα (αυτόν που βρίσκεται στην κεφαλή του βέλους):

Είδη εξαρτήσεων

Με τη χρήση μιας εξάρτησης εκφράζουμε σημασιολογικές (semantic) σχέσεις ανάμεσα σε στοιχεία του μοντέλου. Σε τέτοιες περιπτώσεις μια αλλαγή σε ένα στοιχείο της εξάρτησης μπορεί να έχει επίπτωση στο άλλο. Διακρίνουμε τα παρακάτω είδη εξάρτησης:
πρόσβαση (access)
'Αδεια σε κάποια στοιχεία από ένα τμήμα να έχουν πρόσβαση σε στοιχεία από άλλο τμήμα (access).
σύνδεση (binding)
Παροχή τιμών σε ένα πρότυπο για να δημιουργήσει ένα νέο στοιχείο (bind).
κλήση (call)
Μια μέθοδος καλεί μια άλλη (call).
απόρροια (derivation)
Ένα στοιχείο που μπορεί να υπολογιστεί από κάποιο άλλο (derive).
friend
Ένα στοιχείο μπορεί να έχει πρόσβαση σε στοιχεία άλλης κλάσης παρά τους όποιους περιορισμούς (friend).
εισαγωγή (import)
'Αδεια σε ένα τμήμα να εισάγει και να χρησιμοποιήσει τα στοιχεία ενός άλλου τμήματος (import).
δημιουργία (instantiation)
Μια μέθοδος μιας κλάσης δημιουργεί αντικείμενα μιας άλλης κλάσης (instantiate).
παράμετρος (parameter)
Σχέση ανάμεσα σε μια λειτουργία και τις παραμέτρους της (parameter).
δημιουργία (realization)
Σχέση ανάμεσα σε μια προδιαγραφή και την υλοποίησή της (realize).
εκλέπτυνση (refinement)
Δήλωση για την ύπαρξη απεικόνισης ανάμεσα σε δύο σημασιολογικά επίπεδα (refine).
αποστολή (send)
Σχέση ανάμεσα στον αποστολέα και τον παραλήπτη ενός μηνύματος (send).
ίχνος (trace)
Σχέση ανάμεσα σε δύο στοιχεία δύο διαφορετικών μοντέλων που δεν αποτελεί όμως απεικόνιση (trace).
χρήση (usage)
Ένα στοιχείο απαιτεί την ύπαρξη ενός άλλου στοιχείο για τη λειτουργία του (π.χ. call, instantiate, parameter, send) (use).
Στο διάγραμμα της UML γράφουμε μέσα σε εισαγωγικά το είδος της εξάρτησης (αυτό που εμφανίζεται στο τέλος κάθε ορισμού στον παραπάνω πίνακα) πάνω από την αντίστοιχη γραμμή με το βέλος:

Διαγράμματα περιπτώσεων χρήσης

Το διάγραμμα περιπτώσεων χρήσης χρησιμοποιείται για να μοντελοποιήσει το πλαίσιο λειτουργίας του συστήματος καθώς και τις προδιαγραφές του. Περιλαμβάνει:

Παράδειγμα:

Διάγραμμα κλάσεων

Το διάγραμμα των κλάσεων ενός συστήματος είναι ένα διάγραμμα δομής που περιέχει τις κλάσεις μαζί με του αντίστοιχους δεσμούς εξάρτησης, γενίκευσης και σύνδεσης. Έτσι ένα διάγραμμα κλάσεων μπορεί να απεικονίσει τη χρήση της κληρονομικότητας στο σχεδιασμό με τη χρήση δεσμών γενίκευσης όπως στο παρακάτω σχήμα:

Διάγραμμα αντικειμένων

Τα διαγράμματα αντικειμένων είναι διαγράμματα δομής που χρησιμοποιούνται για το σχεδιασμό της στατικής κατάστασης του συστήματος κατά μια συγκεκριμένη χρονική στιγμή. Κάθε αντικείμενο σχεδιάζεται ως ένα ορθογώνιο με την παρακάτω μορφή:

Το σύνολο των αντικειμένων σχεδιάζεται με βάση τους συνδέσμους που ορίζονται πάνω σε αυτό.

Διάγραμμα καταστάσεων

Το διάγραμμα καταστάσεων είναι ένα διάγραμμα συμπεριφοράς που εμφανίζει μια μηχανή καταστάσεων με έμφαση στις μεταπτώσεις μεταξύ καταστάσεων από διάφορα γεγονότα.

Παράδειγμα:

Διάγραμμα δραστηριοτήτων

Όπως και το διάγραμμα καταστάσεων έτσι και το διάγραμμα δραστηριοτήτων είναι ένα διάγραμμα συμπεριφοράς που εμφανίζει μεταπτώσεις. Η διαφορά του από το διάγραμμα καταστάσεων είναι πως οι μεταπτώσεις είναι ανάμεσα σε διαφορετικές δραστηριότητες εκφράζοντας π.χ. τη ροή εργασιών (workflow). Εκτός από τα στοιχεία του διαγράμματος καταστάσεων περιλαμβάνει συχνά ακόμα:

Παράδειγμα:

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

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

Παράδειγμα:

Διάγραμμα συνεργασίας

Το διάγραμμα συνεργασίας είναι ένα διάγραμμα αλληλεπίδρασης (συμπεριφοράς) που παρουσιάζει τον τρόπο που διαφορετικά αντικείμενα σχετίζονται και ανταλλάσσουν μηνύματα μεταξύ τους. Περιλαμβάνει:

Παράδειγμα:

Διάγραμμα εξαρτημάτων

Το διάγραμμα εξαρτημάτων είναι ένα διάγραμμα δομής υλοποίησης που χρησιμοποιείται για να μοντελοποιήσει: Περιλαμβάνει:

Παράδειγμα:

Διάγραμμα ανάπτυξης

Το διάγραμμα ανάπτυξης είναι ένα διάγραμμα δομής υλοποίησης που παρουσιάζει τον τρόπο διαμόρφωσης των υπολογιστικών κόμβων του συστήματος κατά τη λειτουργία του. Περιλαμβάνει:

Παράδειγμα:

Χρήση διαγραμμάτων

Τα διαγράμματα της UML επιτελούν διαφορετικούς ρόλους ανάλογα με το μοντέλο που μας ενδιαφέρει (Daniels 2002):

Διάγραμμα Ιδεατό μοντέλο Μοντέλο προδιαγραφών Μοντέλο υλοποίησης
Διάγραμμα περιπτώσεων χρήσης - Αλληλεπιδράσεις με το λογισμικό -
Διάγραμμα κλάσεων Μοντέλα πληροφορίας Δομές αντικειμένων Δομές αντικειμένων
Διάγραμμα ακολουθίας ή συνεργασίας - Απαιτούμενες αλληλεπιδράσεις αντικειμένων Υλοποιημένες αλληλεπιδράσεις αντικειμένων
Διάγραμμα δραστηριότητας Επιχειρηματικές διεργασίες - -
Διάγραμμα καταστάσεων Περιορισμοί αλληλουχίας γεγονότων Περιορισμοί αλληλουχίας μηνυμάτων Καθορισμός μηνυμάτων ή αποκρίσεων

Βιβλιογραφία

Ασκήσεις

  1. Σχεδιάστε σε UML ένα τουλάχιστον αντιπροσωπευτικό διάγραμμα κάθε τύπου που να αφορά το πληροφοριακό σύστημα της βιβλιοθήκης του πανεπιστημίου.
  2. Απεικονείστε σε διάγραμμα καταστάσεων τον τρόπο λειτουργίας ενός κινητού τηλεφώνου.