Τι είναι η UML?

Η UML είναι μια γλώσσα που χρησιμοποιείται για:

  • Τον καθορισμό (specifying)
  • Την εικονική παράσταση (visualizing)
  • Την τεκμηρίωση (documenting)

των δομικών στοιχείων ενός αντικειμενοστρεφούς συστήματος.

Η UML αποτυπώνει (απεικονίζει):

  • Τη στατική δομή ενός συστήματος
  • Τη δυναμική συμπεριφορά ενός συστήματος

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

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

Οι πέντε βασικοί άξονες της UML

  1. Συστατικά (Στοιχεία) του μοντέλου
  2. Συσχετίσεις
  3. Μηχανισμοί
  4. Διαγράμματα
  5. Αρχιτεκτονικές όψεις

Στοιχεία (ή Διαγραμματικά Στοιχεία) μοντέλου σύμφωνα με τη UML

  • Κλάση (Class)
    Ενα σύνολο αντικειμένων που έχουν την ίδια δομή και συμπεριφορά
  • Περίπτωση χρήσης (use case)
    Συμπεριφορά ενός συνόλου αντικειμένων μέσω συνεργασίας
  • Κατάσταση/λειτουργία (state)
    Τρέχουσα κατάσταση αντικειμένων/δραστηριότητα, όπου ικανοποιεί κάποιες συνθήκες, αναμένει κάποιο γεγονός
  • Διαπροσωπεία (Interface)
    Ένα σύνολο από λειτουργίες που ορίζουν την εξωτερική συμπεριφορά ενός αντικειμένου
  • Συστατικό μέρος (component)
    Ενα επαναχρησιμοποιήσιμο τμήμα, με λογική και φυσική υπόσταση
  • Κόμβος (node)
    Υλικό όπου αποθηκεύεται ή/και εκτελείται το λογισμικό
  • Πακέτο (Package)
    Μια αποθήκη συστατικών γενικής χρήσης για την οργάνωση άλλων δομικών στοιχείων ή και άλλων πακέτων
  • Υποσύστημα (subsystem)
    Μια μονάδα στην ιεραρχική αποσύνδεση ενός μεγάλου συτήματος-επικοινωνεί με το περιβάλλον μέσω διαπροσωπειών
  • Σημείωση
    Σχόλιο ή επεξήγηση

Συσχετίσεις

  • Γενική συσχέτιση (association)
    Μια σημασιολογική σύνδεση μεταξύ δύο αντικειμένων
  • Γενίκευση (generalization)
    Μια σχέση μεταξύ συστατικού και υποσυστατικών τα οποία το εξειδικεύουν
  • Εξάρτηση (dependency)
    Η χρήση ενός συστατικού από ένα άλλο
  • Εκλέπτυνση-ραφινάρισμα (refinement)
    Μια διαδοχή επιπέδων αφαίρεσης

Διαγράμματα UML

  • Κλάσεων (Class)
  • Περιπτώσεων χρήσης (Use cases)
  • Κατάστασης (State)
  • Ακολουθίας (Sequence)
  • Συνεργασίας (Collaboration)
  • Δραστηριότητας (Activity)
  • Συστατικών (Component)
  • Ανάπτυξης (Deployment)

Είδη Διαγραμμάτων UML

  • Διαγράμματα Δομής Περιγράφουν την εσωτερική λογική δομή ενός συστήματος, δηλ. τα συστατικά του και τις σχέσεις μεταξύ τους
  • Δυναμικά Διαγράμματα Περιγράφουν τη δυναμική συμπεριφορά ενός συστήματος, δηλαδή την απόκρισή του σε γεγονότα του περιβάλλοντός του
  • Διαγράμματα Υλοποίησης Περιγράφουν τη φυσική δομή ενός συστήματος, δηλαδή τις μονάδες λογισμικού που το αποτελούν, σε όρους περιβάλλοντος υλοποίησης

Διαγράμματα Δομής

  • Διάγραμμα κλάσεων (Class Diagram) Δομικά στοιχεία του μοντέλου:κλάσεις και συσχετίσεις
  • Διάγραμμα αντικειμένων (Object Diagram) Δομές δεδομένων
  • Διάγραμμα πακέτων (Package diagram) Οργάνωση υψηλού επιπέδου αφαίρεσης

