Skip to the content.

3.3 Εισαγωγή στη UML

© Γιάννης Κωστάρας


< Δ >

Μαθησιακοί στόχοι

Σε αυτήν την ενότητα θα μάθουμε:

Αυτό το μάθημα είναι προαιρετικό.

Εισαγωγή

Η UML ή Unified Modelling Language (Ενοποιημένη Γλώσσα Μοντελοποίησης) είναι μια οπτικοποιημένη (visual) γλώσσα μοντελοποίησης η οποία σκοπό έχει τη δημιουργία, τον προσδιορισμό, την οπτικοποίηση και την τεκμηρίωση όλων των τεχνουργημάτων ενός συστήματος λογισμικού. Αναπτύχθηκε από τους Grady Booch, James Rumbaugh και Ivar Jacobson οι οποίοι ενοποίησαν τα μοντέλα τους (Booch method, Object Modeling Technique (OMT) και Object Oriented Software Engineering (OOSE) αντίστοιχα) για την παραγωγή μιας ενοποιημένης γλώσσας μοντελοποίησης. Αποτελείται από στοιχεία μοντελοποίησης, δηλ. αφαιρέσεις του συστήματος προς μοντελοποίηση. Είναι σημαντικό να σημειώσουμε ότι η UML δεν αποτελεί μια μεθοδολογία/διαδικασία ανάπτυξης λογισμικού, μπορεί όμως να χρησιμοποιηθεί από τέτοιες διαδικασίες όπως π.χ. η Rational Unified Process (RUP), Iconix, Agile κ.ά.

Εκδόσεις: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 2.0

Η έκδοση 2.0 προωθεί την Προσανατολισμένη στα Μοντέλα Αρχιτεκτονική (Model Driven Architecture - MDA), δηλ. την παραγωγή ‘εκτελέσιμων’ μοντέλων που θα μπορούν να χρησιμοποιηθούν κατάλληλα από διάφορα εργαλεία.

Η UML 2.0 αποτελείται από 13 τύπους διαγραμμάτων τα οποία κατηγοριοποιούνται σε δυο μεγάλες κατηγορίες:

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

Διαγράμματα δομής (structural diagrams) ή Στατικά διαγράμματα

Διαγράμματα συμπεριφοράς (behavioural diagrams) ή Δυναμικά διαγράμματα

Άλλη κατηγοριοποίηση είναι οι 4+1 όψεις (views) όπως φαίνεται στο ακόλουθο σχήμα:

Εικόνα 3.3.1 4+1 όψεις της UML

Λογική Όψη (Logical View) ή Όψη Σχεδίασης (Design View)

Αναπαριστά το πώς θα “χτιστεί” το σύστημα/πρόγραμμα δηλ. τις κλάσεις, διεπαφές και πρότυπα (patterns) που θα χρησιμοποιηθούν. Αποτελείται από:

Όψη Συνιστωσών (Component View) ή Όψη Υλοποίησης (Implementation View)

Δίνει έμφαση στα αρθρώματα, βιβλιοθήκες, αρχεία, πόρους και εξαρτήσεις του συστήματος. Αποτελείται από:

Όψη Εγκατάστασης (Deployment View)

Περιγράφει πώς εγκαθίσταται, διαμορφώνεται και εκτελείται ένα σύστημα. Περιγράφει το απαιτούμενο υλικό (hardware) για να εκτελεστεί και να επικοινωνήσει το σύστημα (π.χ. πλεονασμό - redundancy, τοπολογία δικτύου κλπ.). Αποτελείται από:

Όψη Διαδικασιών (Process View)

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

Όψη σεναρίων (Use Case view)

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

Παρακάτω περιγράφουμε μόνο τα διαγράμματα που θα χρειαστούμε σε αυτό το μάθημα.

1. Όψη σεναρίων (Use Case view)

Η όψη σεναρίων αποτελείται από τα (1) διαγράμματα σεναρίων (Use Case diagrams) τα οποία ανήκουν στα διαγράμματα συμπεριφοράς (behavioural). Χρησιμοποιούνται στο επίπεδο της ανάλυσης για να μετατρέψουν τις απαιτήσεις του συστήματος σε σενάρια χρήσης. Παρέχουν μια όψη του συστήματος ανεξάρτητη της υλοποίησης που δείχνει τι υποτίθεται ότι πρέπει να κάνει το σύστημα στοχεύοντας στο να κατανοήσει τις ανάγκες του χρήστη και όχι τις λεπτομέρειες της υλοποίησης.

Εικόνα 3.3.2 Συμβολολογία διαγράμματος σεναρίου

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

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

Όπως φαίνεται στην Εικόνα 3.3.2, μπορούμε να ορίσουμε διάφορες σχέσεις σε ένα διάγραμμα σεναρίων:

