Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεΓῆ Γκόφας Τροποποιήθηκε πριν 7 χρόνια
1
ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ (SOFTWARE ENGINEERING) UML – διαγράμματα περιπτώσεων χρήσης, διαγράμματα κλάσεων, διαγράμματα ακολουθίας, διαγράμματα δραστηριότητας, διαγράμματα παράταξης
2
Θέματα που θα παρουσιάσουμε
Τι είναι η UML Αναλυτική παρουσίαση διαγραμμάτων περιπτώσεις χρήσης διαγράμματα κλάσεων διαγράμματα ακολουθίας διαγράμματα δραστηριότητας
3
UML – Unified Modeling Language
Πρότυπο που δεν ανήκει σε συγκεκριμένο κατασκευαστή (nonproprietary) για τη μοντελοποίηση συστημάτων (όχι μόνο λογισμικού) Σύγκλιση συμβολισμών που χρησιμοποιούνται σε αντικειμενοστρεφείς μεθόδους OMT (James Rumbaugh and colleagues) Booch (Grady Booch) OOSE (Ivar Jacobson) Συντηρείται από τον OMG, τρέχουσα έκδοση 2.4.1 Δείτε: Εμπορικά εργαλεία: Rational (IBM),Together (Borland), Visual Architect (business processes, BCD), Visual Paradigm for UML Εργαλεία ανοικτού λογισμικού: ArgoUML, StarUML, Umbrello
4
Διαγράμματα περίπτωσης χρήσης
Χρησιμοποιείται κατά την εκμαίευση των απαιτήσεων και στην ανάλυση των απαιτήσεων για να αναπαραστήσει την «εξωτερική συμπεριφορά» του συστήματος (η συμπεριφορά όπως φαίνεται από εξωτερικό προς το σύστημα παρατηρητή) Βασικά σύμβολα: Actor: αναπαριστά έναν ρόλο – κατά κάποιο τρόπο έναν χρήστη του συστήματος. Περίπτωση χρήσης: μια κατηγορία λειτουργικότητας που παρέχεται από το σύστημα Μοντέλο περιπτώσεων χρήσης: το σύνολο των περιπτώσεων χρήσης, περιγράφει πλήρως τη λειτουργικότητα του συστήματος Αγόρασε εισιτήριο Επιβάτης
5
Προαιρετική περιγραφή
Actor Ο actor μοντελοποιεί μία εξωτερική οντότητα που αλληλεπιδρά (επικοινωνεί) με το σύστημα Άνθρωπος Εξωτερικό σύστημα (τρίτο σύστημα) Φυσικό περιβάλλον (π.χ. καιρός) Ο actor έχει ένα μοναδικό όνομα και μία προαιρετική περιγραφή Παραδείγματα: Επιβάτης: Ένας άνθρωπος στο τραίνο Δορυφόρος GPS: ένα εξωτερικό σύστημα που παρέχει στο δικό μας σύστημα συντεταγμένες GPS Προαιρετική περιγραφή Επιβάτης Όνομα
6
Περίπτωση χρήσης Μία περίπτωση χρήσης περιγράφει μία κατηγορία λειτουργικότητας που παρέχεται από το σύστημα Οι περιπτώσεις χρήσης μπορούν να περιγράφονται συμπληρωματικά και με κείμενο, με εστίαση στη ροή συμβάντων μεταξύ actor και συστήματος Η περιγραφή κειμένου μιας περίπτωσης χρήσης έχει 6 τμήματα: Μοναδικό όνομα Actors που μετέχουν Συνθήκες εισόδου Συνθήκες εξόδου Ροή συμβάντων Ειδικές απαιτήσεις Αγόρασε εισιτήριο
7
Περιγραφή κειμένου περιπτώσεων χρήσης
Όνομα: Αγόρασε εισιτήριο Actor που μετέχει: Επιβάτης 3. Συνθήκη εισόδου: Ο Επιβάτης πηγαίνει στο αυτόματο μηχάνημα πώλησης εισιτηρίων Ο Επιβάτης διαθέτει αρκετά χρήματα για να αγοράσει το εισιτήριο 4. Συνθήκη εξόδου: Ο Επιβάτης έχει εισιτήριο 5. Ροή συμβάντων: Ο Επιβάτης επιλέγει προορισμό Το αυτόματο μηχάνημα εμφανίζει την τιμή του εισιτηρίου Ο Επιβάτης εισάγει τα χρήματα, τουλάχιστον όσα και η τιμή του εισιτηρίου Το αυτόματο μηχάνημα επιστρέφει τυχόν ρέστα Το αυτόματο μηχάνημα δίνει το εισιτήριο 6. Ειδικές απαιτήσεις: Καμία
8
Παράδειγμα: UC «δανεισμός αντιτύπων»
Όνομα: δανεισμός αντιτύπων Πρωτεύων actor: βιβλιοθηκονόμος Ενδιαφερόμενοι και απαιτήσεις των: Βιβλιοθηκονόμος: θέλει να καταγράφει ορθά και σύντομα τον δανεισμό ενός ή περισσοτέρων αντιτύπων Δανειζόμενος: να δανειστεί τα αντίτυπα και να γνωρίζει την προθεσμία επιστροφής Προϊστάμενος βιβλιοθήκης: να δανείζονται μόνο οι δικαιούμενοι. Να γνωρίζει ποιος έχει δανειστεί τι. Γρήγορη εξυπηρέτηση. Μη υπέρβαση ορίων δανεισμού. Προϋποθέσεις: το σύστημα έχει διακριβώσει την ταυτότητα του βιβλιοθηκονόμου
9
Παράδειγμα: Βασική ροή UC «δανεισμός αντιτύπων»
Ο δανειζόμενος έρχεται στο βιβλιοθηκονόμο κρατώντας τα αντίτυπα των βιβλίων προς δανεισμό. Ο βιβλιοθηκονόμος αναζητά τον δανειζόμενο. Το Σύστημα παρουσιάζει τα στοιχεία του δανειζομένου. Ο βιβλιοθηκονόμος αναζητά το αντίτυπο. Το Σύστημα παρουσιάζει τα στοιχεία του αντιτύπου. Ο βιβλιοθηκονόμος επιλέγει το αντίτυπο προς δανεισμό. Το Σύστημα επιβεβαιώνει ότι ο δανειζόμενος μπορεί να δανειστεί το αντίτυπο. Το Σύστημα καταχωρίζει το δανεισμό και εμφανίζει την προθεσμία επιστροφής. Ο βιβλιοθηκονόμος ενημερώνει τον δανειζόμενο για την προθεσμία επιστροφής του αντιτύπου. Ο βιβλιοθηκονόμος επαναλαμβάνει τα βήματα 4 έως 9 για όλα τα αντίτυπα.
10
Παράδειγμα: Εναλλακτικές ροές UC «δανεισμός αντιτύπων»
* Σε οποιοδήποτε σημείο το λογισμικό καταρρέει. [* σε οποιοδήποτε βήμα] 1. Ο βιβλιοθηκονόμος εκκινεί το Σύστημα. 2. Το Σύστημα ταυτοποιεί το βιβλιοθηκονόμο. 3. Ο βιβλιοθηκονόμος εκκινεί το δανεισμό για τα εναπομείναντα αντίτυπα. 2α. Ο δανειζόμενος έρχεται για πρώτη φορά για δανεισμό. [2α εναλλακτική του βήματος 2] 1. Ο βιβλιοθηκονόμος επιβεβαιώνει ότι ο δανειζόμενος μπορεί να δανειστεί βιβλία από τη Βιβλιοθήκη. 1α. Ο δανειζόμενος δε δικαιούται να δανειστεί από τη Βιβλιοθήκη. 1. Ο δανεισμός τερματίζει. 2. Ο βιβλιοθηκονόμος καταχωρίζει τον δανειζόμενο στο σύστημα με τη Διαχείριση Δανειζομένου. 5α. Το Σύστημα δε βρίσκει το αντίτυπο του βιβλίου [5α εναλλακτική του βήματος 5] 1. Ο βιβλιοθηκονόμος κρατά το αντίτυπο για να διαπιστώσει το σφάλμα αργότερα. 2. Ο δανεισμός τερματίζει. 7α. Ο δανειζόμενος δεν μπορεί να δανειστεί βιβλία [7α εναλλακτική του βήματος7] 1. Ο βιβλιοθηκονόμος ενημερώνει το δανειζόμενο. 2. Κρατά τα εναπομείναντα αντίτυπα για να επιστρέψουν στα ράφια. 3. Ο δανεισμός τερματίζεται.
11
Περιγραφή περιπτώσεων χρήσης - σενάρια (1/2)
Μία περίπτωση χρήσης μπορεί να θεωρηθεί ως ένα σύνολο πιθανών – διαφορετικών μεταξύ τους- ακολουθιών βημάτων που εξυπηρετούν ένα συγκεκριμένο στόχο του πρωτεύοντος actor και είναι πιθανό να εκτελεστούν, όταν ο πρωτεύων actor εκκινεί την περίπτωση χρήσης. Τα διαφορετικά μονοπάτια στη ροή εκτέλεσης ονομάζονται σενάρια - Ένα σενάριο (ή στιγμιότυπο περίπτωσης χρήσης) είναι μία ακολουθία ενεργειών και αλληλεπιδράσεων actors και συστήματος. Δεν περιγράφονται όλες οι δυνατότητες εκτέλεσης της περίπτωσης χρήσης και όλα τα δυνατά μονοπάτια στη ροή εκτέλεσης των βημάτων. Οι ροές των βημάτων σε μία περίπτωση χρήσης χωρίζονται σε δύο κατηγορίες. Η πρώτη κατηγορία είναι η βασική ροή (basic flow) η οποία περιγράφει το κύριο σενάριο και είναι μία τυπική ροή των βημάτων με επιτυχή κατάληξη. Η δεύτερη κατηγορία, είναι οι εναλλακτικές ροές (alternative flows) που είναι εναλλακτικές επιτυχημένες ή αποτυχημένες ροές εκτέλεσης της περίπτωσης χρήσης.
12
Περιγραφή περιπτώσεων χρήσης - σενάρια (2/2)
Ανάλογα με το πόσο λεπτομερής είναι η διατύπωση των βημάτων και των δυνατών σεναρίων, έχουμε τρεις μορφές περιπτώσεων χρήσης που είναι: Σύντομη . Περιγράφουμε την περίπτωση χρήσης σε μία παράγραφο καταγράφοντας τη βασική ροή Ουσιώδης (essential use cases). Περιγράφονται αναλυτικά όλα τα βήματα της αλληλεπίδρασης με όλες τις εναλλακτικές ροές. Συστήματος (system use cases). Χρησιμοποιούνται κυρίως ως μέσο προδιαγραφής των απαιτήσεων. Η σύντομη περιγραφή χρησιμοποιείται κυρίως για μία πρώτη καταγραφή της περίπτωσης χρήσης στα πρώτα στάδια της εξαγωγής των απαιτήσεων. Όταν οι περιπτώσεις χρήσης εξετάζονται λεπτομερέστερα, περιγράφονται με χρήση της ουσιώδους μορφής. Εάν θέλουμε να προδιαγράψουμε με λεπτομέρεια την αλληλεπίδραση του actor με το σύστημα χρησιμοποιούμε τη μορφή του συστήματος.
13
Οδηγίες για τη σύνταξη του κειμένου
Τα βήματα των περιπτώσεων χρήσης περιγράφονται με απλές καταφατικές και σύντομες προτάσεις. Διατυπώνουν με ακρίβεια για το τι κάνει το σύστημα και τι ο πρωτεύων actor. Δεν περιγράφεται το πώς δουλεύει το σύστημα αλλά μόνο το τι κάνει. Η εσωτερική λειτουργία θεωρείται εδώ ως μαύρο κουτί. Δεν περιγράφονται στοιχεία της διεπαφής χρήστη, όπως και άλλα στοιχεία που αφορούν τη σχεδίαση του λογισμικού. Λεπτομερέστερα στοιχεία της διεπαφής μπορούμε να συμπεριλάβουμε μόνο στη μορφή συστήματος
14
Οι περιπτώσεις χρήσης μπορούν να αλληλοσυνδέονται – σχέση «extends»
Όταν μία περίπτωση χρήσης Α επεκτείνει τη λειτουργικότητα μίας περίπτωσης χρήσης Β, η Β ΔΕΝ το γνωρίζει (η Β σε ΚΑΜΜΙΑ περίπτωση δεν τροποποιείται για να «εξυπηρετήσει» την Α και στο κείμενο της Α ΔΕΝ αναφέρεται η Β). Αν οι Β, Γ, Δ, Ε συνδέονται με την Α με σχέση επέκτασης, τότε στα πλαίσια της Α είναι πιθανό να κληθεί μία ή περισσότερες από τις Β, Γ, Δ, Ε, μπορεί όμως και καμία Μπορούμε να το παραλληλίσουμε με «υπό συνθήκη κλήση διαδικασίας» ή «διακοπή από το υλικό» (μπορεί να γίνει, μπορεί και όχι) Η σχέση σημειώνεται με διάστικτη γραμμή με φορά ΑΠΟ αυτή που επεκτείνει ΠΡΟΣ αυτή που επεκτείνεται. Η διάστικτη γραμμή επιγράφεται με τη λέξη-κλειδί <<extend>>
15
Οι περιπτώσεις χρήσης μπορούν να αλληλοσυνδέονται – σχέση «extends»
Οι εμπλουτισμένες- σπάνιες περιπτώσεις χρήσης διαχωρίζονται από τη «βασική» για να έχουμε πιο εύληπτη αναπαράσταση Οι περιπτώσεις χρήσης που αναπαριστούν εξαιρέσεις μπορούν να κάνουν «extend» πάνω από μία περιπτώσεις χρήσης Επιβάτης ΑγόρασεΕισητήριο <<extends>> <<extends>> <<extends>> ΈχειΒλάβη <<extends>> ΕξάντλησηΧρονικούΟρίου Ακύρωση ΔενΥπάρχουνΡέστα
16
Χρήση της σχέσης επέκτασης
Θέλουμε να τροποποιήσουμε μία περίπτωση χρήσης, χωρίς να αλλάξουμε το κείμενό της. Το τελικό προϊόν λογισμικού παράγεται σε παραπάνω από μία εκδόσεις, οι οποίες προσθέτουν λειτουργικότητα σε μία βασική έκδοση. Οι περιπτώσεις χρήσης της βασικής έκδοσης συντάσσονται αγνοώντας την πιθανή πρόσθετη λειτουργικότητα των εμπλουτισμένων εκδόσεων. Οι περιπτώσεις χρήσης των εμπλουτισμένων εκδόσεων συντάσσονται ως επεκτάσεις της λειτουργικότητας της βασικής έκδοσης. Υπάρχουν πολλά ασύγχρονα γεγονότα που μπορεί να διακόψουν τη ροή των βημάτων της περίπτωσης χρήσης.
17
Οι περιπτώσεις χρήσης μπορούν να αλληλοσυνδέονται – σχέση «includes»
Για αναπαράσταση λειτουργικής συμπεριφοράς που είναι κοινή σε περισσότερες από μία περιπτώσεις χρήσης Σε αντιδιαστολή με τη σχέση επέκτασης που χρησιμοποιείται για εμπλουτισμό λειτουργικότητας μιας περίπτωσης χρήσης ή για λειτουργίες που είναι σχετικά σπάνιες, η σχέση συμπερίληψης χρησιμοποιείται κυρίως για να επαναχρησιμοποιήσουμε μία μοντελοποίηση
18
Οι περιπτώσεις χρήσης μπορούν να αλληλοσυνδέονται – σχέση «includes»
A <<include>> B Στα βήματα της περίπτωσης χρήσης Α συμπεριλαμβάνονται τα βήματα της περίπτωσης χρήσης Β (μπορούμε να το παραλληλίσουμε με «κλήση διαδικασίας») Η Α αναφέρεται ως βασική και η Β ως συμπεριλαμβανόμενη (included) περίπτωση χρήσης Η σχέση σημειώνεται με διάστικτη γραμμή με φορά ΑΠΟ αυτή που συμπεριλαμβάνει ΠΡΟΣ αυτή που συμπεριλαμβάνεται. Η διάστικτη γραμμή επιγράφεται με τη λέξη-κλειδί <<include>>
19
Οι περιπτώσεις χρήσης μπορούν να αλληλοσυνδέονται – σχέση «includes»
Επιβάτης ΑγοράΠολλαπλούΕισητηρίου ΑγοράΑπλούΕισητηρίου <<includes>> <<includes>> <<extends>> ΣυλλογήΑντιτίμου <<extends>> <<extends>> <<extends>> ΕξάντλησηΧρονικούΟρίου ΔενΥπάρχουνΡέστα ΈχειΒλάβη Ακύρωση
20
Αφηρημένες έναντι συγκεκριμένων περιπτώσεων χρήσης
Περιπτώσεις χρήσης που ενεργοποιούνται αυτόνομα ονομάζονται συγκεκριμένες (concrete) Περιπτώσεις χρήσης που ΔΕΝ ενεργοποιούνται αυτόνομα –παρά μόνο ως τμήμα άλλων μέσω συμπερίληψης– ονομάζονται αφηρημένες (abstract) ΑγοράΑπλού Εισιτηρίου <<include>> Συλλογή Αντιτίμου Αγορά Πολλαπλού Εισιτηρίου <<include>>
21
Μερικοί κανόνες για τις σχέσεις συμπερίληψης
ΔΕΝ διασπούμε περιπτώσεις χρήσης σε «συμπεριλαμβανόμενες υποπεριπτώσεις» για να αναδείξουμε τα βήματα της κάθε υποπερίπτωσης Φτιάχνουμε «συμπεριλαμβανόμενη υποπερίπτωση» ΜΟΝΟ αν αυτή χρησιμοποιείται σε δύο τουλάχιστον περιπτώσεις χρήσης, ή είναι αφ’ εαυτής συγκεκριμένη (π.χ. Η «ΣυλλογήΑντιτίμου» στην «ΑγοράΕισητηρίου») Η υπερβολική χρήση σχέσεων συμπερίληψης μπορεί να βοηθά τη συγγραφή, αλλά μειώνει την αναγνωσιμότητα και δυσχεραίνει τη διαχείριση Κάθε «βασική» περίπτωση χρήσης προϋποθέτει ΟΛΕΣ τις συμπεριλαμβανόμενες
22
Οι περιπτώσεις χρήσης μπορούν να κατηγοριοποιούνται
Κατηγοριοποίηση Περίπτωση χρήσης Μάθημα Δώσε διάλεξη Διδάσκων Actor Βάλε εργασία Φοιτητής Βοηθός διδασκαλίας Λύσε την εργασία Όριο συστήματος
23
Κατηγοριοποίηση στη UML 1: πακέτα
πακέτο Μάθημα Περίπτωση χρήσης Δώσε διάλεξη Διδάσκων Actor Βάλε εργασία Φοιτητής Βοηθός διδασκαλίας Λύσε την εργασία Όριο συστήματος
24
Διαφορές συμπερίληψης - επέκτασης
Στη συμπερίληψη, έχουμε σαφή αναφορά της συμπεριλαμβανόμενης περίπτωσης χρήσης στο κείμενο που περιγράφει τη βασική. Στη σχέση της επέκτασης η λειτουργικότητα της βασικής περίπτωσης χρήσης επεκτείνεται, χωρίς η ίδια να το γνωρίζει. Όταν χρησιμοποιείται η επέκταση, δε γίνεται κάποια αναφορά στα βήματα της βασικής περίπτωση χρήσης σε αυτή που την επεκτείνει. Οι επεκτάσεις στις περιγραφές των περιπτώσεων χρήσης περιγράφονται εκτός των βημάτων των ροών, σε ξεχωριστή ενότητα, ως σημεία επέκτασης (extension points). Ένα τελευταίο σημαντικό σημείο διαφοροποίησης της επέκτασης από τη συμπερίληψη είναι ότι η βασική περίπτωση χρήσης μπορεί να νοηθεί ανεξάρτητα από τις επεκτάσεις της.
25
Οι περιπτώσεις χρήσης μπορούν να αλληλοσυνδέονται – σχέση γενίκευσης
Β Α Γ Οι περιπτώσεις χρήσης B και Γ κληρονομούν τη συμπεριφορά της Α. Μπορούν να εξειδικεύσουν τα βήματα των ροών της Α. Σημειώνεται με πλήρεις γραμμές ΑΠΟ τις ειδικές ΠΡΟΣ τη γενική ΟΛΑ τα βήματα της γενικής περίπτωσης χρήσης (βασικής και εναλλακτικών ροών) ΠΡΕΠΕΙ να συμπεριλαμβάνονται στις ειδικές, εξειδικευμένα πιθανώς σε πιο συγκεκριμένα βήματα
26
Η γενίκευση ισχύει και για τους actors
Χρησιμοποιούμε τη γενίκευση των actor όταν θέλουμε να δείξουμε ομοιότητες μεταξύ των actors Οι actors θα πρέπει να εμφανίζουν κοινή συμπεριφορά σε σχέση με το σύστημα Πρόσωπο Γενίκευση Καθηγητής Φοιτητής
27
Παράδειγμα περίπτωσης χρήσης
28
Παράδειγμα Διαγράμματος Χρήσης UML
Μολονότι τα «άνοιγμα διαφράγματος», «ενεργοποίηση φλας», «κλείσιμο διαφράγματος» ΕΙΝΑΙ λειτουργίες της φωτογραφικής μηχανής, ΔΕΝ τα εκτελεί ο φωτογράφος ΑΛΛΑ η φωτογραφική μηχανή ως τμήμα της διαδικασίας υλοποίησης των προσταγών του φωτογράφου! Σωστό Λάθος
29
Άλλα πιθανά στοιχεία/ενότητες των περιπτώσεων χρήσης (1/2)
Ύστερες συνθήκες (postconditions) Συνθήκη που πρέπει να ισχύει μετά από επιτυχή ή αποτυχημένη ολοκλήρωση περίπτωση χρήσης – π.χ. «το πλήθος των διαθέσιμων μη τυπωμένων εισιτηρίων έχει μειωθεί κατά 1» Εναύσματα (triggers) Γεγονότα που ενεργοποιούν την περίπτωση χρήσης. Θα μπορούσαν να περιλαμβάνουν χρονικά σημεία π.χ. «κάθε 24 ώρες». Αν δεν συμπεριλάβουμε τέτοιες, θεωρείται ότι είναι το 1ο βήμα. Εξαιρέσεις Διαχωρίζουμε επιτυχημένες και αποτυχημένες ροές με τις αποτυχημένες να πηγαίνουν στην ενότητα «εξαιρέσεις» - π.χ. «το μηχάνημα δεν διαθέτει μη τυπωμένα εισιτήρια» Ειδικές απαιτήσεις Για καταγραφή μη λειτουργικών απαιτήσεων ή/και περιορισμών. Δευτερεύοντες actors Καταγράφονται μετά τον πρωτεύοντα
30
Άλλα πιθανά στοιχεία/ενότητες των περιπτώσεων χρήσης (2/2)
Τεχνολογικές επιλογές Όταν έχουμε ένα συγκεκριμένο βήμα που μπορεί να πραγματοποιηθεί με πάνω από ένα τεχνολογικά μέσα-τρόπους. Π.χ. σε ένα σούπερ-μάρκετ ένα είδος μπορεί να «χτυπηθεί» διαβάζοντας το barcode με την ειδική διάταξη ή πληκτρολογώντας τον κωδικό του. Αν οι τεχνολογικές επιλογές αλλάζουν σημαντικά την αλληλεπίδραση του actor με το σύστημα, τότε πιθανόν να δημιουργήσουμε ξεχωριστό use case (π.χ. σε ένα τραπεζικό σύστημα, πληρωμή λογαριασμού μέσω ATM ή μέσω web banking) Υπορροές Για ροές με μακροσκελή περιγραφή, ομαδοποιούμε και ονοματίζουμε βήματα και τα εισάγουμε στην ενότητα των υπορροών. Κατόπιν τα αναφέρουμε (στη βασική ή τις εναλλακτικές ροές) με το όνομά τους. Σημεία επέκτασης Αναφέρονται στα σημεία των ροών της βασικής περίπτωσης χρήσης όπου επεκτείνεται η συμπεριφορά της
31
Γενικές οδηγίες για συγγραφή περιπτώσεων χρήσης (1/3)
Οι περιπτώσεις χρήσης είναι εργαλείο επικοινωνίας Πρέπει να είναι κατανοητές και σαφείς από όλους τους ενδιαφερόμενους ώστε να μπορούν να επαληθευθούν Επαναληπτική και επαυξητική συγγραφή Αρχικά εντοπίζουμε τον πρωτεύοντα actor και περιγράφουμε τη βασική ροή, πιθανότατα με τη συνοπτική μορφή Κατόπιν μπορούμε να προσθέσουμε λεπτομέρειες μέσω ερωτημάτων «τι θα γίνει αν...» Το επίπεδο λεπτομέρειας δεν είναι πάντα ίδιο Κάποιες φορές αρκεί η ουσιώδης περιγραφή για να συμφωνήσουν όλοι ότι «αυτές είναι οι απαιτήσεις» και τυχόν κενά θα καλυφθούν με την παράδοση των πρωτοτύπων του λογισμικού Για τις δύσκολες και πολύπλοκες περιπτώσεις χρήσεις μπορεί να χρειαστεί να καταφύγουμε στη μορφή συστήματος της περίπτωσης χρήσης
32
Γενικές οδηγίες για συγγραφή περιπτώσεων χρήσης (2/3)
Διαχείριση οντοτήτων δεδομένων Περιπτώσεις χρήσης που διαχειρίζονται πληροφορίες για οντότητες δεδομένων που αποθηκεύονται στο σύστημα (π.χ. σε ένα σύστημα βιβλιοθήκης, οι δικαιούμενοι δανεισμό) Μπορούμε να έχουμε περιπτώσεις χρήσης για «ανάκτηση», «δημιουργία», «τροποποίηση», «διαγραφή», αλλά αν η διαχείριση είναι απλή μπορούμε να τα συνενώσουμε σε «Διαχείριση οντότητας» (π.χ. «Διαχείριση δανειζομένων»). Ενεργοποίηση από τον χρόνο Αν μία περίπτωση ενεργοποιείται από χρονικό έναυσμα, τότε θέτουμε ως πρωτεύοντα actor αυτόν που κυρίως εξυπηρετείται από τον στόχο
33
Γενικές οδηγίες για συγγραφή περιπτώσεων χρήσης (3/3)
Σύνδεση με τους επιχειρησιακούς κανόνες Συνδέουμε τις περιπτώσεις χρήσης με τους επιχειρησιακούς κανόνες για να έχουμε ολοκληρωμένη άποψη των απαιτήσεων, συνδυάζοντας τη λειτουργικότητα του λογισμικού με τους κανόνες του οργανισμού. Πρόσθετο πλεονέκτημα: Αν αλλάξουν οι κανόνες, ξέρουμε ποια τμήματα του λογισμικού επηρεάζονται Όταν οι επιχειρησιακοί κανόνες καταγράφονται μαζί με τις απαιτήσεις υπάρχει κίνδυνος να τα «μπλέξουμε» Απλός κανόνας: ό,τι ισχύει ανεξαρτήτως παρουσίας λογισμικού, είναι επιχειρησιακός κανόνας, τα άλλα είναι απαιτήσεις
34
Διαγράμματα κλάσεων Τα διαγράμματα κλάσεων αναπαριστούν τη δομή του συστήματος Χρησιμοποιούνται: Κατά την ανάλυση για να μοντελοποιηθούν οι έννοιες στο πεδίο της εφαρμογής Κατά τον σχεδιασμό του συστήματος για να μοντελοποιηθούν τα υποσυστήματα Κατά τον σχεδιασμό των αντικειμένων για να οριστούν η λεπτομερής συμπεριφορά και τα γνωρίσματα των κλάσεων FareCatalogue Trip Table zone2price zone:Zone Price: Price * * Enumeration getZones() Price getPrice(Zone)
35
Βασικές έννοιες αντικειμενοστρεφούς μοντέλου
Αντικείμενο: μία αυτόνομη και ανεξάρτητη οντότητα που χαρακτηρίζεται από: Ταυτότητα: το διαχωρίζει από τα άλλα αντικείμενα και παραμένει αναλλοίωτη καθ’ όλη τη διάρκεια ζωής του αντικειμένου, ανεξάρτητα από άλλες αλλαγές στην κατάστασή του Κατάσταση: ένα σύνολο δεδομένων που αφορούν το αντικείμενο και αποτυπώνουν όλες τις ιδιότητες του αντικειμένου Συμπεριφορά: ο τρόπος με τον οποίο το αντικείμενο αντιδρά σε σχέση με τις αλλαγές στην κατάστασή του και την επικοινωνία με άλλα αντικείμενα. Υλοποιείται μέσω των πράξεών του. Η συμπεριφορά επιδρά στην κατάσταση του αντικειμένου και τη διαμορφώνει Αναπαράσταση αντικειμένου: Όνομα (ταυτότητα) Κατάσταση Πράξεις
36
Βασικές έννοιες αντικειμενοστρεφούς μοντέλου (συνέχεια)
Αντικείμενα (συνέχεια) Οι πράξεις του αντικειμένου διακρίνονται σε ελεγκτικές (δεν τροποποιούν την κατάσταση) και κατασκευαστικές (τροποποιούν την κατάσταση) Ο εξωτερικός κόσμος γνωρίζει για το αντικείμενο το όνομά του (ταυτότητα) και το όνομα κάποιων πράξεών του αλλά ΟΧΙ το πώς υλοποιούνται οι πράξεις ή την κατάστασή του (ενθυλάκωση – encapsulation) Μεταξύ αντικειμένων μπορούμε να έχουμε στατικές σχέσεις (δεν αλλάζουν με τον χρόνο) ή δυναμικές σχέσεις (μεταβάλλονται χρονικά)
37
Βασικές έννοιες αντικειμενοστρεφούς μοντέλου (συνέχεια)
Αντικείμενα (συνέχεια): Σχέση σύνθεσης Περιγράφει ότι ένα αντικείμενο συντίθεται από μία ομάδα αντικειμένων Π.χ. Ένα αυτοκίνητο έχει σασί, μηχανή, δύο άξονες, τέσσερις τροχούς, τιμόνι κ.τ.λ. Εξωτερικά δεν ξέρουμε ούτε ποια μέρη το συνθέτουν, ούτε το σε ποια μηνύματα αντιδρά το καθένα – για να το δούμε θα πρέπει να εξετάσουμε εσωτερικά το αντικείμενο (αν μας επιτρέπεται και μας ενδιαφέρει) Π.χ. Η μηχανή μπορεί να δίνει στους τροχούς το μήνυμα «περιστρέψου» και το τιμόνι στον άξονα το μήνυμα «στρίψε»
38
Βασικές έννοιες αντικειμενοστρεφούς μοντέλου (συνέχεια)
Αλληλεπίδραση αντικειμένων Τα αντικείμενα αλληλεπιδρούν αποστέλλοντας μεταξύ τους μηνύματα Το μήνυμα είναι ένα αίτημα εκτέλεσης πράξης και το παραλαμβάνον αντικείμενο αποκρίνεται εκτελώντας την πράξη Ένα μήνυμα μπορεί να συνοδεύεται από παραμέτρους και να επιστρέφει αποτέλεσμα Τα μηνύματα που μπορούν να αποσταλούν σε ένα αντικείμενο κοινοποιούνται στη διεπαφή του αντικειμένου – μόνο οι υπογραφές των μηνυμάτων κοινοποιούνται μέσω της διεπαφής ενώ ο τρόπος υλοποίησής τους αποκρύπτεται.
39
Βασικές έννοιες αντικειμενοστρεφούς μοντέλου (συνέχεια)
Κλάσεις και στιγμιότυπα Κλάση: μηχανισμός ομαδοποίησης αντικειμένων με κοινή δομή και συμπεριφορά Στιγμιότυπο: αντικείμενο που ορίζεται με βάση κάποια κλάση Οι τιμές που συνθέτουν την κατάσταση ενός στιγμιοτύπου είναι ιδιαίτερες για κάθε μεμονωμένο αντικείμενο Οι πράξεις και η δομή ορίζονται μία φορά στην κλάση και ισχύουν για όλα τα στιγμιότυπα της κλάσης. Φυσικά η υλοποίηση κάποιας πράξης μπορεί να λαμβάνει υπ’ όψιν τιμές της κατάστασης και να διαφοροποιεί τη ροή εκτέλεσης με υπό συνθήκη εκτέλεση κώδικα Εναλλακτικά μπορούμε να ορίσουμε διαφορετικές κλάσεις που να διαφέρουν ως προς την υλοποίηση μίας η περισσοτέρων πράξεων
40
Βασικές έννοιες αντικειμενοστρεφούς μοντέλου (συνέχεια)
Πολυμορφισμός Η χρήση του ίδιου μηνύματος στη διεπαφή πάνω από μίας κλάσεων για υλοποίηση εννοιολογικά όμοιων αλλά διαφορετικών σε λεπτομέρειες υλοποίησης πράξεων Π.χ. στη Java η μέθοδος .toString() υλοποιείται σε όλα τα αντικείμενα με εντελώς διαφορετικό τρόπο, κάνει ωστόσο εννοιολογικά το ίδιο πράγμα Με τον πολυμορφισμό ο αποστολέας ενός μηνύματος δεν χρειάζεται να γνωρίζει την κλάση του αποδέκτη του μηνύματος, παρά μόνο το γεγονός ότι το μήνυμα ανήκει στη διεπαφή του
41
Βασικές έννοιες αντικειμενοστρεφούς μοντέλου (συνέχεια)
Κληρονομικότητα Τρόπος επέκτασης-εξειδίκευσης της συμπεριφοράς (ή/και της κατάστασης) ενός αντικειμένου Παράδειγμα: φοιτητής από εισαγωγικές και φοιτητής από κατατακτήριες Και οι δύο έχουν αριθμό μητρώου, ονοματεπώνυμο και άλλα ατομικά στοιχεία, παρακολουθούν μαθήματα, δικαιούνται παροχές, παίρνουν πτυχίο κ.λπ. Αλλάζει μόνο ο τρόπος εγγραφής, το ακαδημαϊκό εξάμηνο εγγραφής και η αναγνώριση μαθημάτων (υπάρχει μόνο στον φοιτητή από κατατακτήριες) Έτσι φτιάχνουμε την κλάση Φοιτητής που έχει τα κοινά στοιχεία κατάστασης και συμπεριφορές. Δημιουργούμε την υποκλάση Φοιτητής από εισαγωγικές που υλοποιεί την πράξη εγγραφή θέτοντας το εξάμηνο εγγραφής σε «1» και την υποκλάση Φοιτητής από κατατακτήριες που υλοποιεί διαφορετικά την πράξη εγγραφή θέτοντας το εξάμηνο εγγραφής κατάλληλα και επίσης υλοποιεί την πράξη αναγνώριση μαθημάτων
42
Βασικές έννοιες αντικειμενοστρεφούς μοντέλου (συνέχεια)
Κλάσεις, αφαίρεση και διεπαφές Οι κλάσεις με τον μηχανισμό της ενθυλάκωσης και την κοινοποίηση των διεπαφών βοηθούν στην επίτευξη της αφαίρεσης Μπορούμε να αλλάξουμε οποιοδήποτε στοιχείο της κατάστασης (τύπο, πλήθος στοιχείων κ.λπ.) στον βαθμό που διατηρούμε τις ίδιες διεπαφές – το αντικείμενο θα μπορεί να χρησιμοποιηθεί χωρίς καμία τροποποίηση στον κώδικα. Έτσι προάγεται η συντηρησιμότητα και η δυνατότητα επαναχρησιμοποίησης. Από την άλλη πλευρά, θα πρέπει οι διεπαφές να είναι καλά μελετημένες ώστε να μην χρειάζεται να αλλάξουν. Κατά περίπτωση μπορούμε να υλοποιούμε διαφορετικές διεπαφές, αν πρόκειται να «ταιριάξουμε» σε διαφορετικές συνθήκες του πραγματικού κόσμου (π.χ. κάρτες ανάληψης με ή χωρίς «τσιπάκι ασφαλείας»)
43
Κλάσεις Όνομα Τύπος Γνωρίσματα Υπογραφή Λειτουργίες
FareCatalogue Όνομα Table zone2price Τύπος Enumeration getZones() Price getPrice(Zone) FareCatalogue Γνωρίσματα zone2price Υπογραφή getZones() getPrice(Zone) Λειτουργίες FareCatalogue Μία κλάση αναπαριστά μία έννοια Μία κλάση ενθυλακώνει κατάσταση (γνωρίσματα – attributes) και συμπεριφορά (λειτουργίες – operations) Κάθε γνώρισμα έχει τύπο Κάθε λειτουργία έχει μία υπογραφή Μόνο το όνομα της κλάσης είναι υποχρεωτικό και τυπικά ξεκινάμε από αυτό Τα υπόλοιπα στοιχεία προστίθενται προοδευτικά όσο προχωράει η ανάπτυξη
44
Διαγράμματα Κλάσεων: Ιδιότητες
Οι ιδιότητες (attributes) παραπέμπουν στα πεδία της Java/C++ και σχετίζονται με δεδομένα της κλάσης Τυπική σύνταξη ιδιοτήτων Όνομα : Τύπος = αρχική_τιμή Ο τύπος μπορεί να είναι ένας τύπος της UML, κάποιος τύπος της γλώσσας προγραμματισμού (π.χ. float, long) ή κάποια κλάση Παραγόμενες (derived) ιδιότητες είναι αυτές που η τιμή τους προκύπτει από άλλες ιδιότητες της κλάσης. Οι παραγόμενες ιδιότητες έχουν το σύμβολο “/” πριν από το όνομα. Student lastName: String firstName: String birthDate: Date phoneNo: String /age: Integer
45
Διαγράμματα Κλάσεων: Λειτουργίες
Οι λειτουργίες (operations) παραπέμπουν στις μεθόδους της Java Τυπική σύνταξη Όνομα(Παράμετρος1 : Τύπος1, Παράμετρος2 : Τύπος2, …) : Τύπος_Επιστροφής Το όνομα μιας λειτουργίας σε συνδυασμό με το πλήθος και τη σειρά των τύπων των παραμέτρων της συνιστούν την υπογραφή της λειτουργίας Shape color: Color position: Point draw() erase() move(newPos: Point): Shape
46
Διαγράμματα Κλάσεων: Λειτουργίες (συνέχεια)
Αν και οι λειτουργίες μίας κλάσης παραπέμπουν στις μεθόδους της, οι δύο έννοιες δεν είναι ταυτόσημες: Με τη UML ορίζουμε μία λειτουργία ως μία υπηρεσία που παρέχουν τα αντικείμενα της κλάσης. Η μέθοδος είναι μία υλοποίηση της λειτουργίας δηλαδή της υπηρεσίας που παρέχεται από τα αντικείμενα. Επομένως, μία απλή διάκριση είναι ότι οι λειτουργίες παρέχουν τις διεπαφές για την παροχή των υπηρεσιών, ενώ οι μέθοδοι παρέχουν την υλοποίησή τους. Με τον πολυμορφισμό μπορούμε να έχουμε διαφορετικές μεθόδους που υλοποιούν την ίδια λειτουργία.
47
Διαγράμματα κλάσεων: ορατότητα μελών
Πριν το όνομα κάθε μέλους (ιδιότητας ή λειτουργίας) μπορούμε να σημειώσουμε την ορατότητά του: - Ιδιωτικό (private) + Δημόσιο (public) # Προστατευμένο (protected) ~ Πακέτο (Package)
48
Διαγράμματα κλάσεων – δυνατότητα αλλαγής γνωρισμάτων
Ένα γνώρισμα μπορεί να σημειωθεί ως: changeable (εξ ορισμού χαρακτηρισμός) – μπορεί να αλλάξει η τιμή του frozen (καμία αλλαγή δεν επιτρέπεται) addOnly (μπορούν μόνο να προστεθούν τιμές – έχει νόημα για γνωρίσματα που δέχονται πολλαπλές τιμές)
49
Διαγράμματα κλάσεων – περιορισμοί σε γνωρίσματα
Περικλείονται σε άγκιστρα { } και σημειώνονται δίπλα στο γνώρισμα που αφορούν Μπορούν να γραφούν ως ελεύθερο κείμενο, σε OCL, σε κάποια γλώσσα προγραμματισμού Exercise no: Integer points: Integer {value >= 0} text: String
50
Actor έναντι Κλάσης έναντι Αντικειμένου
Μία οντότητα εκτός του συστήματος που μοντελοποιείται, η οποία αλληλεπιδρά με το σύστημα (π.χ. επιβάτης) Κλάση Μία αφαίρεση που μοντελοποιεί μία οντότητα είτε στο «πεδίο της εφαρμογής» (π.χ. «Εισιτήριο», «Πελάτης») είτε στο «πεδίο της λύσης» (π.χ. «Πλαίσιο διαλόγου»). Η κλάση είναι τμήμα του μοντέλου του συστήματος («Χρήστης», «Αυτόματος πωλητής εισιτηρίων», «Εξυπηρέτης») Αντικείμενο Ένα συγκεκριμένο στιγμιότυπο μιας κλάσης (π.χ. η διαδρομή «Τρίπολη - Αθήνα»)
51
fullFare: FareCatalogue
Στιγμιότυπα Ένα στιγμιότυπο αναπαριστά ένα συγκεκριμένο μέλος μιας κλάσης Τα γνωρίσματα αναπαρίστανται με τις τιμές τους Το όνομα του στιγμιοτύπου υπογραμμίζεται Το όνομα του στιγμιοτύπου μπορεί να περιλαμβάνει μόνο το όνομα της κλάσης (ανώνυμα αντικείμενα) Ανώνυμο αντικείμενο fullFare: FareCatalogue : FareCatalogue Zone2price = { {‘1’, 1.20}, {‘2’, 1.40}, {‘3’, 2.50} } Zone2price = { {‘1’, 1.20}, {‘2’, 1.40}, {‘3’, 2.50} }
52
Συσχετίσεις Η συσχέτιση (association) αναπαριστά κάποια σύνδεση των αντικειμένων δύο κλάσεων Απεικονίζει τη σχέση μεταξύ των κλάσεων Η συσχέτιση μπορεί να ονοματίζεται με κάποιο ρήμα που αναπαριστά τη σημασία της Μπορεί να σημειώνεται και ένα βέλος, ειδικότερα όταν δεν διαβάζεται από αριστερά προς τα δεξιά FareCatalogue isSubjectToFare Trip Table zone2price zone:Zone Price: Price * * Enumeration getZones() Price getPrice(Zone)
53
Διαγράμματα Κλάσεων: Συσχετίσεις (συνέχεια)
Κάθε άκρο της συσχέτισης μπορεί να διαθέτει πρόσθετα χαρακτηριστικά: Όνομα, για καλύτερη περιγραφή της σημασιολογίας Πολλαπλότητα Πλοηγησιμότητα (navigability)
54
Διαγράμματα Κλάσεων: Πολλαπλότητα Συσχετίσεων
Οδηγεί Πρόσωπο Αυτοκίνητο Η πολλαπλότητα αναφέρεται στα άκρα των συσχετίσεων. Ακριβώς ένα 1 Ένα ή περισσότερα 1..* Κανένα ή περισσότερα * Κανένα ή ένα 0..1 1 0..1 Κάθε πρόσωπο οδηγεί 0 ή 1 αυτοκίνητο. Κάθε αυτοκίνητο οδηγείται από ακριβώς 1 πρόσωπο. Οδηγεί Πρόσωπο Αυτοκίνητο 1 * Κάθε πρόσωπο οδηγεί 0 ή περισσότερα αυτοκίνητα. Κάθε αυτοκίνητο οδηγείται από ακριβώς 1 πρόσωπο. Οδηγεί Πρόσωπο Αυτοκίνητο 1..* 1..* Κάθε πρόσωπο οδηγεί 1 ή περισσότερα αυτοκίνητα. Κάθε αυτοκίνητο οδηγείται από 1 ή περισσότερα πρόσωπο.
55
Διαγράμματα Κλάσεων: Πολλαπλότητες Συσχετίσεων (συνέχεια)
1 Ακριβώς ένα 10 Ακριβώς δέκα * Κανένα, ένα ή περισσότερα 1..* Ένα ή περισσότερα 1..10 Ένα έως δέκα
56
Διαγράμματα Κλάσεων: πλοηγησιμότητα συσχετίσεων
Σε μία γραμμή συσχέτισης σημειώνουμε ένα βέλος αν μπορούμε να πλοηγηθούμε προς αυτό το άκρο της συσχέτισης όταν γνωρίζουμε το άλλο Αν δεν σημειώνουμε καθόλου πλοηγησιμότητα, δεν παρέχεται εγγύηση ότι υπάρχει. Περιλαμβάνει Παραγγελία Προϊόν 0..* 1..* 0..* Κάνει 1 Πελάτης
57
Διαγράμματα Κλάσεων: Γενίκευση
Η γενίκευση παραπέμπει στην κληρονομικότητα. Η κλάση Β είναι υποκλάση της κλάσης Α. Η υποκλάση κληρονομεί ιδιότητες συσχετίσεις και λειτουργίες της υπερκλάσης. Μία υποκλάση μπορεί να επανορίσει (override) λειτουργίες της υπερκλάσης της, ενώ μπορεί να προσθέσει και ιδιότητες. Α Β
58
Διαγράμματα Κλάσεων: Γενίκευση
Σχήμα Κύκλος Παραλληλόγραμμο Τρίγωνο Τετράγωνο
59
Αφηρημένες κλάσεις Οι αφηρημένες κλάσεις είναι κλάσεις που εξυπηρετούν την εννοιολογική ομαδοποίηση των κλάσεων που γενικεύουν και τον ορισμό της διεπαφής των κλάσεων αυτών Οι αφηρημένες κλάσεις ΔΕΝ μπορούν να δημιουργήσουν αντικείμενα αυτό γίνεται μόνο στις υποκλάσεις Οι λειτουργίες στη διεπαφή των αφηρημένων κλάσεων μπορεί να είναι και αυτές αφηρημένες (abstract) , δηλαδή λειτουργίες για τις οποίες δεν παρέχεται υλοποίηση, ενώ κάποιες άλλες συγκεκριμένες (concrete – παρέχεται υλοποίηση) Η υλοποίηση των αφηρημένων λειτουργιών πρέπει να παρέχεται από τις υποκλάσεις της αφηρημένης κλάσης
60
Αφηρημένες κλάσεις -συμβολισμοί
Το όνομα μιας αφηρημένης κλάσης ή λειτουργίας συμβολίζεται: Παραθέτοντας τον συμβολισμό {abstract} δίπλα από το όνομα Χρησιμοποιώντας πλάγια γράμματα (μπορεί να είναι δυσδιάκριτα) Shape {abstract} Shape Αφηρημένη κλάση color: Color position: Point color: Color position: Point draw() {abstract} erase() {abstract} move(newPos: Point): Shape draw() erase() move(newPos: Point): Shape Αφηρημένες & συγκεκριμένες λειτουργίες Square sideLength: float Ορισμός των αφηρημένων μεθόδων της υπερκλάσης draw() erase()
61
Πακέτα Τα πακέτα βοηθούν στην οργάνωση των μοντέλων της UML για να αυξηθεί η αναγνωσιμότητά τους Μπορούμε να χρησιμοποιήσουμε τον μηχανισμό πακέτων της UML για να οργανώσουμε τις κλάσεις σε υποσυστήματα Κάθε πολύπλοκο σύστημα μπορεί να αποσυντεθεί σε υποσυστήματα, όπου κάθε υποσύστημα μοντελοποιείται ως ένα πακέτο Account Bank Customer
62
Μοντελοποίηση των κλάσεων στην πράξη
Μελετούμε τη γενική περιγραφή του συστήματος τις περιπτώσεις χρήσης, οι οποίες αντανακλούν τις απαιτήσεις του συστήματος εξετάζουμε και συνοδευτικά έγγραφα των απαιτήσεων όπως το λεξικό δεδομένων, το γλωσσάρι, κ.λπ. Συζητούμε Με τους χρήστες του συστήματος … και βρίσκουμε κλάσεις και λειτουργίες
63
Παράδειγμα ανάδειξης κλάσεων
«Σε ένα τραπεζικό σύστημα οι πελάτες δημιουργούν τραπεζικούς λογαριασμούς. Οι πελάτες μπορούν να πραγματοποιούν καταθέσεις και αναλήψεις χρημάτων. Το τραπεζικό σύστημα καταγράφει κάθε δοσοληψία κατάθεσης ή ανάληψης χρημάτων και ενημερώνει το υπόλοιπο του λογαριασμού του πελάτη. Ένας πελάτης μπορεί να εξυπηρετείται από τραπεζικά υποκαταστήματα. Μπορεί επίσης να πραγματοποιεί καταθέσεις ή αναλήψεις μετρητών μέσω των ΑΤΜ της τράπεζας. Μπορεί να αιτείται και να λαμβάνει από την τράπεζα μία κάρτα ανάληψης μετρητών. Η κάρτα που παραλαμβάνει συνδέεται με κάποιον από τους λογαριασμούς της επιλογής του.» Ερώτημα: Ποιες είναι οι κλάσεις για το παραπάνω πρόβλημα;
64
Παράδειγμα ανάδειξης κλάσεων
«Σε ένα τραπεζικό σύστημα οι πελάτες δημιουργούν τραπεζικούς λογαριασμούς. Οι πελάτες μπορούν να πραγματοποιούν καταθέσεις και αναλήψεις χρημάτων. Το τραπεζικό σύστημα καταγράφει κάθε δοσοληψία κατάθεσης ή ανάληψης χρημάτων και ενημερώνει το υπόλοιπο του λογαριασμού του πελάτη. Ένας πελάτης μπορεί να εξυπηρετείται από τραπεζικά υποκαταστήματα. Μπορεί επίσης να πραγματοποιεί καταθέσεις ή αναλήψεις μετρητών μέσω των ΑΤΜ της τράπεζας. Μπορεί να αιτείται και να λαμβάνει από την τράπεζα μία κάρτα ανάληψης μετρητών. Η κάρτα που παραλαμβάνει συνδέεται με κάποιον από τους λογαριασμούς της επιλογής του.» Οι σημαντικές έννοιες του προβλήματος είναι με έντονη γραφή.
65
Κλάσεις Τραπεζικού Συστήματος
Οι βασικές κλάσεις είναι ο πελάτης, ο λογαριασμός, η δοσοληψία, η ανάληψη, η κατάθεση, και η κάρτα Customer Account Transaction Withdrawal Deposit Card
66
Ανάδειξη κλάσεων Εξετάζουμε τις λειτουργίες που πρέπει να παρέχει μία κλάση Account Deposit() Withdraw() GetBalance()
67
Ανάδειξη κλάσεων: Ιδιότητες
Οι ιδιότητες μίας κλάσης περιγράφουν τα δεδομένα των αντικειμένων της Βασικό στοιχείο των ιδιοτήτων είναι οι τύποι Όταν η τιμή μίας ιδιότητας έχει ιδιαίτερη σημασία τότε αποφεύγουμε τους πρωταρχικούς τύπους δεδομένων (String, Integer, Boolean) αλλά δημιουργούμε νέους απλούς τύπους Οι απλοί τύποι ορίζονται ως κλάσεις Οι απλοί τύποι χρησιμοποιούν την έννοια της αφαίρεσης (abstraction)
68
Μοντέλα Πεδίου: Ιδιότητες
Customer Account Card surname name phone balance accountNo cardNo pin expiryDate declaredMissing /active Transaction Το αν είναι ενεργή η κάρτα προκύπτει από την ημερομηνία λήξης και τη δήλωση απώλειας date amount
69
Ανάδειξη κλάσεων: Συσχετίσεις
Για τον καθορισμό των συσχετίσεων μεταξύ των κλάσεων αναζητούμε τη δυνατότητα γνώσης των αντικειμένων μίας κλάσης από μία άλλη Όταν καθορίζουμε τις συσχετίσεις ορίζουμε και τις πολλαπλότητες στα άκρα τους.
70
Συσχετίσεις Τραπεζικού Συστήματος
Το απεικονιζόμενο μοντέλο των εννοιολογικών κλάσεων δηλώνει ότι ένας πελάτης μπορεί να έχει κανένα, έναν ή περισσότερους τραπεζικούς λογαριασμούς, ενώ ένας λογαριασμός θα πρέπει να ανήκει σε έναν μόνο πελάτη (αν γνωρίζουμε τον πελάτη πρέπει να γνωρίζουμε και τους λογαριασμούς του και αντίστροφα). Μία τραπεζική δοσοληψία αφορά ένα λογαριασμό, ενώ σε ένα λογαριασμό μπορούν να γίνουν καμία, μία ή περισσότερες τραπεζικές δοσοληψίες. Customer Account Card 1 * 1 * 1 1 1 * * * Deposit Transaction Withdrawal
71
Ανάδειξη κλάσεων: Συσχετίσεις
Εύρεση ταξονομιών Card * linkedTo Account Customer Balance accountNo * performedOn Has Name * Deposit() Transaction Withdraw() GetBalance() CustomerId() Savings Account Checking Account Mortgage Account Deposit Withdrawal Withdraw() Withdraw() Withdraw()
72
Ανάδειξη κλάσεων: αναθεώρηση
Ξαναβλέπουμε τις κλάσεις, τις λειτουργίες, τις συσχετίσεις και τις ιδιότητες και αναθεωρούμε το μοντέλο μέχρις ότου καταλήξουμε σε ένα μοντέλο που να καλύπτει πλήρως τις απαιτήσεις Πιθανώς να χρειαστεί να εκτελέσουμε αναθεωρήσεις και μετά τη σύνταξη άλλων διαγραμμάτων π.χ. των διαγραμμάτων ακολουθίας.
73
Διαγράμματα Κλάσεων: Συνάθροιση ή Συσσωμάτωση
Η συνάθροιση ή συσσωμάτωση (aggregation) είναι μία ειδική μορφή συσχέτισης. Είναι μία συσχέτιση όλου – τμήματος. Η κλάση Α αναπαριστά το «όλο» και η κλάση Β το «τμήμα» Δεν επιτρέπονται «κύκλοι» συναθροίσεων - συσσωματώσεων Η διάκριση από τη συσχέτιση έχει περισσότερο εννοιολογικό χαρακτήρα: για να υπάρχει το «όλο» πρέπει οπωσδήποτε να υπάρχει και το «τμήμα». Αν πάψει να υπάρχει το όλον, τα τμήματα εξακολουθούν να υφίστανται Α Β
74
Διαγράμματα Κλάσεων Συνάθροιση - Συσσωμάτωση
Διαγράμματα Κλάσεων Συνάθροιση - Συσσωμάτωση Μία ομάδα αποτελείται από ποδοσφαιριστές Ο κάθε ποδοσφαιριστής ανήκει σε μία ομάδα Σημασιολογική ερμηνεία: «Η ομάδα δεν έχει έννοια χωρίς τους παίκτες» Αν η ομάδα πάψει να υπάρχει, οι παίκτες εξακολουθούν να υπάρχουν 1 1..* Ομάδα Ποδοσφαιριστής ΈχειΣτιςΤάξειςΤης ΛαμβάνειΤεχνικέςΣυμβουλές ΤεχνικόςΔιευθυντής
75
Διαγράμματα Κλάσεων: Σύνθεση
Η σύνθεση (composition) είναι μία ισχυρή μορφή συσσωμάτωσης Το όλο ελέγχει πλήρως τα τμήματά του και ιδιαίτερα τον κύκλο ζωής τους. Π.χ. η διαγραφή ενός αντικειμένου «όλου» διαγράφει και τα τμήματά του. Η πρόσβαση σε κάποιο «τμήμα» γίνεται αποκλειστικά μέσω του «όλου» Κάθε «τμήμα» ανήκει μόνο σε ένα «όλον» Α Β
76
Διαγράμματα Κλάσεων Σύνθεση
Η εταιρεία αποτελείται από τμήματα Όπως και στη συνάθροιση, δεν νοείται η εταιρεία χωρίς τα τμήματά της Σε αντίθεση με τη συνάθροιση, ούτε τα τμήματα νοούνται χωρίς την εταιρεία Ο έξω κόσμος δεν έχει πρόσβαση στο τμήμα παρά μόνο μέσω της Εταιρείας. 1 1..* Εταιρεία Τμήμα Περιλαμβάνει
77
Μοντελοποίηση κλάσεων: Απλοί Τύποι
Οι απλοί τύποι μπορεί να είναι Ατομικά δεδομένα που συνοδεύονται από κανόνες επαλήθευσης ή αποτελούνται από υποτμήματα. Π.χ ταχυδρομικοί κωδικοί, ημερομηνίες, αριθμοί τηλεφώνου, αριθμοί πιστωτικοί καρτών, διευθύνσεις IP, κ.τ.λ. Σύνθετα δεδομένα με εννοιολογική ενότητα όπως. π.χ Βάρος ή ύψος (με διαφορετικές μονάδες μέτρησης), χρήματα, εύρη ημερομηνιών Απλές απαριθμήσεις, π.χ. οι ημέρες της εβδομάδας, τα χρώματα. Χρησιμοποιούνται οι απαριθμήσεις της UML Ομαδοποίηση ατομικών δεδομένων που απαρτίζουν μία εννοιολογική οντότητα,. π.χ. ταχυδρομικές διευθύνσεις
78
Απλοί Τύποι - Παραδείγματα
Address ΤαχυδρΚώδικας Διεύθυνση Διάρκεια String ταχΚωδ: String οδός: String αριθμός: String ταχΚωδ : ZipCode αρχή: Date τέλος: Date isValid: Boolean isValid: Boolean Ποσότητα Χρήματα ποσότητα: BigDecimal μονάδα: Unit ποσό: float νόμισμα: Currency plus(other: Quantity): Quantity minus(other: Quantity): Quantity times(factor: BigDecimal): Quantity dividedBy(divisor: BigDecimal): Quantity … plus(other: Money): Money minus(other: Money): Money times(factor: BigDecimal): Money dividedBy(divisor: BigDecimal): Money convertTo(othCurrency: Currency): Money ...
79
Μοντέλο Πεδίου Τραπεζικού Συστήματος με Απλούς Τύπους
Οι τύποι ορισμένων ιδιοτήτων του μοντέλου, είναι απλοί τύποι που ορίζονται ως κλάσεις ( Address, Address, ZipCode) Πελάτης Address Διεύθυνση επώνυμο όνομα Address διεύθυνση: Address String οδός: String αριθμός: String ταχΚωδ : ZipCode ΤαχυδρΚώδικας ταχΚωδ: String
80
Απλοί Τύποι και Συσχετίσεις
Εναλλακτικά τους απλούς τύπους μπορούμε να τους εμφανίσουμε και ως συσχετίσεις (απλές ή συναθροίσεις/συσσωματώσεις ή συνθέσεις). Πελάτης 1 Address επώνυμο όνομα String ΤαχυδρΚώδικας Διεύθυνση * 1 ταχΚωδ: String οδός: String αριθμός: String 1
81
Μοντέλο Πεδίου Τραπεζικού Συστήματος με ιδιότητες
1 * Πελάτης Λογαριασμός επώνυμο: String όνομα: String Address αριθΛογ: AccountId /υπόλοιπο: Money 1 * 1 1 Κάρτα * Διεύθυνση αριθΚάρτας: CardId pin: String ημερομΛήξης: Date δήλωσηΑπώλειας: Boolean /ενεργή:Boolean Δοσοληψία οδός: String αριθμός: String πόλη: String ΤΚ: ΤαχυδρΚώδικας ημερομηνία: Date ποσό: Money
82
Διάκριση ιδιοτήτων και κλάσεων
Μερικές φορές η χρήση «String» μοιάζει φυσική αλλά το σωστό είναι να χρησιμοποιήσουμε κλάση Αν χρειαζόμαστε περιορισμένο λεξιλόγιο ή ελέγχους, πολλαπλές συσχετίσεις ή λειτουργίες, μάλλον πρέπει να επιλέξουμε κλάση Στις ιδιότητες προσέχουμε να μην επαναλαμβάνουμε πληροφορία Βιβλίο Διεύθυνση Σφάλμα: ο εκδοτικός οίκος είναι κλάση τίτλος: String εκδοτικόςΟίκος: string isbn: ISBN έκδοση: int έτοςΕκδοσης: int ... διεύθυνσηΟικίας διεύθυνσηΕπικοινωνίας 1 * Δανειζόμενος Σφάλμα: ο τίτλος είναι περιττός Αντίτυπο * 1 δανείζεται επώνυμο: String όνομα: String Address αριθΕισαγωγής: Int τίτλος: String
83
Διαγράμματα Κλάσεων Αυτοσυσχέτιση
Υπάρχει και η δυνατότητα αυτοσυσχέτισης. Η αυτοσυσχέτιση του σχήματος παράγει ιεραρχία αντικειμένων (στο επίπεδο των αντικειμένων όχι των κλάσεων) Εξαιρετικά χρήσιμη η παρουσία ονομάτων στα άκρα Εποπτεύει Υφιστάμενος * Εργαζόμενος 0..1 Προϊστάμενος
84
Διαγράμματα Κλάσεων: Κλάση Συσχέτισης
Μία κλάση συσχέτισης (association class) αποδίδει ιδιότητες και λειτουργίες σε μία συσχέτιση Η κλάση C είναι η κλάση συσχέτισης των Α και B Χρησιμοποιείται συνήθως σε συσχετίσεις «πολλά προς πολλά» Α Β C
85
Διαγράμματα κλάσεων: Παράδειγμα κλάσης Συσχέτισης
Διαγράμματα κλάσεων: Παράδειγμα κλάσης Συσχέτισης Ένας εργαζόμενος συμμετέχει σε πολλά έργα της εταιρείας που εργάζεται. Ερώτημα: Πώς θα απεικονιστεί το πλήθος των ωρών που απασχολείται σε κάθε έργο και η αρμοδιότητά του σε κάθε έργο; * * Εργαζόμενος Έργο
86
Διαγράμματα κλάσεων Παράδειγμα κλάσης Συσχέτισης
Υπάρχουν δύο λύσεις. Η πρώτη είναι με την κλάση συσχέτισης. Η δεύτερη είναι με «ενδιάμεση» κλάση. Ο περιορισμός της κλάσης συσχέτισης είναι ότι ο υπάλληλος δεν μπορεί να έχει δύο «συμμετοχές» στο ίδιο έργο. Στο συγκεκριμένο παράδειγμα η κλάση συσχέτισης είναι η σωστή λύση 1 * * * Εργαζόμενος Έργο Εργαζόμενος Συμμετοχή ρόλος ώρες * Συμμετοχή ρόλος ώρες Έργο 1 Κλάση συσχέτισης Ενδιάμεση κλάση
87
Διαφορές κλάσης συσχέτισης και παρεμβαλλομένης κλάσης
Οι δύο λύσεις μοιάζουν, αλλά δεν είναι ίδιες. Η χρήση της κλάσης συσχέτισης υπονοεί επιπλέον ότι δεν μπορεί να υπάρξουν δύο αντικείμενα της κλάσης συσχέτισης για τον ίδιο συνδυασμό αντικειμένων των κλάσεων που συσχετίζονται. Στο συγκεκριμένο παράδειγμα η κλάση συσχέτισης Συμμετοχή μάς λέει ότι ένας εργαζόμενος μπορεί να εργάζεται σε διαφορετικά έργα, αλλά δεν μπορεί ταυτόχρονα να έχει δύο συμμετοχές στο ίδιο έργο. Αντίθετα, στη λύση όπου η κλάση Συμμετοχή απλώς παρεμβάλλεται μεταξύ του εργαζομένου και του έργου, επιτρέπεται ένας εργαζόμενος να έχει πολλές συμμετοχές στο ίδιο έργο με διαφορετικούς ίσως ρόλους και ώρες απασχόλησης. Έτσι στις συσχετίσεις πολλά-προς-πολλά, ανάλογα με τη σημασιολογία που προκύπτει από το πρόβλημα, επιλέγεται η κλάση συσχέτισης ή η παρεμβαλλόμενη κλάση
88
Προσδιοριστές (qualifiers)
Οι προσδιοριστές εξειδικεύουν μία συσχέτιση, ορίζοντας το γνώρισμα (ή τα γνωρίσματα) των οποίων οι τιμές ορίζουν το σύνολο των αντικειμένων που συσχετίζονται με ένα αντικείμενο μέσω της συσχέτισης Παράδειγμα 1: Αν κάθε άσκηση έχει μοναδικό αριθμό εντός ενός κεφαλαίου, αυτό μπορεί να εκφραστεί με τη βοήθεια ενός προσδιοριστή: 1 0..1 Κεφάλαιο Άσκηση αριθ: Integer Πρακτικά το κάθε στιγμιότυπο της κλάσης «Κεφάλαιο» περιέχει έναν πίνακα από συνδέσμους προς στιγμιότυπα της κλάσης «Άσκηση» Ο πίνακας δεικτοδοτείται από έναν ακέραιο (αριθ: Integer) και επιστρέφει 0 ή 1 στιγμιότυπα της κλάσης «Άσκηση»
89
Γιατί προσδιοριστές; Με προσδιοριστές Χωρίς προσδιοριστές Κεφάλαιο 1
0..1 Άσκηση αριθ: Integer Ένα συγκεκριμένο κεφάλαιο και ένας αριθμός άσκησης οδηγούν σε 0 ή 1 στιγμιότυπα της κλάσης «Άσκηση» Χωρίς προσδιοριστές 1 0..* Κεφάλαιο Άσκηση Γνωρίζουμε μόνο ότι ένα «κεφάλαιο» περιλαμβάνει 0 ή περισσότερα στιγμιότυπα της κλάσης «Άσκηση» Τελικά με τους προσδιοριστές η UML έχει μία έννοια παραπλήσια του «κλειδιού», αλλά μόνο στα πλαίσια ενός συγκεκριμένου αντικειμένου Προσοχή στο (α) ότι αλλάζουν οι πληθικότητες και (β) ο προσδιοριστής ΔΕΝ είναι μέλος της κλάσης προς την οποία δείχνει (εδώ στην Άσκηση) Μπορεί όμως να αποθηκευθεί ως πλεοναστικό γνώρισμα (επόμενη διαφάνεια)
90
Προσδιοριστές ως πλεοναστικά γνωρίσματα
Κεφάλαιο αριθ: Integer 1 {same} 0..1 Άσκηση αριθ: Integer
91
Σημασιολογία πληθικότητας υπό την παρουσία προσδιοριστών
0..1 : κάθε τιμή του γνωρίσματος-προσδιοριστή επιλέγει 1 αντικείμενο αλλά μπορεί και κανένα 1 : κάθε τιμή του γνωρίσματος-προσδιοριστή επιλέγει ακριβώς 1 αντικείμενο. Προφανώς πρέπει το πεδίο ορισμού του γνωρίσματος- προσδιοριστή να είναι πεπερασμένο * : η τιμή του γνωρίσματος-προσδιοριστή επιλέγει πολλά αντικείμενα Η πληθικότητα είναι ανά τιμή του γνωρίσματος- προσδιοριστή!
92
Τύπος δεδομένου προσδιοριστών
Δεν είναι απαραίτητο να είναι ακέραιος Η «φυσική» υλοποίηση για τους προσδιοριστές με τύπο «ακέραιο» είναι ένας πίνακας (ειδικότερα αν η αρίθμηση ξεκινάει από το 0 ή το 1 και αυξάνεται κατά μία μονάδα σε κάθε βήμα) Για προσδιοριστές με τύπο συμβολοσειράς μπορεί να επιλεγεί άλλη δομή αναπαράστασης (π.χ. πίνακας κερματισμού ή δένδρο αναζήτησης).
93
Παράδειγμα προσδιοριστή-πληθικότητας-τύπου
Στο σύστημα αρχείων του Unix το όνομα ενός αρχείου αποθηκεύεται στον κατάλογο όπου αυτό περιέχεται Ένας κατάλογος μπορεί να περιέχει ένα αρχείο με ένα συγκεκριμένο όνομα ή όχι Ένα όνομα μπορεί να βρίσκεται σε οποιοδήποτε πλήθος καταλόγων Directory filename: String 0..* 0..1 File
94
Περιορισμοί Μπορεί να ορισθεί ότι δύο συσχετίσεις είναι αμοιβαίως αποκλειόμενες πρόσωποΙδιοκτήτης Πρόσωπο λογαριασμός Λογαριασμός {xor} λογαριασμός Εταιρεία εταιρείαΙδιοκτήτης
95
Περιορισμοί Μπορεί να οριστεί ότι μία συσχέτιση υπονοεί μία άλλη: ΜέλοςΤης * * Πρόσωπο Επιτροπή {subset} 1 ΠρόεδροςΤης * Όπως και τα γνωρίσματα, και οι συσχετίσεις μπορούν να σημειωθούν ως: changeable (εξ ορισμού χαρακτηρισμός) addOnly (μπορούν μόνο να προστεθούν σύνδεσμοι) frozen (καμία αλλαγή)
96
Διεπαφές Οι διεπαφές (interfaces) είναι μηχανισμοί των σύγχρονων γλωσσών προγραμματισμού όπως η Java για τη δημιουργία ενός «πακέτου» συμπεριφοράς Οι κλάσεις που υλοποιούν κάποια διεπαφή ορίζουν όλες πολυμορφικά την ίδια συμπεριφορά Μία διεπαφή μπορεί να θεωρηθεί ως μία κλάση χωρίς πεδία όπου όλες οι πράξεις είναι αφηρημένες.
97
Διεπαφές έναντι αφηρημένων κλάσεων (1/2)
Οι διεπαφές της Java μοιάζουν με τις αφηρημένες κλάσεις, αλλά παρουσιάζουν και σημαντικές διαφορές που είναι: Οι αφηρημένες κλάσεις μπορεί να έχουν πεδία, ενώ οι διεπαφές όχι. Οι αφηρημένες κλάσεις μπορεί να έχουν αφηρημένες λειτουργίες, δηλαδή χωρίς υλοποίηση, αλλά μπορεί να έχουν και συγκεκριμένες λειτουργίες που κληρονομούνται από τις υποκλάσεις. Οι διεπαφές δηλώνουν τις υπογραφές των λειτουργιών, χωρίς να παρέχουν καμία υλοποίηση Συνακόλουθα, ενώ οι υποκλάσης μιας αφηρημένης κλάσης μπορούν να επανορίζουν λειτουργίες, οι κλάσεις που υλοποιούν μία διεπαφή ορίζουν τις λειτουργίες εξ αρχής Οι αφηρημένες κλάσεις δηλώνουν κατασκευαστές, ενώ οι διεπαφές όχι Η ορατότητα μίας διεπαφής για τη Java μπορεί να είναι μόνο δημόσια ή προκαθορισμένη (πακέτο) Οι λειτουργίες μίας αφηρημένης κλάσης μπορεί να έχουν ορατότητα προστατευμένη ή ιδιωτική, ενώ οι λειτουργίες που δηλώνει μία διεπαφή έχουν δημόσια ορατότητα.
98
Διεπαφές έναντι αφηρημένων κλάσεων (2/2)
Οι διεπαφές της Java μοιάζουν με τις αφηρημένες κλάσεις, αλλά παρουσιάζουν και σημαντικές διαφορές που είναι (συνέχεια): Μία κλάση μπορεί να υλοποιεί (και δεν κληρονομεί) μία ή περισσότερες διεπαφές. Η κλάση θα πρέπει να παρέχει την υλοποίηση για τις μεθόδους που δηλώνει μία διεπαφή, να παρέχει δηλαδή την υλοποίηση της διεπαφής Αντίθετα μία κλάση που κληρονομεί από μία αφηρημένη κλάση μπορεί να μην υλοποιεί μερικές μεθόδους, καθιστώμενη και αυτή αφηρημένη με τη σειρά της
99
Διεπαφές - Σύνοψη Επομένως, μία διεπαφή έχει περισσότερο το χαρακτήρα μίας δήλωσης. Δηλώνει υπογραφές (signatures) μεθόδων στις οποίες μία κλάση θα πρέπει να συμμορφώνεται σε περίπτωση που υλοποιεί τη διεπαφή. Οι διεπαφές είναι και το βασικό αντίδοτο για τις γλώσσες προγραμματισμού που δεν υποστηρίζουν την πολλαπλή κληρονομικότητα. Μία κλάση μπορεί να είναι υποκλάση μίας και μόνο κλάσης, ενώ μπορεί να υλοποιεί πολλές διεπαφές.
100
Διεπαφές – Συμβολισμός υλοποίησης διεπαφής
Υλοποίηση διεπαφής – το όνομα της διεπαφής σημειώνεται δίπλα από κύκλο <<interface>> ΜεταφορικόΜέσο Αυτοκίνητο ΜεταφορικόΜέσο travelTo(dest: Destination) ΜεταφορικόΜέσο Πλοίο Αυτοκίνητο Πλοίο Υλοποίηση διεπαφής – διάστικτη γραμμή από κλάση προς τη διεπαφή
101
Οι δύο συμβολισμοί της UML για την παροχή και χρήση διεπαφής
<<interface>> ΜεταφορικόΜέσο Χρήση διεπαφής Πρόσωπο travelTo(dest: Destination) Πρόσωπο Παροχή και χρήση διεπαφής Πρόσωπο Αυτοκίνητο Κλάση που υλοποιεί τη διεπαφή Πρόσωπο Αυτοκίνητο
102
<<interface>> <<interface>>
Γενίκευση διεπαφών Οι διεπαφές μπορούν να οργανώνονται και σε ιεραρχίες με χρήση γενίκευσης <<interface>> ΜεταφορικόΜέσο Γενίκευση διεπαφής travelTo(dest: Destination) <<interface>> Όχημα Αυτοκίνητο travelTo(dest: Destination) Υλοποίηση διεπαφής
103
Συνύπαρξη διεπαφών και αφηρημένων κλάσεων
<<interface>> Όχημα <<interface>> ΜεταφορικόΜέσο travelTo(dest: Destination) travelTo(dest: Destination) Αυτοκινούμενο {abstract} Αυτοκίνητο Φορτηγό Πλοίο
104
Διαγράμματα αντικειμένων
Εμφανίζουν κάποιο στιγμιότυπο των αντικειμένων και των σχέσεών τους Τα αντικείμενα είναι στιγμιότυπα των κλάσεων Εμφανίζουμε και τις συγκεκριμένες τιμές που λαμβάνουν οι ιδιότητες Οι σύνδεσμοι είναι στιγμιότυπα των συσχετίσεων Συνδέουν τα αντικείμενα μεταξύ τους Γιάννης: Student : Student Ανώνυμο αντικείμενο lastName = ‘Νικολάου’ firstName = ‘Γιάννης’ lastName = ‘Πέτρου’ firstName = ‘Γιώργος’ : Πρόσωπο : Αντικείμενο
105
Διαγράμματα Αντικειμένων - Αντικείμενα
Διαγράμματα Αντικειμένων - Αντικείμενα Ο συμβολισμός των αντικειμένων είναι όμοιος με το συμβολισμό των κλάσεων με τη διαφορά ότι το τμήμα του ονόματος είναι υπογραμμισμένο Τυπική σύνταξη αντικειμένου όνομα_αντικειμένου : όνομα_κλάσης Για ανώνυμα αντικείμενα : όνομα_κλάσης Οι ιδιότητες των κλάσεων έχουν πλέον και τιμές Σε ένα διάγραμμα αντικειμένων απεικονίζουμε ένα δίκτυο αντικειμένων για κάποια χρονική στιγμή
106
Χρήση Διαγραμμάτων Αντικειμένων
Επαλήθευση διαγραμμάτων κλάσεων Εμφάνιση σχέσεων για τις οποίες τα διαγράμματα κλάσεων δεν επαρκούν – για παράδειγμα ιεραρχικές σχέσεις αντικειμένων
107
Χρήση Διαγραμμάτων Αντικειμένων
Το διάγραμμα κλάσεων μας δίνει μία γενική δομή μίας ιεραρχίας Το διάγραμμα αντικειμένων μας δίνει την ίδια την ιεραρχία Εποπτεύει Υφιστάμενη * Διάγραμμα κλάσεων Οργανωτική μονάδα 0..1 Προϊστάμενη Διάγραμμα αντικειμένων Βιβλιοθήκη: Οργανωτική μονάδα Αναγνωστήριο: Οργανωτική μονάδα Τμήμα Βιβλίων: Οργανωτική μονάδα Τμήμα Επιστημονικών Περιοδικών: Οργανωτική μονάδα
108
Από την διατύπωση του προβλήματος στον κώδικα
Διατύπωση προβλήματος: σε ένα χρηματιστήριο υπόκεινται σε διαπραγμάτευση μετοχές εταιρειών, με κάθε μία να αναπαρίσταται από ένα σύμβολο Διάγραμμα κλάσεων: StockExchange * * Company Lists tickerSymbol Κώδικας Java public class StockExhange { private Vector<Company> m_Company = new Vector Vector<Company> (); } public class Company { public int m_tickerSymbol; private Vector<StockExchange> m_StockExchange = new Vector<StockExchange>(); Οι συσχετίσεις απεικονίζονται σε γνωρίσματα (ανάλογα με την πλοηγισιμότητα!)
109
Παραγωγή κώδικα Java από UML
public class Component { } public class Leaf extends Component { } public class Composite extends Component { private Collection<Component> components; … } * Component Leaf Composite
110
Διαγράμματα ακολουθίας – βασική σημειογραφία
Τα διαγράμματα ακολουθίας αναπαριστούν τη συμπεριφορά του συστήματος με τη μορφή μηνυμάτων μεταξύ διαφορετικών αντικειμένων : Student : Portal : Blog αντικείμενο navigateToBlog() show() pushAddButton() showEntryForm() μήνυμα edit() submit() <<create>> : BlogEntry setProperties() Προδιαγραφή εκτέλεσης update() Γραμμή ζωής
111
Γραμμή ζωής και προδιαγραφή εκτέλεσης
Μία γραμμή ζωής αναπαριστά έναν συγκεκριμένο συμμετέχοντα (ή αντικείμενο) στη διάδραση Απεικονίζεται με ένα ορθογώνιο που αναπαριστά το αντικείμενο, το οποίο ακολουθείται από μία κάθετη γραμμή που αναπαριστά τον χρόνο ζωής του συμμετέχοντα Μία προδιαγραφή εκτέλεσης καθορίζει μία συμπεριφορά ή διάδραση εντός της γραμμής ζωής Απεικονίζεται ως ένα ορθογώνιο πάνω από τη γραμμή ζωής
112
Μηνύματα Τα μηνύματα ορίζουν μία συγκεκριμένη επικοινωνία μεταξύ γραμμών ζωής σε μία διάδραση Παραδείγματα επικοινωνίας: Αποστολή ενός σήματος Κλήση μιας λειτουργίας Δημιουργία ή καταστροφή ενός στιγμιοτύπου Καθορίζουν (έμμεσα) τον αποστολέα και τον παραλήπτη Απεικονίζονται με τη μορφή μιας γραμμής από τον αποστολέα προς τον παραλήπτη Η μορφή της γραμμής και του τόξου αντικατοπτρίζουν τις ιδιότητες του μηνύματος
113
Είδη μηνύματος Ασύγχρονο Σύγχρονο Απόκριση Απωλεσθέν Ευρεθέν
Κλήση λειτουργίας και δημιουργία αντικειμένου Απόκριση Απωλεσθέν γνωστή η αποστολή αλλά όχι η παραλαβή – συνήθως ερμηνεύεται ότι η παραλαβή είναι εκτός του πεδίου του συστήματος Ευρεθέν Γνωστή η παραλαβή αλλά όχι η αποστολή
114
Διαγράμματα ακολουθίας
Η έμφαση είναι στον έλεγχο ροής Χρησιμοποιούνται στην ανάλυση για: Εκλέπτυνση των περιπτώσεων χρήσης Εύρεση πρόσθετων αντικειμένων που έχουν διαλάθει Χρησιμοποιούνται στον σχεδιασμό για: Εκλέπτυνση των διεπαφών TicketMachine Passenger selectZone() insertCoins() TicketMachine pickupChange() selectZone() insertCoins() pickupChange() pickUpTicket() pickUpTicket()
115
Διαγράμματα ακολουθίας και ροή δεδομένων
Τα διαγράμματα ακολουθίας μπορούν επίσης να δείχνουν τη ροή των δεδομένων Οι αφετηρίες των τόξων δείχνουν την ενεργοποίηση των μηνυμάτων Οι διάστικτες γραμμές δείχνουν ροή δεδομένων, π.χ. επιστροφή αποτελεσμάτων ZoneButton FareCatalogue Display Passenger selectZone() lookupFare(selection) fare Ροή δεδομένων displayFare(fare)
116
Διαγράμματα ακολουθίας: επαναλήψεις και συνθήκες
Οι επαναλήψεις δηλώνονται με έναν αστερίσκο πριν από το μήνυμα Οι συνθήκες εντός αγκυλών πριν το μήνυμα MoneyProcessor CoinIdentifier Display CoinDrop Passenger * insertMoney(coin) lookupCoin(coin) coinValue Επανάληψη displayPrice(owedAmount) [owedAmount<0] returnChange(-owedAmount) Συνθήκη
117
Δημιουργία και καταστροφή
Η δημιουργία αντικειμένου συμβολίζεται με ένα μήνυμα που δείχνει στο αντικείμενο (ή με ένα μήνυμα <<create>> και θέτοντας τη γραμμή ζωής να ξεκινά από το συγκεκριμένο σημείο) Η καταστροφή αντικειμένου συμβολίζεται με ένα «Χ» και τερματισμό της γραμμής ζωής Σε περιβάλλοντα με συλλογή απορριμμάτων, η καταστροφή δηλώνει το τέλος της χρήσης του αντικειμένου MoneyProcessor Passenger createTicket(selection) Ticket print() free() X
118
Ιδιότητες διαγραμμάτων ακολουθίας
Τα διαγράμματα ακολουθίας της UML αναπαριστούν συμπεριφορά σε όρους διαδράσεων Είναι χρήσιμα για τον προσδιορισμό ή τον εντοπισμό αντικειμένων ή λειτουργιών που λείπουν Είναι χρονοβόρα στην κατασκευή τους, αλλά αξίζουν τον κόπο Συμπληρώνουν τα διαγράμματα κλάσεων (που αναπαριστούν τη δομή)
119
Διαγράμματα μηχανής καταστάσεων
Αρχική κατάσταση Συμβάν πάτημαΚουμπιού2 πάτημαΚουμπιού1&2 Αναβόσβησε ώρες Αύξησε ώρες μετάβαση πάτημαΚουμπιού1 πάτημαΚουμπιού1&2 κατάσταση πάτημαΚουμπιού2 Αύξησε λεπτά Αναβόσβησε λεπτά πάτημαΚουμπιού1 Σταμάτα να αναβοσβήνεις Αναβόσβησε δευτερόλεπτα πάτημαΚουμπιού2 Αύξησε δευτερόλεπτα Τελική κατάσταση Αναπαριστά τη συμπεριφορά ενός μοναδικού αντικειμένου την οποία κρίνουμε ενδιαφέρουσα.
120
Διαγράμματα δραστηριότητας
Διαγράμματα συμπεριφοράς με έμφαση στη ροή ελέγχου Δείχνουν την ακολουθιακή ή παράλληλη ροή δραστηριοτήτων αναπαριστώντας τη ροή εκτέλεσης (workflow) OXI μόνο στο λογισμικό αλλά και γενικότερα Υπάρχουν από την UML 2 και μετά Ένα διάγραμμα δραστηριότητας αποτελείται από κόμβους και ακμές Υπάρχουν τρία είδη κόμβων δραστηριότητας Κόμβοι ελέγχου Εκτελέσιμοι κόμβοι Πιο συνηθισμένος: Action (ενέργεια) Κόμβοι αντικειμένων π.χ. ένα έγγραφο Μία ακμή είναι μία κατευθυνόμενη σύνδεση μεταξύ κόμβων Δύο βασικοί τύποι ακμών Ακμές ροής ελέγχου Ακμές ροής αντικειμένων
121
Σύμβολα κόμβων ελέγχου σε διαγράμματα δραστηριότητας
Κόμβος έναρξης Κόμβος ολοκλήρωσης δραστηριότητας Κόμβος ολοκλήρωσης ροής Κόμβος διακλάδωσης (διχάλα - fork) Κόμβος συνένωσης (join) Κόμβος απόφασης Κόμβος συγχώνευσης
122
Σύμβολα κόμβων δραστηριότητας και αντικειμένων
Κόμβος ενέργειας Κόμβος αντικειμένου Συγγραφή εργασίας Εργασία Διόρθωση εργασίας
123
Παράδειγμα διαγράμματος δραστηριότητας
Ακμή ροής ελέγχου διακλάδωση Αρχικός κόμβος Κόμβος απόφασης [παραγγελία δεκτή] Παραλαβή παραγγελίας Εκτέλεση παραγγελίας [παραγγελία όχι δεκτή] Αποστολή παραγγελίας Κλείσιμο παραγγελίας Αποδοχή πληρωμής Πραγματοποίηση πληρωμής Αποστολή τιμολογίου Ακμή ροής αντικειμένου Τιμολόγιο συνένωση
124
Διαγράμματα Δραστηριότητας: Ακίδες
Οι ακίδες (pins) είναι ένας εναλλακτικός συμβολισμός των κόμβων αντικειμένων Ένας κόμβος ενέργειας μπορεί να έχει πολλές ακίδες εξόδου και πολλές ακίδες εισόδου Αν μία ενέργεια έχει ακίδες εισόδου, πρέπει οι ακίδες εισόδου να έχουν τιμές προκειμένου να ξεκινήσει η εκτέλεση της ενέργειας Παραγγελία Δημιουργία παραγγελίας Παραλαβή παραγγελίας Παραγγελία Τιμολόγιο Τιμολόγιο Αποστολή τιμολογίου Εξόφληση τιμολογίου Ακίδες
125
Διαγράμματα παράταξης
Τα διαγράμματα παράταξης (deployment diagrams) παρουσιάζουν το πραγματικό περιβάλλον στο οποίο λειτουργεί το λογισμικό. Ένα διάγραμμα παράταξης παρουσιάζει συσκευές του υλικού και τις φυσικές μονάδες λογισμικού που διανέμονται στο υλικό. Τα διαγράμματα παράταξης είναι ένα μέσο για την τεκμηρίωση της φυσικής αρχιτεκτονικής του συστήματος. Το βασικό στοιχείο ενός διαγράμματος παράταξης είναι οι κόμβοι (nodes).
126
Διαγράμματα παράταξης – κατηγορίες κόμβων
Η πρώτη κατηγορία των κόμβων είναι οι συσκευές (devices) που αναπαριστούν φυσικές μονάδες επεξεργασίας που αντιστοιχούν στο υλικό. Οι συσκευές έχουν μνήμη και επεξεργαστική ικανότητα. Η δεύτερη κατηγορία των κόμβων είναι τα περιβάλλοντα εκτέλεσης (execution environments). Περιβάλλοντα εκτέλεσης είναι λογισμικό συστημάτων, όπως τα λειτουργικά συστήματα, τα συστήματα διαχείρισης βάσεων δεδομένων κ.ά. Και για τα δύο χρησιμοποιούμε συμβολισμό αντικειμένων και όχι κλάσεων, γιατί μιλάμε για συγκεκριμένα μηχανήματα και τμήματα λογισμικού
127
Διαγράμματα παράταξης
<<device>> : DatabaseServer <<executionEnvironment>> : LinuxOS <<executionEnvironment>> : MySQL
128
Μονοπάτια επικοινωνίας στα διαγράμματα παράταξης
Οι κόμβοι επικοινωνούν μεταξύ τους μέσω μονοπατιών επικοινωνίας (communications paths) και απεικονίζουν τυπικά διασύνδεση μέσω δικτύου. Τα μονοπάτια επικοινωνίας είναι εξειδίκευση των συσχετίσεων και συμβολίζονται με απλές γραμμές <<device>> : DatabaseServer <<executionEnvironment>> : LinuxOS : MySQL <<device>> : ApplicationServer <<executionEnvironment>> : LinuxOS : Tomcat 7
129
Προϊόντα στα διαγράμματα παράταξης
Ένας κόμβος μπορεί να περιέχει ένα προϊόν (artifact) το οποίο είναι μία διακριτή φυσική οντότητα του λογισμικού και το οποίο είναι συνήθως ένα αρχείο. Ένα προϊόν μπορεί να είναι ένα εκτελέσιμο αρχείο, ένα αρχείο ρυθμίσεων, σελίδες HTML κ.ά. Ένα προϊόν φέρει τη λέξη-κλειδί «artifact» ή ένα εικονίδιο που παρουσιάζεται στο σχήμα της επόμενης διαφάνειας Οι κόμβοι περιέχουν προϊόντα (artifacts) που είναι οι φυσικές μονάδες λογισμικού, όπως είναι τα εκτελέσιμα αρχεία, τα αρχεία jar, τα αρχεία war, αρχεία ρυθμίσεων, σελίδες HTML κ.λπ.
130
Συμβολισμοί για τα προϊόντα στα διαγράμματα παράταξης
Συμβολισμός 1: με τη λέξη-κλειδί <<artifact>> Συμβολισμός 2: με εικονίδιο εντός του πλαισίου <<artifact>> libraryLogic.war libraryLogic.war
131
Ένα συνολικό διάγραμμα παράταξης
<<device>> : ApplicationServer <<device>> : RemotePC <<executionEnvironment>> : Apache 2 <<executionEnvironment>> : Browser <<executionEnvironment>> : Tomcat 7 libraryLogic.war <<device>> : LocalPC <<device>> : DatabaseServer <<executionEnvironment>> : Browser <<executionEnvironment>> : MySQL
132
Ένα συνολικό διάγραμμα παράταξης
Το διάγραμμα της προηγούμενης διαφάνειας εμφανίζει μία αρχιτεκτονική τριών επιπέδων (3- tier architecture). Ένα επίπεδο είναι η βάση δεδομένων Ένα επίπεδο είναι ο εξυπηρέτης διαδικτύου Ένα επίπεδο είναι οι υπολογιστές των χρηστών με τα προγράμματα πλοήγησης
133
Προδιαγραφές παράταξης
Ένα διάγραμμα παράταξης μπορεί να έχει μία προδιαγραφή παράταξης <<device>> : ApplicationServer << deployment spec>> libspec.xml <<executionEnvironment>> : Apache 2 <<executionEnvironment>> : Tomcat 7 <<artifact>> libraryLogic.war <<deploy>> libraryLogic.war
134
Διαγράμματα διάδρασης
Νέα έννοια του αποσπάσματος διάδρασης Διάδραση είναι ένα κομμάτι συμπεριφοράς που εστιάζεται στην παρατηρήσιμη ανταλλαγή πληροφορίας μεταξύ αντικειμένων που μπορούν να συνδέονται Υπάρχουν 4 είδη διαγραμμάτων διάδρασης: Διαγράμματα ακολουθίας Διαγράμματα επικοινωνίας Συνδυασμός πληροφοριών από τα διαγράμματα κλάσεων, περιπτώσεων χρήσης, και ακολουθίας. Μοιάζουν με τα διαγράμματα ακολουθίας, αναπαριστώντας πιο εύληπτα το ποιός επικοινωνεί με ποιόν, ενώ τα διαγράμματα ακολουθίας δίνουν καλύτερα τη σειρά των μηνυμάτων Διαγράμματα επισκόπησης αλληλεπίδρασης Μοιάζουν με τα διαγράμματα δραστηριότητας, ωστόσο κάθε κόμβος ενέργειας μπορεί να αναλύεται περαιτέρω χρησιμοποιώντας οποιοδήποτε τύπο διαγράμματος διάδρασης Διαγράμματα χρονισμού Εστιάζει στους χρονικούς περιορισμούς. Μοιάζει με διάγραμμα ακολουθίας περιεστραμμένο κατά 900 ώστε ο οριζόντιος άξονας να είναι ο χρόνος
135
Διαδράσεις Οι διαδράσεις στη UML χρησιμοποιούνται κυρίως στην ανάλυση για να κατανοήσουμε καλύτερα τις διαδράσεις μεταξύ των αντικειμένων Χρησιμοποιούνται επίσης κατά τον λεπτομερή σχεδιασμό, ειδικότερα αν απαιτείται ακριβής διαδιεργασιακή επικοινωνία βασισμένη σε τυπικά πρωτόκολλα Μπορούν επίσης να χρησιμοποιηθούν κατά τον έλεγχο για να περιγράψουν την επιθυμητή συμπεριφορά του συστήματος και να τη συγκρίνουμε έτσι με την παρατηρούμενη συμπεριφορά
136
Παράδειγμα διάδρασης: διάγραμμα ακολουθίας
Όνομα διάδρασης (sd: πλαίσιο διάδρασης) sd UserAccepted +PIN: Integer {readonly 0 <= PIN <= 9999} Τοπικό γνώρισμα : User : ATM Code(PIN) Γραμμή ζωής CardOut OK Unlock Το μήνυμα πηγαίνει στο όριο του διαγράμματος. Υποθέτουμε την ύπαρξη μιας πύλης με το όνομα out_Unlock Τα μηνύματα παραδίδονται με σειρά αντίστροφη από αυτή που αποστέλλονται – μπορεί να συμβεί σε ασύγχρονα μηνύματα
137
Παράδειγμα διάδρασης: διάγραμμα επικοινωνίας
138
Παράδειγμα διάδρασης: διάγραμμα επισκόπησης αλληλεπίδρασης
139
Παράδειγμα διάδρασης: διάγραμμα χρονισμού
140
Απόσπασμα διάδρασης Είναι ένα τμήμα μιας διάδρασης
Έχει ακριβώς τη λειτουργικότητα μιας διάδρασης Μπορούμε να έχουμε συνδυασμούς αποσπασμάτων διάδρασης Είναι αποσπάσματα διάδρασης που συνδυάζονται μέσω τελεστών
141
Τελεστές για αποσπάσματα διάδρασης
alt Αντίστοιχο του if then else opt Αντίστοιχο του if then (χωρίς else) par Τα τμήματα εκτελούνται παράλληλα loop Επανάληψη, με δυνατότητα ορισμού ορίων & συνθήκης τερματισμού break Τερματισμός του αποσπάσματος διάδρασης (συνήθως υπό συνθήκη) critical Δύο «critical» στο ίδιο lifeline δεν εκτελούνται ποτέ παράλληλα neg Μηνύματα που η παρουσία τους δείχνει προβλεπόμενη αποτυχία του συστήματος, π.χ. ένα μήνυμα «timeout» σε μία απομακρυσμένη σύνδεση assert Ορίζει μία συνθήκη που πρέπει να ισχύει για να συνεχίσει η διάδραση strict Τα τμήματα εκτελούνται αυστηρά σειριακά seq Όταν έχουμε ενεργοποιήσεις σε διαφορετικά αποσπάσματα και σε διαφορετικές γραμμές ζωής, αυτές μπορεί να γίνουν με οποιαδήποτε σειρά ignore Μηνύματα που θεωρούνται όχι σημαντικά και δεν φαίνονται στο σχήμα π.χ. ignore{get,set} consider Μόνο αυτά τα μηνύματα θεωρούνται σημαντικά και φαίνονται στο σχήμα π.χ. consider{add,delete,remove,update}
142
Παραδείγματα τελεστών
Πιθανώς ατέρμονος βρόχος Ακριβώς 10 επαναλήψεις Από 5 έως 10 επαναλήψεις και εφ’ όσον αληθεύει η συνθήκη
143
Παραδείγματα τελεστών
Εκτέλεσε την αναζήτηση στα google, bing και ask, αν είναι δυνατόν παράλληλα Πρώτα γίνεται αναζήτηση στο google, μετά στο bing και μετά στο yahoo Η αναζήτηση στο google γίνεται παράλληλα με τις άλλες, αλλά αυτή στο bing γίνεται πριν από αυτή στο yahoo
144
Παραδείγματα τελεστών
Πιθανώς να υπάρχουν και μηνύματα get και set, αλλά δεν απεικονίζονται θεωρούμενα μη σημαντικά Τα add και remove δεν θα εκτελεστούν ποτέ ταυτόχρονα Πιθανώς να υπάρχουν και άλλα μηνύματα, αλλά δεν απεικονίζονται Μόνο οι καταστάσεις όπου αληθεύει το t==complete είναι έγκυρες στο σύστημα Αν λάβουμε μήνυμα timeout το σύστημα έχει αποτύχει
145
Χρονικοί περιορισμοί στα διαγράμματα UML
Μπορούμε να ορίσουμε ορισμούς χρονικής διάρκειας Τα μηνύματα με χρονικούς περιορισμούς αναπαρίστανται ως κεκλιμένες γραμμές Από την πλοήγηση μέχρι την επιστροφή της απάντησης μπορούμε να έχουμε από 3 sec έως 5min. Η αποστολή του μηνύματος της αίτησης πρέπει να διαρκέσει λιγότερο από 10 sec
146
Στερεότυπα στη UML Τα στερεότυπα είναι ένας τρόπος επέκτασης υπαρχουσών μετα-κλάσεων Παράδειγμα: <<metaclass>> Class <<stereotype>> Computer os: OperatingSystem osVersion: Integer vendor: String Τα στερεότυπα χρησιμοποιούνται για να φτιάξουμε νέα στοιχεία των μοντέλων που βασίζονται σε υπάρχοντα, αλλά που έχουν εξειδικευμένες ιδιότητες, κατάλληλες για το συγκεκριμένο πρόβλημα (ή σύνολο προβλημάτων) Π.χ. αν μοντελοποιούμε ένα εταιρικό δίκτυο, θέλουμε κλάσεις για δρομολογητές, μεταγωγείς, εκτυπωτές, εξυπηρέτες κ.λπ.
147
Σημειογραφία στερεοτύπων
Είτε με εισαγωγικά πριν το όνομα Είτε με κάποιο γραφικό εντός του συμβόλου Είτε με μόνο το γραφικό <<Computer>> ApplicationServer ApplicationServer ApplicationServer
148
Οδηγίες για στερεότυπα
Η χρήση γραφικών προάγει την αναγνωσιμότητα, ειδικότερα για κοινό που δεν είναι εξοικειωμένο με τη UML Χωρίς να θυσιάζει τη συμβατότητα με τη UML Η κατάχρηση γραφικών μπορεί όμως να έχει τα αντίθετα αποτελέσματα Πρόσθετος φόρτος εκμάθησης των συμβόλων, ειδικότερα αν έχουμε και αφηρημένες έννοιες Μπορούν να οριστούν προφίλ που περιέχουν πολλά στερεότυπα για ένα συγκεκριμένο χώρο (π.χ. προφίλ MARTE για εφαρμογές πραγματικού χρόνου και ενσωματωμένες εφαρμογές) Προσοχή, τα εισαγωγικά δεν σηματοδοτούν πάντα στερεότυπο! «interface», «extend» είναι βασικά στοιχεία της UML!
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.