Δυναμικά Διαγράμματα

  • Διάγραμμα περιπτώσεων χρήσης (Use case Diagram) Λειτουργικότητα «προς τα έξω»
  • Διάγραμμα ακολουθίας (Sequence Diagram) Χρονικές ακολουθίες αλληλεπιδρώντων αντικειμέων
  • Διάγραμμα συνεργασίας (Collaboration Diagram) Αλληλεπιδράσεις μέσα σε ένα σύνολο αντικειμέων
  • Διάγραμμα καταστάσεων (State transition Diagram) Ο κύκλος ζωής ενός αντικειμένου
  • Διάγραμμα δραστηριοτήτων (Activity Diagram) Ροή ελέγχου μέσα σε ένα σύνολο λειτουργιών

Διαγράμματα Υλοποίησης

  • Διάγραμμα συστατικών (Component Diagram) Εξαρτήσεις μεταξύ μονάδων λογισμικού
  • Διάγραμμα Ανάπτυξης (Deployment Diagram) Κατανομή και αλληλεπίδραση συστατικών και αντικειμένων μεταξύ υπολογιστικών μονάδων

Επεκτείνοντας την UML

  • Στερεότυπo Ορίζει ένα νέο είδος στοιχείου μοντέλου βασισμένο σ` ένα υπάρχον στοιχείο μοντέλου. Είναι λοιπόν σαν ένα υπάρχον στοιχείο μοντέλου , με κάποια επιπλέον στοιχεία
  • Tagged values Τα στοιχεία μπορούν να έχουν ιδιότητες που περιέχουν ζευγάρια τιμών σχετικά με επιπλέον πληροφορίες
  • Περιορισμοί Θέτουν κάποια βάση που περιορίζει είτε τη χρήση του στοιχείου είτε τη σημασία του

Use-Case διαγράμματα και προδιαγραφές

Γενικά

Τα διαγράμματα περιπτώσεις χρήσης (use-case) παρουσιάζουν το σύστημα όπως αυτό φαίνεται από τη θέση ενός εξωτερικού παρατηρητή. Τα διαγράμματα αυτά απεικονίζουν γραφικά τη συμπεριφορά του συστήματος και μπορεί να καλύπτουν όλα ή τα πιο γενικά υποσυστήματα τα οποία απεικονίζονται με τα use-cases.

Στη φάση της ανάλυσης τα διαγράμματα use-case χρησιμοποιούνται για να γίνει κατανοητό πως το σύστημα θα πρέπει να δουλεύει. Στη φάση της σχεδίασης χρησιμοποιούνται για να καθορίσουν τη συμπεριφορά του συστήματος όταν αυτό υλοποιηθεί.

Ένα διάγραμμα use-case περιέχει:

  • Actors (χρήστες ή ενεργώντες) (οι αλληλεπιδρώντες με το σύστημα)
  • Use cases (περιπτώσεις χρήσης) (περιγράφουν τι κάνει το σύστημα ή ποιές είναι οι λειτουργίες του)
  • Interactions ή relationships (Αλληλεπεδράσεις ή σχέσεις ή συσχετίσεις) ανάμεσα σε Actors και Use cases

Actors (χρήστες)

Οι actors είναι οι χρήστες του συστήματος. Αυτοί που αλληλεπιδρούν με το σύστημα αλλά δεν ελέγχουν το σύστημα. Ένας Actor μπορεί να είναι ένα φυσικό πρόσωπο ή ένα άλλο σύστημα ή ένα μηχάνημα.

Παράδειγμα

Γενικά, ένας actor (χρήστης) είναι κάτι που:

  • Αλληλεπιδρά ή χρησιμοποιεί το σύστημα αλλά δεν είναι μέρος του συστήματος
  • Παρέχει δεδομένα ή λαμβάνει δεδομένα και πληροφορίες από το σύστημα
  • Βρίσκεται έξω από το σύστημα και δεν έχει κανένα έλεγχο στο σύστημα

Για να προσδιορίσουμε έναν actor ρωτάμε:

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

Use Case (περίπτωση χρήσης)

Ένα use case είναι μια σειρά από συμβάντα ή γεγονότα που εκτελούνται από το σύστημα όταν προκληθεί από έναν actor.

Ένα use case περιέχει όλα τα τα πιθανά συμβάντα και όχι μεμονωμένες περιπτώσεις.

Σε έναν απλό ορισμό, το use case περιγράφει το ειδικό τρόπο με τον οποίο ένας χρήστης χρησιμοποιεί το σύστημα.

Μπορείτε να ανακαλύψετε ένα use case εξετάζοντας τι χρειάζεται ένας χρήστης από το σύστημα και τι θα μπορεί να κάνει με το σύστημα έτσι ώστε το σύστημα να ανταποκρίνεται στις προσδοκίες του χρήστη.

Σε ένα διάγραμμα use case χρησιμοποιείτε μια συλλογή από use cases έτσι ώστε να περιγράψετε όλους τους τρόπους χρήσης.

Το όνομα ενός use case είναι περιγραφικό και αρχίζει με ένα ρήμα και τοποθετείται κάτω από το εικονίδιο.

Παράδειγμα

Γενικά, ένα use case περιγράφει:

  • Ένα πρότυπο συμπεριφοράς του συστήματος
  • Μια σειρά από αλληλεπιδράσεις ανάμεσα σε έναν actor και το σύστημα

Επίσης, ένα use case παρέχει τα μέσα για να μπορεί κάποιος να:

  • Προσδιορίζει τις προδιαγραφές και τα απαιτούμενα του συστήματος
  • Επικοινωνεί με τους τελικούς χρήστες και ειδικούς του συστήματος
  • Ελέγχει το σύστημα

Αλληλεπεδράσεις ή σχέσεις (Interactions or relationships)

Οι σχέσεις σε ένα διάγραμμα use case δείχνουν τις αλληλεπιδράσεις που συμβαίνουν ανάμεσα σε actors και use cases.
Μπορούμε να διακρίνουμε τις σχέσεις στις παρακάτω κατηγορίες:

  • Association (Συσχέτιση)
  • Dependency (Εξάρτηση)
  • Generalization (Γενίκευση)

Association (Συσχέτιση)

Αυτού του είδους οι σχέσεις είναι πολύ γενικές και κατά συνέπεια εννοιολογικά αφηρημένες.
Μια συσχέτιση μπορεί να είναι τύπου Uni-directional (που είναι ή προκαθορισμένος τύπος) και τύπου Bi-directional. Ανάλογα προς ποια κατεύθυνση κινούνται τα δεδομένα.

Παράδειγμα

Dependency (Εξάρτηση)

Αυτού του είδους οι σχέσεις δείχνουν ότι μια αλλαγή σε ένα στοιχείο (π.χ. use case) θα επηρεάσει το άλλο στοιχείο ή ότι μια λειτουργία ενός στοιχείου (π.χ. class) θα καλέσει μια λειτουργία του άλλου στοιχείου.

Στερεότυπα (Stereotypes)

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

Το στερεότυπο "include"

Προστίθεται σε μια εξάρτηση και δηλώνει ότι ένα use case περιλαμβάνεται (υποχρεωτικά) και κατ' επέκταση χρησιμοποιείται από ένα άλλο use case.

Παράδειγμα

Το στερεότυπο "extend"

Προστίθεται σε μια εξάρτηση και δηλώνει ότι η λειτουργία ενός use case εισάγεται στη λειτουργία ενός άλλου use case, δείχνοντας με αυτόν τον τρόπο την επιλεκτική ή προαιρετική ή υπό συνθήκη συμμετοχή του και χρήση του.
Χρησιμοποιείται συνήθως σε Συσχετίσεις και Εξαρτήσεις.

Παράδειγμα

Generalization (Γενίκευση)

Αυτού του είδους οι σχέσεις δείχνουν ποιο είναι το γενικό στοιχείο και ποιο το ειδικό στοιχείο. Για παράδειγμα μια κλάση και μια υποκλάση.

Μια γενίκευση ανάμεσα σε δύο στοιχεία συμβολίζεται με ένα βέλος με μύτη τριγώνου.

Γενικεύσεις μπορούμε να έχουμε και σε actors και σε use cases.

Το στερεότυπο "refine"

Δηλώνει ότι ένα use case (στόχος) είναι μια πιο ειδική και λεπτομερή (ραφιναρισμένη) περίπτωση σε σχέση με ένα use case (πηγή) που είναι μια περίπτωση γενική και αφηρημένη. Για παράδειγμα μια διεπαφή που υλοποιείται από μια υποκλάση.

Τεκμηρίωση

Κάθε διάγραμμα συνοδεύεται από σχετική τεκμηρίωση. Σ΄αυτή γίνεται σύντομη περιγραφή του συστήματος, των χρηστών, των περιπτώσεων χρήσης, των λειτουργιών αλλά και των προ-συνθηκών και μετά-συνθηκών.

Περιγραφή

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

Actors

Ενδιαφέρομενος (τουρίστας)

Τουριστικός πράκτορας (μπορεί να λειτουργήσει και ως τουρίστας)

Βασικό σενάριο

1. Ο ενδιαφερόμενος κάνει σύνδεση

2. Επιλέγει αναζήτηση για διαθεσιμότητα

3. Επιλέγει κριτήρια αναζήτησης όπως ημερομηνία κλπ.

4. Κάνει κράτηση

5. Προαιρετικά μπορεί να κάνει μια προκαταβολή.

Εναλλακτικό σενάριο

1 α. Αν δεν είναι εγγεγραμμένος μπορεί να κάνει εγγραφή.

5 α. Αν ζητήσει να κάνει προκαταβολή τότε θα μεταφερθεί στο σύστημα πληρωμών.

Προ-συνθήκες

Το σύστημα πρέπει να έχει σύνδεση με τη ΒΔ

Το σύστημα πρέπει να επικοινωνεί με το σύστημα πληρωμών

Μετά-συνθήκες

Το σύστημα επιστρέφει κωδικό στο email του χρήστη μετά την εγγραφή

Το σύστημα επιστρέφει επιβεβαίωση στο email του χρήστη μετά την κράτηση

Class Diagrams (διαγράμματα κλάσεων ή τάξεων) και προδιαγραφές

Γενικά

Ένα διάγραμμα τάξεων περιγράφει τις κλάσεις του συστήματος ως ένα στατικό μοντέλο.

Σε ένα διάγραμμα τάξεων διακρίνουμε:

  • Τάξεις (classes): Είναι οι τάξεις ή κλάσεις του συστήματος
  • Σχέσεις (relationships): Περιγράφουν τις σχέσεις ανάμεσα στις κλάσεις

Διαγραμματικά Στοιχεία

Τα βασικά διαγραμματικά στοιχεία που συναντάμε σε ένα διάγραμμα τάξεων είναι:

Τάξη (class)

Είναι ένα ορθογώνιο σχήμα που χωρίζεται σε τρία οριζόντια διαμερίσματα. Στο επάνω καταχωρείται το όνομα της τάξης. Στο μεσαίο οι ιδιότητες και στο τελευταίο οι λειτουργίες της κλάσης.

Σχέσεις (relationships)

Είναι μια γραμμή που ενώνει δύο κλάσεις. Ανάλογα το είδος της συσχέτισης μπορεί να έχει διαφορετικές μύτες (βέλη) ή να είναι διακεκομμένη.

Δευτερεύοντα διαγραμματικά στοιχεία

Ως δευτερεύοντα διαγραμματικά στοιχεία μπορούμε να έχουμε:

Ρόλος

Είναι μία ετικέτα που μπαίνει στο πέρας της γραμμής μιας σχέσης.

Πολλαπλότητα

Είναι μια ένδειξη για το πόσα αντικείμενα μπορούν να συμμετέχουν σ’ αυτή τη σχέση.

Πλοήγηση

Δείχνει ότι υπάρχει δυνατότητα πλοήγησης από την μια κατεύθυνση αλλά όχι από την άλλη. Αν για παράδειγμα μπορούμε να βρούμε σε ποια μαθήματα διδάσκει ένας καθηγητής ξεκινώντας από ένα αντικείμενο της τάξης Professor, αλλά όχι το αντίστροφο θα έχουμε δυνατότητα πλοήγησης μόνο από την τάξη Professor προς την τάξη Course. Συμβολίζεται με βέλος.

Περιγραφή τάξεων (classes)

Κάθε τάξη περιέχει Ιδιότητες (attributes) και Λειτουργίες (operations).

Οι ιδιότητες δίνουν τα χαρακτηριστικά της τάξης ενώ οι τάξεις περιγράφουν τις λειτουργίες που διαθέτουν και το αποτέλεσμα που επιστρέφουν.

Σε όρους java, η ιδιότητα αντιστοιχεί στο πεδίο (field) της τάξης και η λειτουργία στη μέθοδο (method) της τάξης. Ιδιότητες και λειτουργίες μαζί αποτελούν τα μέλη της τάξης.

Όπως αναφέρθηκε, τό όνομα της κλάσης τοποθετείται στό επάνω μέρος του ορθογωνίου με έντονα γράμματα.

Παράδειγμα

Περιγραφή ιδιοτήτων

Κάθε ιδιότητα δηλώνεται με το όνομά της και τον τύπο της. Για παράδειγμα: userid : integer

Κάθε ιδιότητα ανάλογα την προσβασιμότητά της από εξωτερικά αντικείμενα μπορεί να είναι:

  1. Ιδιωτική (private) και απεικονίζεται με το σύμβολο (-). Για παράδειγμα: - userid : integer
  2. Δημόσια (public) και απεικονίζεται με το σύμβολο (+). Για παράδειγμα: + userid : integer
  3. Προστατευόμενη (protected) και απεικονίζεται με το σύμβολο (#). Για παράδειγμα: # userid : integer
Παράδειγμα

Περιγραφή λειτουργιών

Κάθε λειτουργία δηλώνεται με το ονομά της, τις παραμέτρους (αριθμός και τύποι) που έχει και τον τύπο δεδομένων που επιστρέφει.

Επίσης κάθε λειτουργία μπορεί να έχει δηλωθεί ως private, public ή protected και χρησιμοποιούνται τα ίδια σύμβολα όπως και στις ιδιότητες.

Μία ή περισσότερες λειτουργίες μπορεί να λειτουργούν ως δημιουργοί (constructors). Στην περίπτωση αυτή θα φέρουν το όνομα της κλάσης.

Παράδειγμα

Static μέλη

Αν η ιδιότητα (ή η μέθοδος) είναι static, τότε απεικονίζεται με υπογράμμιση (π.χ.: numberOfRooms:integer).

Read only

Αν η ιδιότητα είναι read only, τότε προστίθεται το στερεότυπο {readOnly} (π.χ.: numberOfRooms:integer {readOnly}).

Σχέσεις (relationships)

Οι τύποι σχέσεων μεταξύ των τάξεων μπορεί να είναι:

Συσχετίσεις (associations)

Απλές και μόνιμες (σημασιολογικές) σχέσεις μεταξύ των τάξεων.

Για παράδειγμα μια τάξη Πελάτη (Customer) μιας τράπεζας έχει μόνιμη συσχέτιση με έναν ή περισσότερους Τραπεζικούς Λογαριασμούς (Account).

Κλασική περίπτωση όταν σε μια τρίτη κλάση δημιουργούνται ή/και χρησιμοποιούνται τα συσχετισμένα αντικείμενα.

Παράδειγμα σε κώδικα java

class Customer {
			...
		}
		class Account {
			...
		}
		class BankAccount {
			...
			Customer c = new Customer();
			Account a = new Account();
			...
		}
		

Εξαρτήσεις (dependencies)

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

Ειδικότερα, μπορούμε να πούμε ότι έχουμε εξάρτηση όταν μια μέθοδος μιας κλάσης καλεί μια μέθοδο μιας άλλης κλάσης ή όταν μια μέθοδος μια κλάσης δέχεται ως όρισμα αντικείμενο μιας άλλης κλάσης.

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

Εδώ, η κλάση Α εξαρτάται από την κλάση Β.

Επίσης, σαν ένα δεύτερο παράδειγμα, σε ένα σύστημα πληρωμών μια τάξη πληρωμής λογαριασμού (Pay) καλεί μια τάξη ελέγχου εγκυρότητας πιστωτικής κάρτας (Card).

Εδώ πάλι υπάρχει μια εξάρτηση της πρώτης κλάσης από τη δεύτερη.

Συσσωματώσεις (aggregations)

Είναι μία ειδική μορφή συσχέτισης. Είναι μία συσχέτιση που συσχετίζει το "όλον" με το "μέρος" ή "τμήμα".

Η διάκριση από τη συσχέτιση έχει περισσότερο εννοιολογικό χαρακτήρα: το "όλον" δεν μπορεί να "λειτουργήσει" χωρίς το "μέρος".

Η συσσωμάτωση συμβολίζεται με βέλος σε σχήμα ρόμβου όπως στο σχήμα.

Εδώ, η κλάση Α συσσωματώνει την κλάση Β.

Επίσης, σαν ένα δεύτερο παράδειγμα, η κλάση (Car) συσσωματώνει την κλάση (Engine).

Παράδειγμα σε κώδικα java

class A {
			List items;
			public void AddItem(B newItem) { 
				items.Add(newItem);
				...
			}
			...
		}
		class B {
			...
		}
		

Συνθέσεις (Compositions)

Είναι μία ισχυρή μορφή συσσωμάτωσης. Το "όλον" ελέγχει πλήρως τα "μέρη" του και ιδιαίτερα τον κύκλο ζωής τους. Π.χ. η διαγραφή ενός αντικειμένου "όλου" διαγράφει και τα "μέρη" του. Η πρόσβαση σε κάποιο "μέρος" γίνεται αποκλειστικά μέσα από το "όλον".

Η σύνθεση συμβολίζεται με βέλος σε σχήμα μαύρου ρόμβου όπως στο σχήμα.

Παράδειγμα σε κώδικα java

class A {
			B b = new B(); // Η A δημιουργεί αποκλειστικά αντικείμενα Β
			...
		}
		class B {
			...
		}
		

Γενικεύσεις (generalizations)

Σε αυτές τις σχέσεις μια υπο-τάξη είναι πιο ειδική από την υπερ-τάξη η οποία είναι πιο γενική.

Συμβολίζεται με βέλος σε σχήμα τριγώνου όπως στο πιο κάτω παράδειγμα.

Εδώ ή κλάση Β εξειδικεύει (extends) την πιο γενική κλάση Α.

Παράδειγμα σε κώδικα java

class A {
			...
		}
		class B extends A {
			...
		}
		

Υλοποιήσεις ή πραγματοποιήσεις (realizations)

Εδώ, μια κλάση υλοποιεί μια άλλη (interface)

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

Παράδειγμα σε κώδικα java

interface A {
			...
		}
		class B implements A {
			...
		}
		

Διεπαφή (interface)

Για τις διεπαφές ο συμβολισμός γίνεται όπως παρακάτω:

Αφηρημένη κλάση (abstract)

Επίσης για τις αφηρημένες κλάσεις ο συμβολισμός είναι παρόμοιος.

Σημείωση

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

∆ιαγράμματα ∆ραστηριότητας (Activity Diagrams)

Στη UML, τα διαγράμματα δραστηριότητας απεικονίζουν τη σειρά με την οποία εκτελείται μια σειρά εντολών ή ενεργειών και οι οποίες αφορούν μια γενικότερη δραστηριότητα.

Για παράδειγμα η δραστηριότητα “Εγγραφή” η οποία αφορά την εγγραφή ενός χρήστη σε έναν ιστότοπο, αποτελείται από μια σειρά ενεργειών όπως συμπλήρωση φόρμας, έλεγχος όνοματος χρήστη κ.λπ..

Με άλλα λόγια, περιγράφουν την εσωτερική λειτουργία μιας δραστηριότητας.

Η δραστηριότητα μπορεί να αφορά ένα αντικείμενο αλλά και περισσότερα του ενός.

Τα διαγράμματα ενεργειών χρησιμοποιούν περισσότερο τη λογική των διαγραμμάτων ροής (flow charts).

Διαγραμματικά στοιχεία

Δραστηριότητα

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

Ενέργεια

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

Το ότι χρησιμοποιείται το ίδιο σχήμα υποδηλώνει ότι η ενέργεια μπορεί να θεωρηθεί ως μια μικρή δραστηριότητα ή ως μια υπο-δραστηριότητα.

Το ίδιο ισχύει και για την δραστηριότητα. Μπορεί δηλαδή να θεωρηθεί ως μια υπερ-ενέργεια.

Μετάβαση

Απεικονίζεται με ένα βέλος και δείχνει τη χρονική σειρά των ενεργειών και πως γίνεται η μετάβαση από ενέργεια σε ενέργεια.

Σημείο έναρξης (Initial Node)

Απεικονίζεται με έναν μαύρο κύκλο και συμβολίζει το σημείο έναρξης των ενεργειών. Σε κώδικα, είναι το σημείο όπου το αντικείμενο δημιουργείται.

Σημείο λήξης (Final Node)

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

Σημείο απόφασης και σύνδεσης (Decision and Merge Nodes)

Απεικονίζεται με έναν ρόμβο και δείχνει τις επιλογές που μπορεί να υπάρχουν στη ροή μιας ενέργειας. Σε κώδικα, μπορεί να αντιστοιχεί σε μια δομή: if ... else ... .

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

Για να φανεί ότι οι επιλογές έχουν κοινή αρχή και τέλος, τοποθετούνται σε ένα ορθογώνιο με διακεκομμένο περίγραμμα και στρογγυλεμένες γωνίες όπως στο σχήμα.

Διχάλες και ενώσεις (Fork and Join Nodes)

Οι διχάλες και ενώσεις συμβολίζονται με το ίδιο σχήμα· Μία μαύρη γραμμή που μπορεί να είναι οριζόντια ή κάθετη ανάλογα με τη ροή του διαγράμματος.

Δείχνουν την αρχή και το τέλος μιας ενέργειας όταν αυτή διασπάται σε ξεχωριστά νήματα (threads). Τα νήματα, που μπορούν να θεωρηθούν ως υπό-ενέργειες, εκτελούνται παράλληλα και σύγχρονα.

Σύγχρονα σημαίνει ότι πρέπει να ολοκληρωθούν όλα τα νήματα για να περάσουμε στην επόμενη ενέργεια.

Αντικείμενα και ροή αντικειμένων (Objects and Object Flows)

Σε ένα διάγραμμα δραστηριότητας, το αντικείμενο (object) απεικονίζεται ως ορθογώνιο. Σε πολλές περιπτώσεις θέλουμε να δείξουμε ότι μια ενέργεια χρησιμοποιεί κάποιο αντικείμενο με κάποιον τρόπο.

Όταν για παράδειγμα, μια μετάβαση από μια ενέργεια καταλήγει σε ένα αντικείμενο ή όταν σε μια μετάβαση από την ενέργεια Α στην ενέργεια Β χρειάζεται και η αποστολή κάποιου αντικειμένου.

Το παραπάνω σχήμα μπορεί να απεικονιστεί και ως εξής:

Εξαιρέσεις και διαχείριση εξαιρέσεων (Exception Handlers)

Για να απεικονίσουμε μια εξαίρεση που μπορεί να προκύψει μέσα από μία ενέργεια χρησιμοποιούμε τον παρακάτω συμβολισμό.

Ενέργεια Ακύρωσης (Interruptible Activity)

Για να απεικονίσουμε μια ακύρωση που μπορεί να προκύψει μέσα από μία ενέργεια χρησιμοποιούμε τον παρακάτω συμβολισμό.

Παράδειγμα

Φόρμα εγγραφής με σημειώσεις.

Sequence diagrams (διαγράμματα ακολουθίας)

Γενικά

Τα διαγράμματα ακολουθίας (sequence diagrams) χρησιμοποιούνται για να δείξουν την επικοινωνία ανάμεσα σε αντικείμενα με χρονική σειρά (όχι χρονική διάρκεια).

Ο συμβολισμός (notation)

Το πλαίσιο (frame)

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

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

Το αντικείμενο ή στιγμιότυπο (instance)

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

instanceName : ClassName
Παράδειγμα
Freshman : Student

Μπορεί να έχουμε και ανώνυμα αντικείμενα. Σε αυτή την περίπτωση γράφουμε:

: ClassName
Παράδειγμα
: Student

Γραμμή ζωής (Lifelines)

Είναι μια κάθετη διακεκομμένη γραμμή κάτω από το ορθογώνιο του αντικειμένου. Συμβολίζει τον χρόνο αρχίζοντας από την κορυφή.

Μηνύματα (Messages)

Συμβολίζονται με ένα βέλος και τοποθετείται ανάμεσα σε δύο αντικείμενα. Η αρχή και το τέλος του βέλους δείχνουν το «Από» και το «Προς».

Επίσης, επάνω στη γραμμή του βέλους προστίθεται ετικέτα με την περιγραφή του μηνύματος.

Η περιγραφή μπορεί να έχει την μορφή όπως το παρακάτω παράδειγμα:

1: getName(id) : String

Δηλαδή, έχουμε μια αρίθμηση (1:), το όνομα του μηνύματος (getName), παράμετρες getName(id), και επιστροφή (:String).

Τα περισσότερα είναι προαιρετικά αλλά σίγουρα θα χρειαστεί το όνομα του μηνύματος (getName()).

Ένα μήνυμα μπορεί να είναι σύγχρονο ή ασύγχρονο. Το σύγχρονο μήνυμα έστω από το αντικείμενο Α στο αντικείμενο Β σημαίνει ότι το Α περιμένει μια απάντηση από το Β.

Σε διαφορετική περίπτωση θεωρείται ασύγχρονο.

Ο συμβολισμός γίνεται με διαφορετική μύτη των βελών όπως φαίνεται στο σχήμα.

Παράδειγμα

Ένα αντικείμενο μπορεί να κάνει κλήση (μήνυμα) και στον εαυτό του (π.χ. όταν καλεί μια private μέθοδο).

Παράδειγμα

Διαγράμματα καταστάσεων (state diagrams)

Μοντελοποιούν τις διαφορετικές καταστάσεις (states) που μπορεί να έχει μια κλάση και το πως γίνεται αυτή η μετάβαση (από κατάσταση σε κατάσταση).

Δηλαδή, τι προκαλεί τη μετάβαση (trigger), ποιές είναι οι προϋποθέσεις (guards) και ποιο το αποτέλεσμα (effect).

Τα τρία παραπάνω στοιχεία έχουν τη μορφή: <trigger>/[<guard>]/<effect> και αναφέρονται ως υπογραφή μετάβασης (transition signature).

Η μοντελοποίηση μπορεί να αναφέρεται και σε συστήματα και σε υποσυστήματα.

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

Τα διαγραμματικά στοιχεία είναι:

  1. Αρχή (starting point)
  2. Γραμμή μετάβασης (transition line)
  3. Κατάσταση (state)
  4. Σημείο απόφασης (decision point)
  5. Τέλος (termination point)

Προαιρετικά μπορεί να προστεθεί και η υπογραφή μετάβασης σε μια γραμμή μετάβασης.

Γενικό παράδειγμα

Δραστηριότητες κατάστασης

Όταν ένα αντικείμενο μεταβαίνει σε μια κατάσταση έστω Χ, διακρίνουμε τρείς φάσεις δρστηριοτήτων τις οποίες μπορούμε να περιγράψουμε και αυτές είναι:

  1. Εισαγωγή (entry). Δραστηριότητες που συμβαίνουν κατά την είσοδο του αντικειμένου στην κατάσταση Χ
  2. Εκτέλεση (do). Δραστηριότητες που συμβαίνουν κατά τη διάρκεια του αντικειμένου στην κατάσταση Χ
  3. Έξοδος (exit). Δραστηριότητες που συμβαίνουν κατά την έξοδο του αντικειμένου από την κατάσταση Χ
Παράδειγμα

Υπο-καταστάσεις

Σε μια κατάσταση μπορούμε να διακρίνουμε μια σειρά από υποκαταστάσεις.

Διαγραμματικά αυτό μπορεί να απεικονιστεί όπως παρακάτω.

Παράδειγμα

Διχάλες και ενώσεις (Fork and Join)

Όπως και σε άλλα διαγράμματα μπορούμε να χρησιμοποιήσουμε διχάλες και ενώσεις για να δείξουμε ότι κάποιες καταστάσεις συμβαίνουν ή "τρέχουν" ταυτόχρονα.

Παράδειγμα

Στο παραπάνω παράδειγμα οι καταστάσεις 2 και 3 πρέπει να τελειώσουν πριν πάμε στην 4.

Εναλλακτικό σημείο αρχής

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

Παράδειγμα

Στο παραπάνω παράδειγμα, προαιρετικά, μπορεί η πρώτη κατάσταση να είναι η "state 0"