Στο παράδειγμα της εικόνας 3.3.3 βλέπουμε τι μπορεί ο ρόλος (actor) πελάτης (customer) (αλλά κι οι άλλοι ρόλοι: SalesPerson, Supervisor, ShippingClerk) να κάνει(-ουν) με το σύστημα. Π.χ. μπορεί να υποβάλλει μια παραγγελία (Σενάριο: Place order).

Εικόνα 3.3.3 Παράδειγμα διαγράμματος σεναρίου

Σε κάθε σενάριο επισυνάπτεται συνήθως μια λεπτομερής περιγραφή του ποια βήματα θα πρέπει ν’ ακολουθήσει ο ρόλος για να διεκπεραιώσει μ’ επιτυχία το σενάριο, λαμβάνοντας φυσικά υπόψιν και τις εξαιρέσεις (τι θα συμβεί αν κάτι πάει στραβά). Τα βήματα του σεναρίου μπορούν να περιγραφούν με διαγράμματα δραστηριότητας (activity diagrams).

2. Λογική Όψη (Logical View) ή Όψη Σχεδίασης (Design View)

Αποτελείται από τα παρακάτω στατικά διαγράμματα:

  1. Διαγράμματα κλάσεων (Class diagrams) √
  2. Διαγράμματα αντικειμένων (Object diagrams) √
  3. Διαγράμματα βιβλιοθηκών (Package diagrams) √

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

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

Μια κλάση αναπαριστά μια ομάδα ίδιων πραγμάτων που έχουν κοινή κατάσταση (state) και συμπεριφορά (behavior). Μια κλάση αναπαρίσταται στη UML ως ένα ορθογώνιο παραλληλογράμμο (βλ. Εικόνα 3.3.4) που αποτελείται από τρία μέρη: το όνομα της κλάσης, τα γνωρίσματά της και τις μεθόδους της.

Εικόνα 3.3.4 Συμβολολογία διαγράμματος κλάσεων

Εικόνα 3.3.5 Σχέσεις μεταξύ κλάσεων

Μια abstract κλάση δηλώνεται με πλάγια γράμματα. Ένα στατικό πεδίο ή μια στατική μέθοδος φαίνεται υπογραμμισμένο(-η). Μπορούμε να κατηγοριοποιήσουμε τις κλάσεις χρησιμοποιώντας στερεότυπα (stereotypes), π.χ. <<interface>>.

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

Εικόνα 3.3.6 Παράδειγμα διαγράμματος κλάσης στη UML

Τα γνωρίσματα μιας κλάσης μπορεί να είναι κάποιου από τους τύπους δεδομένων της Java (π.χ. int, String κλπ.) ή τύπος δεδομένων μιας άλλης κλάσης και στην περίπτωση αυτή λέμε ότι οι δυο αυτές κλάσεις σχετίζονται μεταξύ τους.

Στην Εικόνα 3.3.5 βλέπουμε επίσης τις διάφορες σχέσεις μεταξύ των κλάσεων:

Η σχέση της εξάρτησης (dependency) είναι η πιο αφαιρετική από τις υπόλοιπες και σημαίνει ότι στο σώμα μιας μεθόδου της κλάσης χρησιμοποιείται μια άλλη κλάση. Πρόκειται δηλ. για μια προσωρινή σχέση που συνήθως δηλώνεται ως “χρησιμοποιεί (uses a)”.

Για τις υπόλοιπες σχέσεις θα μιλήσουμε στα επόμενα μαθήματα αυτής της εβδομάδας. Η Εικόνα 3.3.6 δείχνει ένα παράδειγμα σύνθετης συσσωμάτωσης (composition) μεταξύ των δυο κλάσεων.

Επίσης μπορούμε να προσθέσουμε την πολλαπλότητα (multiplicity) σε μια σχέση που δείχνει πόσα αντικείμενα μιας κλάσης σχετίζονται με μια άλλη.

Συμβολίζεται όπως παρακάτω σε καθεμιά από τις άκρες μιας σχέσης:

Εικόνα 3.3.7 Πολλαπλότητα (multiplicity)

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

Στην Εικόνα 3.3.6 βλέπουμε ότι ένα αυτοκίνητο μπορεί να έχει μια μόνο μηχανή (αν και υπάρχουν αυτοκίνητα με 2 μηχανές, η μια από τις οποίες μπορεί να είναι ηλεκτρική). Αν η πολλαπλότητα σε μια σχέση είναι >1 τότε συνήθως αυτό σημαίνει ότι υλοποιείται μέσω μιας συλλογής ή πίνακα (π.χ. Engine[] engines = new Engine[2]).

