Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Τεχνολογία Λογισμικού & Ανάλυση Συστημάτων 14/11/2016 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr
Class Diagrams Διαγράμματα Κλάσεων
Άξονες Μοντελοποίησης Λειτουργικότητα functionality Τι κάνει το σύστημα; Ποιες λειτουργίες υποστηρίζει; Ανάλυση απαιτήσεων Περιγραφές από κείμενο Στατικά διαγράμματα Πώς είναι οργανωμένα τα συστατικά του τμήματα; Δυναμική συμπεριφορά Πώς ανταποκρίνεται και από ποιες καταστάσεις περνάει; Δομή structure Συμπεριφορά behaviour
Abstract κλάσεις Παρέχουν κώδικα για κάποιες λειτουργίες ΑΛΛΑ αφήνουν άλλες λειτουργίες χωρίς κώδικα υλοποίησης Οι υποκλάσεις προσδιορίζουν τις χωρίς υλοποίηση λειτουργίες Συγκεκριμένες (concrete) υποκλάσεις Οι συγκεκριμένες υποκλάσεις: κληρονομούν τα συγκεκριμένα και abstact στοιχεία των υπερκλάσεών τους και ταυτόχρονα συγκεκριμενοποιούν παρέχοντας την κατάλληλη υλοποίηση τα abstract στοιχεία
Abstract κλάση με συγκεκριμένη υποκλάση Shape -linecolor : Color Το όνομα της abstract κλάσης και οι abstract λειτουργίες γράφονται με πλάγια γράμματα +draw() Square -upperleft : Point -height : double -width : double Abstract κλάση για ένα «Shape» (σχήμα) Abstract λειτουργία draw() για τη σχεδίαση του σχήματος Η συγκεκριμένη υποκλάση για ένα τετράγωνο (η κλάση «Square») κληρονομεί τα συγκεκριμένα μέρη της κλάσης «Shape» και υλοποιεί τα στοιχεία (τη λειτουργία draw). +draw()
Abstract κλάσεις και Διασύνδεση (interface) Παρέχει ένα σύνολο λειτουργιών οι οποίες είναι στο σύνολο τους abstract Μια διασύνδεση δεν έχει δεδομένα, κατάσταση, αλλά ούτε συσχετίσεις με πλοηγισιμότητα από τη διασύνδεση προς το άλλο άκρο της συσχέτισης ΑΥΤΟ αποτελεί συνέπεια της έλλειψης δεδομένων η πλοηγησιμότητα συνεπάγεται την υποχρέωση της γνώσης των αντικειμένων της συσχετιζόμενης κλάσης και άρα ύπαρξη δεδομένων.
Abstract κλάσεις και Διασύνδεση (interface) Κάποια κλάση που πραγματοποιεί (realizes) τη διασύνδεση έχει την υποχρέωση να υλοποιήσει όλες τις λειτουργίες της διασύνδεσης Το "κέρδος" για την κλάση είναι ότι τα αντικείμενά της θα έχουν τον τύπο της διασύνδεσης και επομένως θα μπορούν να χρησιμοποιηθούν όπου αναμένονται αντικείμενα του τύπου της διασύνδεσης Κλάσεις που δεν έχουν καμία σχέση μεταξύ τους (π.χ. δεν ανήκουν στην ίδια ιεραρχία τύπων) μπορούν να υλοποιήσουν μια διασύνδεση και να ωφεληθούν από λειτουργίες που ενεργούν σε αντικείμενα αυτής της διασύνδεσης.
Abstract κλάσεις και Διασύνδεση (interface) Σχέση Πραγματοποίησης/Υλοποίησης (Realization/implements) Σε μία σχέση πραγματοποίησης, μία οντότητα (διεπαφή) καθορίζει μια λειτουργικότητα και οι άλλες οντότητες (κλάσεις) υλοποιούν αυτή τη λειτουργικότητα
Abstract κλάσεις και Διασύνδεση (interface) Συμβολισμός στη UML 1. Σύμβολο κλάσης και λέξη-κλειδί «Interface» πάνω από το όνομα της κλάσης Διαμέρισμα ιδιοτήτων: ή δεν υπάρχει ή είναι κενό Μια κλάση που υλοποιεί τη διασύνδεση συσχετίζεται με αυτήν με το σύμβολο της πραγματοποίησης (realization), όπως στη γενίκευση, αλλά με γραμμή που είναι διακεκομμένη 2. Ένας μικρός άδειος κύκλος με το όνομα της διασύνδεσης κάτω από τον κύκλο Η πραγματοποίηση της διασύνδεσης με την κλάση απεικονίζεται με μία γραμμή που συνενώνει την κλάση που πραγματοποιεί τη διασύνδεση με το μικρό άδειο κύκλο που συμβολίζει τη διασύνδεση
Abstract κλάσεις και Διασύνδεση (interface) Μία διασύνδεση που υλοποιείται με το συμβολισμό της κλάσης και δύο κλάσεις που πραγματοποιούν τη διασύνδεση
Abstract κλάσεις και Διασύνδεση (interface) Εναλλακτικός συμβολισμός για να δείξουμε ότι η κλάση «Baby» υλοποιεί τη διασύνδεση «CryingObject». Εξαιτίας της ομοιότητάς του με γλυφιτζούρι (lollipop), ο συμβολισμός αυτός αναφέρεται ορισμένες φορές και ως συμβολισμός lollipop.
Abstract κλάσεις και Διασύνδεση (interface) Μία κλάση μπορεί να πραγματοποιεί περισσότερες από μία διασυνδέσεις Άλλες κλάσεις μπορεί να είναι εξαρτημένες από υποσύνολα αυτών των διασυνδέσεων (π.χ. κάποια κλάση ενδέχεται να χρησιμοποιεί λειτουργίες μόνο από μία διασύνδεση μιας άλλης κλάσης, η οποία πραγματοποιεί περισσότερες από μία διασυνδέσεις)
Abstract κλάσεις και Διασύνδεση (interface) Η κλάση «Baby» υλοποιεί τη διασύνδεση «CuteObject», που παρέχει τη λειτουργία takepicture (φωτογράφιση από φωτογραφική μηχανή) Ένα αντικείμενο της κλάσης «Speaker» ελέγχει την ένταση του κλάματος του μωρού χρησιμοποιώντας τη διασύνδεση «CryingObject» Ένα αντικείμενο της κλάσης «Camera» φωτογραφίζει το μωρό χρησιμοποιώντας τη διασύνδεση «CuteObject»
Abstract κλάσεις και Διασύνδεση (interface) Οι κλάσεις «Speaker» και «Camera» μπορούν να ελέγξουν τον ήχο και να πάρουν φωτογραφίες οποιωνδήποτε αντικειμένων υλοποιούν τις διασυνδέσεις «CryingObject» και «CuteObject» ΔΕΝ εξαρτώνται από το αντικείμενο «Baby» Η κλάση «Speaker» λειτουργεί και με ένα αντικείμενο της κλάσης «BluesSinger» επειδή υλοποιεί τη διασύνδεση «CryingObject»
Αφαιρετικές κλάσεις και Διασύνδεση (interface) Διαμερισμός λειτουργιών μιας κλάσης σε διασυνδέσεις και Ελεγχόμενος τρόπος με τον οποίο άλλες κλάσεις εξαρτώνται από συγκεκριμένα υποσύνολα των διασυνδέσεων και μόνο από αυτά Μία από τις σημαντικότερες τεχνικές για την κατασκευή πολύπλοκων συστημάτων λογισμικού ΓΙΑΤΙ??? Εφόσον μία κλάση δεν χρησιμοποιεί όλες τις λειτουργίες μίας άλλης κλάσης αλλά μόνο ένα καλά καθορισμένο υποσύνολο των λειτουργιών αυτών (μόνο αυτές τις λειτουργίες που παρέχει η διασύνδεση την οποία χρησιμοποιεί) μπορούμε να ελέγξουμε καλύτερα τη διαδικασία των αλλαγών στο λογισμικό (change management, διαχείριση αλλαγών)
Αφαιρετικές κλάσεις και Διασύνδεση (interface) Αν αλλάξει η μορφή ή η σημασία της λειτουργίας controlvolume, που παρέχει η διασύνδεση «CryingObject»: ΔΕΝ ανησυχούμε για την κλάση «Camera» (η κλάση αυτή δεν χρησιμοποιεί τη διασύνδεση «CryingObject») Ανησυχούμε για πιθανές αλλαγές στην κλάση «Speaker»
Αφαιρετικές κλάσεις και Διασύνδεση (interface) <<interface>> List equals add get implementation (provides interface) Abstract List abstract class equals get add abstract method (no implementation)
Abstract κλάσεις και Διασύνδεση (interface) Μία διασύνδεση δεν περιέχει υλοποίηση λειτουργιών Ενώ μια αφηρημένη κλάση μπορεί να παρέχει και την υλοποίηση κάποιων λειτουργιών. Στις διασυνδέσεις και στις αφηρημένες κλάσεις δεν μπορούν να δηλωθούν αντικείμενα. Μια κλάση που κληρονομεί από μια αφηρημένη κλάση πρέπει να υλοποιήσει όλες τις αφηρημένες λειτουργίες της αφηρημένης υπερκλάσης της διαφορετικά θα είναι και αυτή αφηρημένη.
Συνοψίζοντας... Δομική μοντελοποίηση η πιο καθοριστική όψη της μοντελοποίησης Καθορίζει τα προς αποθήκευση δεδομένα, τον τρόπο υλοποίησης της συμπεριφοράς (τρόπο υλοποίησης των λειτουργιών του συστήματος)... Μοντελοποίηση δομής σταδιακά Αρχικό στάδιο Εντοπισμός σημαντικών εννοιών πεδίου εφαρμογής / Αναγνώριση κλάσεων συστήματος Δήλωσή τους ως κλάσεις, πρόσθεση βασικών γνωρισμάτων και ορισμός συσχετίσεων μεταξύ των κλάσεων ΑΠΟΤΕΛΕΣΜΑ: διάγραμμα κατανοητό από έναν ειδικό του πεδίου εφαρμογής (πελάτη), δεν σχετίζεται με θέματα υλοποίησης ή άλλα τεχνικά θέματα
Συνοψίζοντας... Το διάγραμμα χρήσιμο στην επικοινωνία με τον πελάτη για να: (α) βεβαιωθούμε ότι έχουμε κατανοήσει και μοντελοποιήσει ορθά τον κόσμο της εφαρμογής (β) ζητήσουμε διευκρινήσεις και επιπλέον λεπτομέρειες για κάποια σημεία του (γ) έχουμε ένα κοινό σημείο αναφοράς και συμφωνίας με τον πελάτη
Συνοψίζοντας... Κατά τη μετάβαση από την ανάλυση στη σχεδίαση και υλοποίηση συμπλήρωση και εκλέπτυνση περιγραφής κλάσεων και συσχετίσεών τους (προσθήκη γνωρισμάτων, λειτουργιών,...). Χρήση UML για τη δήλωση των κλάσεων: Kαλή εποπτική εικόνα σχεδίου Έλεγχος για το αν το διάγραμμα καλύπτει τις απαιτήσεις Διερεύνηση εναλλακτικών τρόπων μοντελοποίησης Εντοπισμός λαθών Εύκολη επέκταση αν απαραίτητη Γρήγορες αλλαγές λόγω γραφικού περιβάλλοντος Σε επόμενο στάδιο Εξειδίκευση διαγράμματος κλάσεων βάσει γλώσσας προγραμματισμού
Πηγές Ε. Κιουντούζης, Μεθοδολογίες Ανάλυσης και Σχεδιασμού Πληροφοριακών Συστημάτων,Εκδόσεις Α.Σταμούλη, Αθήνα 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