Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Τεχνολογία Λογισμικού & Ανάλυση Συστημάτων 7/11/2016 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr
Class Diagrams Διαγράμματα Κλάσεων
Άξονες Μοντελοποίησης Λειτουργικότητα functionality Τι κάνει το σύστημα; Ποιες λειτουργίες υποστηρίζει; Ανάλυση απαιτήσεων Περιγραφές από κείμενο Στατικά διαγράμματα Πώς είναι οργανωμένα τα συστατικά του τμήματα; Δυναμική συμπεριφορά Πώς ανταποκρίνεται και από ποιες καταστάσεις περνάει; Δομή structure Συμπεριφορά behaviour
Συσχέτιση γενίκευσης / κληρονομικότητα Ειδική μορφή συσχέτισης, όπου μία γενική κλάση αποτελεί τη βάση για τη δήλωση μίας ή περισσοτέρων ειδικότερων, υπό κάποια έννοια, κλάσεων Η γενική κλάση ονομάζεται υπερκλάση και οι ειδικές κλάσεις ονομάζονται υποκλάσεις Η γενίκευση στις περισσότερες γλώσσες προγραμματισμού υλοποιείται με το μηχανισμό της κληρονομικότητας ή της επέκτασης Η γενική κλάση παρέχει λειτουργίες, ιδιότητες, συσχετίσεις κ.λπ. χρήσιμες σε όλες τις υποκλάσεις Οι υποκλάσεις επεκτείνουν τη λειτουργικότητα της υπερκλάσης και παρέχουν επιπλέον λειτουργίες όπου απαραίτητο ή εξειδικεύουν τη συμπεριφορά τους
Συσχέτιση γενίκευσης Animal Amhibian Mammal Reptile Dog Cat Cow Ο σκύλος, η γάτα, η αγελάδα «είναι ένα είδος» Θηλαστικού
Συσχέτιση γενίκευσης Vehicle Car Boat Sports car Passenger car Truck Sailing boat Motor boat Cargo ship Οι κλάσεις Vehicle, Car και Boat μπορούν να οριστούν ως αφαιρετικές κλάσεις. Μία αφαιρετική κλάση είναι αυτή που δεν έχει αντικείμενα, δεν μπορεί να έχει στιγμιότυπα
Τι κληρονομείται Σε μια ιεραρχία κληρονομικότητας, όλα τα ιδιοχαρακτηριστικά και οι μέθοδοι κληρονομούνται από μια υπερκλάση σε όλες τις υποκλάσεις της. Στο διάγραμμα κλάσεων, προσδιορίζονται μόνο οι νέες ιδιότητες και οι νέες μέθοδοι που έχουν προστεθεί σε αυτές που κληρονομούνται. Παράδειγμα: Οι υπάλληλοι μπορεί να πληρώνονται με την ώρα ή να είναι μισθωτοί.
Προστατευμένες ιδιότητες Συνήθως οι ιδιότητες προσδιορίζονται ως ιδιωτικές (private) για λόγους που επιβάλλει η ενθυλάκωση. Έτσι, οι ιδιότητες είναι ορατές στο εσωτερικό της κλάσης και όχι έξω από αυτή. Στα πλαίσια μιας ιεραρχίας κληρονομικότητας απαιτείται ασθενέστερος περιορισμός της ορατότητας. Για το λόγο αυτό οι ιδιότητες προσδιορίζονται ως προστατευμένες (protected), δηλαδή ως ορατές στο εσωτερικό της κλάσης και σε όλες τις υποκλάσεις της.
Λάθος χρήση κληρονομικότητας Πρέπει πάντοτε να εφαρμόζεται και να ακολουθείται ο κανόνας είναι ένα είδος για την κληρονομικότητα. Τρία συνηθισμένα λάθη: Το τρίγωνο που απεικονίζει την κληρονομικότητα δείχνει προς λάθος κατεύθυνση. Γίνεται χρήση κληρονομικότητας, ενώ θα έπρεπε να γίνει χρήση άλλης σχέσης (συσσώρευσης). Χρήση κληρονομικότητας εκεί που δεν πρέπει, π.χ. κληρονομικότητα της κλάσης Άτομο (Person) από την κλάση Διεύθυνση (Address).
Συσχέτιση γενίκευσης Person -name: String -age: int +setname(name : String) +getname() : String +setage(age : int) +getage() : int +tostring() : String Η κλάση «Person» επεκτείνεται για να δημιουργηθεί η υποκλάση «Student» Η κλάση «Student» κληρονομεί όλες τις ιδιότητες και τις λειτουργίες της από την υπερκλάση της Student -fieldofstudy : String +setfieldofstudy(fieldofstudy : String) +getfieldofstudy() : String +tostring() : String Σύμβολο γενίκευσης: βέλος από την ειδική (απογονική) στη γενική κλάση (γονική)
Συσχέτιση γενίκευσης Person -name: String -age: int +setname(name : String) +getname() : String +setage(age : int) +getage() : int +tostring() : String Προσθέτει επίσης και μία λειτουργία (και την αντίστοιχη ιδιότητα) που επιτρέπει την ανάκτηση του πεδίου σπουδών του φοιτητή (fieldofstudy) Student -fieldofstudy : String +setfieldofstudy(fieldofstudy : String) +getfieldofstudy() : String +tostring() : String
Συσχέτιση γενίκευσης Person -name: String -age: int +setname(name : String) +getname() : String +setage(age : int) +getage() : int +tostring() : String Η κλάση Person» περιέχει λειτουργία που επιστρέφει κάποιες πληροφορίες με μορφή κειμένου (String) για ένα άτομο: tostring Η λειτουργία αυτή δηλώνεται και στην κλάση «Student». Student -fieldofstudy : String +setfieldofstudy(fieldofstudy : String) +getfieldofstudy() : String +tostring() : String
Συσχέτιση γενίκευσης -name: String -age: int +setname(name : String) +getname() : String +setage(age : int) +getage() : int +tostring() : String Student Person -fieldofstudy : String Τι σημαίνει? Η λειτουργία στην κλάση «Student» υπερβαίνει (overrides) τη λειτουργία της κλάσης «Person» για τα αντικείμενα που είναι φοιτητές: όταν δηλαδή καλούμε τη λειτουργία αυτή σε αντικείμενα «Person», τότε αν το αντικείμενο είναι όντως «Person» θα κληθεί η λειτουργία της υπερκλάσης ενώ αν είναι «Student» θα κληθεί η λειτουργία της υποκλάσης +setfieldofstudy(fieldofstudy : String) +getfieldofstudy() : String +tostring() : String
Συσχέτιση γενίκευσης Κλάσεις «Person» και «Student» σε Java Η κλάση «Student» δηλώνεται ως υποκλάση της κλάσης «Person» με τη χρήση της φράσης extends στη δήλωσή της, Η κλάση «Student» υπερβαίνει τη μέθοδο tosiring της υπερκλάσης της δηλώνοντας τη μέθοδο tostring εκ νέου public class Person { protected String name; // όνομα ατόμου private int age; // ηλικία ατόμου // Κατασκευαστής public Person() { }
Συσχέτιση γενίκευσης public void setname(string name) { this.name = name; } // Μέθοδος που θέτει το όνομα public void setage{int age) { // Μέθοδος που θέτει την ηλικία this.age = age; } public String getnameo { // Μέθοδος ανάκτησης του ονόματος return name; } public int getage() {// Μέθοδος ανάκτησης ηλικίας return age; } // Μέθοδος επιστροφής πληροφοριών για το άτομο σε αλφαριθμητ. Μορφή public String tostring() { return "Είμαι ο " + name + " και είμαι" + age + " ετών. " ;
Συσχέτιση γενίκευσης public class Student extends Person { private String fieldofstudy; // To Πεδίο σπουδών του φοιτητή // Μέθοδος ανάθεσης του πεδίου σπουδών public void setfieldofstudy (String fieldofstudy) { this.fieldofstudy = fieldofstudy; } // Μέθοδος ανάκτησης του πεδίου σπουδών public String getfield() { } return fieldofstudy; //Νέα δήλωση (υπέρβαση) της μεθόδου tostring ειδικά για τους φοιτητές public String tostring() { } return "Είμαι ο " + name + " και είμαι " + getage() + " ετών. + "Σπουδάζω " + fieldofstudy; }
Υπερκαλυπτόμενη γενίκευση Vehicle Car Boat Amphibian Η κλάση Amphibian μπορεί να κληρονομήσει χαρακτηριστικά και λειτουργίες από δύο υποκλάσεις οι οποίες κληρονομούν από μία υπερκλάση
Πλήρη γενίκευση Person (complete) Man Woman Σε μία πλήρη γενίκευση δεν επιτρέπεται να προστεθεί άλλη υποκλάση, όλες οι επιτρεπτές υποκλάσεις έχουν οριστεί. Το αντίθετο είναι μία ελλειπής γενίκευση όπου επιπλέον υποκλάσεις επιτρέπεται να προστεθούν στο μέλλον. Συνήθως οι σχέσεις γενίκευσης είναι ελλειπείς.
Συσσώρευση και σύνθεση Συσσώρευση (aggregation) και σύνθεση (composition) : δύο ειδικές περιπτώσεις συσχετίσεων Yποδηλώνουν τη συσχέτιση μίας κλάσης με κάποια άλλη κλάση που αποτελεί μέρος της Συσχέτιση όλου και μερών
Συσσώρευση (Aggregation) Μία κλάση αποτελεί συλλογή από άλλες κλάσεις: «Αποτελείται από» «Περιέχει» «Περιλαμβάνει» «Έχει» Παράδειγμα: PC monitor, keyboard, tower Συμβολίζεται με μια συσχέτιση από το όλο προς το μέρος, στην οποία τοποθετείται ένας άσπρος ρόμβος στην πλευρά του όλου (aggregating entity)
Συσσώρευση (Aggregation) Ο προσωπικός υπολογιστής (η κλάση «PC») αποτελείται από μία οθόνη (κλάση «Monitor»), ένα πληκτρολόγιο (κλάση «Keyboard») και μία κεντρική μονάδα (κλάση «Tower») Monitor PC Keyboard Tower
Συσσώρευση (Aggregation) Wheel Person * members Car * Club Η κλάση «Club» αποτελεί συσσώρευση της κλάσης «Person»
Σύνθεση (Composition) Σε τι διαφέρει από συσχέτιση??? Iσχυρή μορφή συσχέτισης μεταξύ των κλάσεων: το όλο περιέχει αποκλειστικά τα μέρη του, ΔΕΝ ΜΠΟΡΕΙ κάποιο άλλο όλο να περιέχει το ίδιο αντικείμενο το αντικείμενο-τμήμα ανήκει μόνο σε ένα αντικείμενο-όλο! υπάρχει μια σχέση ''ζωής και θανάτου" μεταξύ του όλου και των μερών του: τα μέρη δημιουργούνται και καταστρέφονται ταυτόχρονα με το όλο Συμβολίζεται με μια συσχέτιση από το όλο προς το μέρος, στην οποία τοποθετείται ένας μαύρος ρόμβος στην πλευρά του όλου (aggregating entity)
Συσσώρευση και σύνθεση Σε τι διαφέρουν μεταξύ τους??? Η συσσώρευση χρησιμοποιείται όταν οι επιμέρους κλάσεις έχουν διάρκεια ζωής ανεξάρτητη από τη σύνθετη κλάση! Μία ρόδα μπορεί να υπάρξει και ανεξάρτητα από ένα αυτοκίνητο! Η σύνθεση χρησιμοποιείται όταν οι επιμέρους κλάσεις έχουν διάρκεια ζωής που εξαρτάται και συμπίπτει με αυτή της σύνθετης κλάσης! Δηλαδή, διαγραφή του όλου συνεπάγεται διαγραφή των μερών του!
Σύνθεση (Composition) Ένα πολύγωνο (κλάση «Polygon») συσχετίζεται μέσω σύνθεσης με τα σημεία (κλάση «Point») που αποτελούν τις κορυφές του Polygon corners 3..* Point
Σύνθεση (Composition) Γιατί σύνθεση??? Γιατί ακόμη και στην περίπτωση που δύο πολύγωνα έχουν τις ίδιες γωνίες, εξακολουθούν να είναι δύο διαφορετικά πολύγωνα!!! Polygon corners 3..* Point
Σύνθεση (Composition) Η μετακίνηση σε ένα πολύγωνο θα πρέπει να συνεπάγεται τη μεταβολή των δικών του σημείων, που είναι οι κορυφές του ΟΧΙ, όμως και για κάποιο άλλο πολύγωνο το οποίο τυχαίνει να έχει κάποιες ή όλες τις κορυφές ίδιες!!! Polygon corners 3..* Point
Σύνθεση (Composition) Η διαγραφή ενός πολυγώνου συνεπάγεται τη διαγραφή των σημείων του, που είναι οι δικές του κορυφές ΟΧΙ όμως και για άλλα πολύγωνα που τυχόν έχουν για τις γωνίες τους τις ίδιες τιμές με το πολύγωνο που διαγράφεται Polygon corners 3..* Point
Παράδειγμα με συσσώρευση & σύνθεση
Παράδειγμα με σύνθεση Ένα κτίριο αποτελείται από ένα ή περισσότερα δωμάτια και ένα δωμάτιο μπορεί να αποτελείται από μερικά υποδωμάτια
Σύνθεση... Κανόνας του "part of Αν έχει νόημα να πούμε ότι κάτι είναι μέρος κάποιου άλλου, τότε πολύ πιθανή η σύνθεση! Ένα δωμάτιο είναι μέρος ενός κτιρίου! ΑΛΛΑ μία διεύθυνση δεν είναι μέρος ενός ανθρώπου! If in doubt, leave it out!!!!
Συσσώρευση και σύνθεση Έστω ένα πολύγωνο που αποτελείται από 3 σημεία: p1, p2, p3. Ποιο όμως είναι; Πώς θα δηλώσουμε ότι η σειρά των σημείων έχει σημασία???? Polygon 3..* Point -X:int -Y: int
Συλλογές από πλειότιμα άκρα συσχετίσεων Πλειότιμο άκρο: το πάνω όριο της πολλαπλότητας του άκρου είναι > 1 (π.χ. *) Σημαίνει σύνολο, δηλαδή απουσία σειράς ή διπλοεμφανίσεων (duplicates) Μπορούμε να ορίσουμε τι θέλουμε: {set} : απουσία σειράς, απουσία διπλοεμφανίσεων {ordered set} : τα αντικείμενα έχουν σειρά, απουσία διπλοεμφανίσεων {bag}: επιτρέπονται διπλοεμφανίσεις (ή πολλές εμφανίσεις) αντικειμένων {list} ή {sequence}: τα αντικείμενα έχουν σειρά και μπορεί να υπάρχουν επαναλήψεις
Συλλογές από πλειότιμα άκρα συσχετίσεων {ordered set} : τα αντικείμενα έχουν σειρά, απουσία διπλοεμφανίσεων Polygon 3..* {ordered set} Point -X:int -Y: int
Συλλογές από πλειότιμα άκρα συσχετίσεων Car 3..* {set} Wheels Triangle 3 {set} Point Polygon 3..* {ordered set} Point Rectangle 4 {ordered set} Point Text 1..* {list} Word
Αυτοπαθής συσχέτιση(reflexive association) Μία κλάση μπορεί να συσχετίζεται και με τον εαυτό της με μία αυτοπαθή συσχέτιση. Πώς??? Οι κλάσεις είναι αφαιρέσεις! Η κλάση «Employee» μπορεί να συσχετίζεται με τον εαυτό της μέσω του ρόλου manager/manages Όταν μία κλάση συσχετίζεται με τον εαυτό της: ένα στιγμιότυπο της κλάσης συσχετίζεται με ένα άλλο στιγμιότυπο της ίδιας κλάσης Employee firstname:string lastname:string -manages 0..* 1 -manager Ένα στιγμιότυπο της κλάσης «Employee» μπορεί να είναι ο manager ενός άλλου στιγμιότυπου της κλάσης «Employee» Πολλαπλότητα του ρόλου «manages»: 0..* ΑΡΑ ένας Employee μπορεί ναμην έχει άλλους Employees να κάνει manage
Αυτοπαθής συσχέτιση(reflexive association) Node * * Ένα δίκτυο αποτελείται από πολλούς κόμβους (nodes) που συνδέονται μεταξύ τους -wife Person 1 1 -husband married to Ένας σύζυγος είναι παντρεμένος με τη σύζυγό του Εάν ένας άνθρωπος δεν είναι παντρεμένος, τότε η σχέση married to δεν μπορεί να εφαρμοστεί
Κλάση συσχέτισης (Association Class) Όταν τα γνωρίσματα ή οι λειτουργίες δεν εμφανίζονται σε μία μεμονωμένη κλάση αλλά στη συσχέτιση μεταξύ δύο κλάσεων Τότε κλάση συσχέτισης! Θέλουμε να διατηρήσουμε πληροφορία που είναι συγκεκριμένη για αυτή τη συσχέτιση, αλλά όχι για κάθε μία από τις κλάσεις που συμμετέχουν Class A Class B Class Y
Κλάση συσχέτισης (Association Class) -name -age Person * employment 0..1 Company -name Συσχέτιση Λεπτομέρειες πρόσληψης ενός υπαλλήλου που εργάζεται σε μία εταιρία -name -age Person * employment 0..1 Company -name Κλάση συσχέτισης Employment -salary -startdate -end Date Κλάση συσχέτισης: μπορεί να υπάρχει το πολύ ένα στιγμιότυπο της κλάσης συσχέτισης μεταξύ οποιουδήποτε ζεύγους συσχετισμένων αντικειμένων
Κλάση συσχέτισης (Association Class) Student -name -student# 0..* 1..* Course -name Κλάση συσχέτισης Enrollment -enrollmentdate Enroll Drop Cancel Κλάση συσχέτισης: μπορεί να υπάρχει το πολύ ένα στιγμιότυπο της κλάσης συσχέτισης μεταξύ οποιουδήποτε ζεύγους συσχετισμένων αντικειμένων ανεξάρτητα από πολλαπλότητες και στα δύο άκρα
Προάγοντας την κλάση συσχέτισης σε κανονική κλάση -name -age Person * employment 0..1 Company -name Employment -salary -startdate -end Date Υλοποίηση κλάσης συσχέτισης σε γλώσσες προγραμματισμού /employer * 0..1 Employment Person Company -salary -name 1 0..1 * 1 -startdate -name -age -end Date
Προάγοντας την κλάση συσχέτισης σε κανονική κλάση -name -age Person Ισοδύναμα??? * employment 0..1 Employment -salary -startdate -end Date Company -name ΟΧΙ!!!!!! Αυτό το διάγραμμα δεν μπορεί να αναπαραστήσει την περίπτωση ενός ατόμου που έχει εργαστεί για την ίδια εταιρία σε διαφορετικές περιόδους /employer * 0..1 Employment Person Company -salary -name 1 0..1 * 1 -startdate -name -age -end Date Αυτό μπορεί!
Κλάση συσχέτισης Περιορισμός κλάσεων συσχέτισης Person * knows * Programming Language Level Person 2..* attends * Meeting Role
Κλάση συσχέτισης Man preacher 1 my husband my wife 1 1 Woman performed services 1..* Marriage date place Μονογαμικός γάμος ως κλάση συσχέτισης Η κλάση συσχέτισης είναι πλήρης κλάση Μπορεί να έχει λειτουργίες, ιδιότητες, συσχετίσεις Παράδειγμα η κλάση «Marriage» μπορεί να έχει μία συσχέτιση με την εκκλησία όπου έγινε η τελετή, ή με το άτομο που τέλεσε την τελετή
Κλάση συσχέτισης Man preacher 1 my husband my wife 1..* 1 Woman performed services 1..* Marriage date place Πολυγαμικός γάμος ως κλάση συσχέτισης Τότε θέλουμε περισσότερα στιγμιότυπα της κλάσης συσχέτισης, τόσα όσες οι συσχετίσεις! Δεν μπορούμε να έχουμε 2 στιγμιότυπα του Marriage που να συσχετίζουν ακριβώς τα ίδια αντικείμενα!
Κλάση συσχέτισης Man preacher 1 my husbands my wife 1..* 1 Woman performed services 1..* Marriage date place Πολυγαμικός γάμος ως κλάση συσχέτισης John: Man one: Marriage Mary: Woman Bob: Man two: Marriage
Πηγές Ε. Κιουντούζης, Μεθοδολογίες Ανάλυσης και Σχεδιασμού Πληροφοριακών Συστημάτων,Εκδόσεις Α.Σταμούλη, Αθήνα 2002 Γιάννης Τζίτζικας. Ανάλυση και Σχεδίαση Πληροφοριακών Συστημάτων, Πανεπιστήμιο Κρήτης Shari Lawrence Pfleeger. Τεχνολογία Λογισμικού: Θεωρία και Πράξη, τόμος 1, Κλειδάριθμος, Αθήνα, 2003 Leszek A. Maciaszek, Requirements Analysis and System Design (2nd edition), Addison Wesley, 2005 A.Dennis, B. Haley Wixom, D. Tegarden, Systems Analysis and Design with UML Version 2.0 (2nd edition) Wiley, 2005 Booch G., Rumbaugh J., Jacobson I. Unified Modeling Language User Guide. Addison- Wesley Professional 2 Edition, ISBN 0321267974. Pascal Roques, UML in Practice, John Wiley, 2004 UML Fundamentals & OOAD UML 2.0, www.acm.org Αφροδίτη Τσαλγατίδου. Εισαγωγή στη UML, Καποδιστριακό Πανεπιστήμιο Αθηνών Αντικειμενοστρεφής Ανάπτυξη Λογισμικού με τη UML, επιμέλεια Π. Φιτσιλής, Κλειδάριθμος 2006 Ιωάννης Γαβιώτης. Πληροφοριακά Συστήματα Μοντελοποίηση με UML, Πανεπιστήμιο Αιγαίου www.agilemodeling.com/style/classdiagram.htm http://www.devx.com/enterprise/article/28576