Επίσης, στην εικόνα 3.3.6 βλέπουμε ότι η σχέση είναι κατευθυνόμενη (navigation) από την κλάση Car στην κλάση Engine (βελάκι). Αν δεν υπάρχει βέλος τότε είναι μη κατευθυνόμενη (bidirectional).

Πέρα απ’ τον τύπο δεδομένων, ένα γνώρισμα ή μια μέθοδος διαθέτει και ορατότητα (visibility). Θα εξηγήσουμε τι σημαίνουν τα (+, -) και (#) στο επόμενο μάθημα. Τέλος, μπορούμε να προσθέσουμε και περιορισμούς (constraints) με {}, π.χ. -maxSpeed : int {[0..250]}. Η UML 2.0 διαθέτει μια ειδική γλώσσα, την Object Contraint Language (OCL) για τη συγγραφή περιορισμών η οποία διαθέτει μια γραμματική η οποία μπορεί να επικυρωθεί από εργαλεία μοντελοποίησης.

Τέλος, στην Εικόνα 3.3.6 βλέπουμε και το σύμβολο του σχολίου/σημειώματος (note) που μπορεί να χρησιμοποιηθεί σ’ όλα τα διαγράμματα.

Διαγράμματα αντικειμένων (Object diagrams)

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

Εικόνα 3.3.8 Παράδειγμα διαγράμματος αντικειμένων

Διαγράμματα βιβλιοθηκών (Package diagrams)

Χρησιμοποιούνται για να ομαδοποιούμε κλάσεις σε πακέτα ή βιβλιοθήκες. Αντιστοιχούν στις βιβλιοθήκες (packages) της γλώσσας.

Εικόνα 3.3.9 Παράδειγμα διαγράμματος βιβλιοθηκών

Μια βιβλιοθήκη (package) είναι ένας υποδοχέας (container) στοιχείων μοντελοποίησης, ένας μηχανισμός γενικού σκοπού οργάνωσης στοιχείων σε ομάδες. Τα διαγράμματα βιβλιοθηκών μπορούν να χρησιμοποιηθούν σε κάθε βήμα της UML. Μια βιβλιοθήκη μπορεί να είναι υποδοχέας σεναρίων, κλάσεων, συνιστωσών κλπ.

3. Όψη Συνιστωσών/Εξαρτημάτων (Component View)

Αποτελείται από τα παρακάτω διαγράμματα δομής:

  1. Διαγράμματα συνιστωσών/εξαρτημάτων (Component diagrams)
  2. Διαγράμματα σύνθετης δομής (Composite Structure diagrams)

4. Όψη Εγκατάστασης (Deployment View)

Αποτελείται από το παρακάτω στατικό διάγραμμα:

  1. Διαγράμματα εγκατάστασης (Deployment diagrams)

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

5. Όψη Διαδικασιών (Process View)

Η όψη διαδικασιών αποτελείται από τα παρακάτω δυναμικά διαγράμματα:

  1. Διαγράμματα ακολουθίας/αλληλουχίας (Sequence diagrams)
  2. Διαγράμματα επικοινωνίας (Communication diagrams)
  3. Διαγράμματα μετάβασης κατάστασης (State Machine diagrams)
  4. Διαγράμματα δραστηριότητας (Activity diagrams)
  5. Διαγράμματα αλληλεπίδρασης (Interaction Overview diagrams)
  6. Διαγράμματα χρονισμού (Timing diagrams)

Εργαλεία

Εμείς θα επικεντρωθούμε στο BlueJ για να μάθουμε τη UML. Παρόλ’ αυτά παρακάτω παρουσιάζουμε μια λίστα από τι κυκλοφορεί στην αγορά.

Δωρεάν:

Online:

Εμπορικά:

NetBeans UML plugins

Μπορείτε να οπτικοποιήσετε τις κλάσεις σας απευθείας από το NetBeans. Υπάρχουν μερικά plugins για το NetBeans γι’ αυτό το σκοπό.

Εδώ θα περιγράψουμε το πρόσθετο PlantUML.

PlantUML

Το PlantUML είναι μια μετα-γλώσσα με την οποία μπορεί κάποιος να παράγει διαγράμματα UML. Υποστηρίζονται τα ακόλουθα διαγράμματα:

Μπορείτε να κατεβάσετε το PlantUML plugin για το NetBeans από εδώ. Για να το εγκαταστήσετε, επιλέξτε στο NetBeans το μενού Tools -> Plugins, καρτέλα Downloaded, κλικ στο κουμπί Add Plugins, πλοηγηθείτε στο PlantUML-NB-x.x.nbm και Open και στη συνέχεια Install. Ακολουθήστε τις οδηγίες του οδηγού για να το εγκαταστήσετε. Η PlantUML χρειάζεται τη βιβλιοθήκη graphviz την οποία πρέπει να εγκαταστήσετε ξεχωριστά. Ελέγξτε την εγκατάσταση από το μενού Tools -> OptionsNetBeans -> Preferences αν είστε στο Mac) και κάνοντας κλικ στο Miscellaneous -> PlantUML. Πιθανόν να χρειαστεί να ορίσετε χειροκίνητα (manual) τη θέση του graphviz.

Για να δημιουργήσετε ένα διάγραμμα κλάσεων, επιλέξτε οποιαδήποτε κλάση του έργου σας (project) και επιλέξτε το μενού File -> New File -> PlantUML -> PlantUML from existing Java sources. Ακολουθήστε τον οδηγό. Θα δημιουργηθεί ένα αρχείο .puml που θα περιλαμβάνει μια σειρά από εντολές που δείχνουν τις συσχετίσεις μεταξύ των κλάσεων του έργου σας, π.χ.:

@startuml
class A
class B
B --|> A
@enduml

Σύνταξη για τα διαγράμματα κλάσεων της PlantUML. Μπορείτε να οπτικοποιήσετε το διάγραμμα κλάσεων επιλέγοντας το μενού Window –> PlantUML.

Περίληψη

Σ’ αυτό το μάθημα αναφερθήκαμε στα 13 διαγράμματα της UML 2.0 αλλά περιγράψαμε μόνο τους 4 τύπους διαγραμμάτων που θα χρειαστούμε:

Η Unified Modeling Language είναι μια οπτική γλώσσα μοντελοποίησης που επιτρέπει να απεικονίσουμε όλες τις φάσεις ανάπτυξης ενός προγράμματος, από τις απαιτήσεις μέχρι την εγκατάσταση στους Η/Υ του πελάτη.

Είναι σημαντικό να κατανοήσετε ότι δεν απαιτείται να χρησιμοποιήσετε όλα τα διαγράμματα για να περιγράψετε το σύστημά σας. Το ποια διαγράμματα θα χρησιμοποιήσετε εξαρτάται από το ποιούς θα χρησιμοποιηθούν και τι σκοπό εξυπηρετούν. Πάντα να έχετε υπόψιν σας ότι τα UML διαγράμματα βοηθούν στην τεκμηρίωση του κώδικά σας και βοηθούν εσάς και άλλους να κατανοήσουν καλύτερα τι προσπαθήτε να επιτύχετε με το σύστημά σας ώστε να είναι σε θέση να το βελτιώσουν μελλοντικά.

Πηγές

  1. Ambler S.W. (2003), The Elements of UML 2.0 Style, Cambridge University Press.
  2. Booch G., Rumbaugh J., Jacobson I. (2005), The Unified Modeling Language User Guide, 2nd Ed, Addison Wesley
  3. Cockburn A. (1999), Surviving Object-Oriented Projects, Addison-Wesley.
  4. Eriksson H.-E., Penker M. (1998), UML Toolkit, John Wiley & Sons, Inc.
  5. Fowler M. (2004), UML Distilled, 3rd Edition, Addison-Wesley.
  6. Gamma E., Helm R., Johnson R., Vlissides J. (1995), Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley.
  7. Graham I., Wills A., UML Tutorial, MMI – Trireme International
  8. Halbert P., O’ Brien (1997), Using Types and Inheritance in Object Oriented Programming, IEEE Software, September.
  9. Jacobson I., Magnus C., Patrik J., Gunnar O. (1992), Object-Oriented Software Engineering: A Use Case Driven Approach, Addison-Wesley.
  10. Kruchten P. (2000), The Rational Unified Process An Introduction, 2nd Edition, Addison-Wesley.
  11. Kostaras I. (2009), UML Description and a methodology of use.
  12. Martin R.C. (2002), UML for Java Programmers, Prentice-Hall
  13. Pilone D. & Pitman N. (2005), UML 2.0 in a Nutshell, O’Reilly
  14. Pilone D. (2006), UML 2.0 Pocket Reference, O’Reilly
  15. Pressman R. S. (1997), Software Engineering - A practitioner’s approach, 4th edition, European adaptation, McGraw Hill.
  16. Quatrani T. (1998), Visual Modeling with Rational Rose and UML, Addison-Wesley.
  17. Rosenberg, D. (1999), Use Case Driven Object Modeling with UML – A practical approach, Addison-Wesley.
  18. Rumbaugh J., Blaha M., Premerlani W., Eddy F., Lorensen W. (1991), Object-Oriented Modelling and Design, Prentice-Hall Int.
  19. Schneider G., Winters J.P. (2001), Applying Use Cases – A practical guide, 2nd Ed., Addison-Wesley.
  20. [SDM] Software Development Magazine (1998), Inside the UML, Rational Software Corporation.
  21. UML Class Diagrams.

< Δ >