06 Αντικειμενοστρεφής ανάλυση και σχεδιασμός Τεχνολογία Λογισμικού Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Εαρινό εξάμηνο 2016 17 Δρ. Κώστας Σαΐδης saiko@di.uoa.gr
Αφαίρεση Abstraction "Η εννοιολογική διαδικασία κατά την οποία προκύπτουν γενικοί κανόνες από την εξέταση επιμέρους παραδειγμάτων." Wikipedia Χρησιμοποιείται σε πολλές επιστήμες. Αποτελεί το κύριο εργαλείο ανάλυσης και σχεδιασμού. 2
Τέσσερις βασικές αρχές αφαίρεσης abstraction principles Το σήμειο που ο αντικειμενοστρεφής προγραμματισμός συνδέεται με την εννοιολογική μοντελοποίηση conceptual modeling και την αναπαράσταση γνώσης knowledge represenation. 3
1. Κατηγοριοποίηση Στιγμιοτύπιση A. Taivalsaari 4
Κατηγοριοποίηση Στιγμιοτύπιση Σχέση του αντικειμένου με την κλάση του και αντίστροφα. Όλα τα αντικείμενα / στιγμιότυπα μιας κλάσης μοιράζονται κοινά και ομοιόμορφα χαρακτηριστικά. Η κλάση είναι το intensional abstraction όλων των δυνατών της αντικειμένων. Στιγμιοτύπιση μιας κλάσης συνήθως μέσω ειδικού τελεστή new. 5
2. Συνάθροιση Ανάλυση A. Taivalsaari 6
Συνάθροιση Ανάλυση Συνάθροιση ή σύνθεση επιμέρους εννοιών για τη σύσταση μιας νέας ξεχωριστής έννοιας. Σχέσεις μέρους όλου part of. Αντικείμενα ως μεταβλητές/πεδία άλλων αντικειμένων. 7
3. Γενίκευση Εξειδίκευση A. Taivalsaari 8
Γενίκευση Εξειδίκευση Σχέση μεταξύ κλάσεων. Η γενική κλάση συγκεντρώνει τα κοινά στοιχεία όλων των εξειδικεύσεών της. Η κληρονομικότητα είναι ο κατεξοχήν μηχανισμός υλοποίησης της εξειδίκευσης. 9
4. Ομαδοποίηση Διαχωρισμός A. Taivalsaari 10
Ομαδοποίηση Διαχωρισμός Ομαδοποίηση αντικειμένων με βάση κάποιο extensional και όχι intensional χαρακτηριστικό. Παραδείγματα; Αγαπημένα του χρήστη user favorites Πιο πρόσφατα / πιο δημοφιλή Αποτελέσματα μιας επερώτησης 11
Unified Modeling Language UML Γλώσσα μοντελοποίησης γενικής χρήσης που στοχεύει στην παροχή ενός καθιερωμένου τρόπου οπτικοποίησης και επικοινωνίας του σχεδιασμού ενός συστήματος. ISO standard 19501:2005 12
UML Διαγράμματα Κλάσεων Συστατικών Δραστηριότητας Περίπτωσης χρήσης Ακολουθίας Υπάρχουν και διάφορα άλλα Object, State, Communication, κ.ά 13
Διάγραμμα κλάσεων 14
Διάγραμμα συστατικών smartdraw.com 15
Διάγραμμα δραστηριότητας 1ο Παράδειγμα 2ο Παράδειγμα 16
Διάγραμμα περίπτωσης χρήσης By Kishorekumar 62, CC BY SA 3.0, https://commons.wikimedia.org/w/index.php?curid=7880320 17
Διάγραμμα ακολουθίας 18
Πρόσθετες σχεδιαστικές αρχές design principles Πώς να δομήσουμε και να υλοποιήσουμε τις αφαιρέσεις abstractions 19
Μην επαναλαμβάνεσαι Don't Repeat Yourself "Every piece of knowledge must have a single, unambiguous, authoritative representation within a system." A. Thomas, D. Hunt 20
Λίστα αναγνωσμάτων 13. Andrew Hunt, David Thomas, "The Pragmatic Programmer: From Journeyman to Master", The Pragmatic Bookshelf, 1999, 978 0 2016 1622 4. 21
Μόνο μια φορά Once and Only Once Αρχή του Extreme Programming XP Each and every declaration of behavior should appear Once and Only Once. 22
DRY vs WET : WET: We Enjoy Typing ή Waste Everybody's Time 23
Εφαρμογή της αρχής DRY στην πράξη Η επανάληψη duplication αυξάνει την τυχαία/τεχνητή πολυπλοκότητα του συστήματος accidental complexity. Οπουδήποτε στον κύκλο ζωής του λογισμικού υπάρχουν "χειροκίνητες" διαδικασίες, θα πρέπει να αυτοματοποιούνται π.χ. μέσω build system, scripting, κ.ά.. Αν προκύπτουν επαναλήψεις στη λογική, κάπου απαιτείται η προσθήκη μιας νέας αφαίρεσης. 24
Σύνολο αρχών S.O.L.I.D. Single responsibility S Open/closed Ο Liskov substitution L Interface segregation Ι Dependency inversion D 25
Μοναδική ευθύνη Κάθε κλάση/συστατικό πρέπει να έχει μία και μοναδική ευθύνη. A class should have only one reason to change. 26
Ανοικτή/κλειστή κλάση Κάθε κλάση/συστατικό πρέπει να είναι ανοικτή σε επεκτάσεις π.χ. προσθήκη νέων πεδίων ή μεθόδων. Κάθε κλάση/συστατικό πρέπει να είναι κλειστή και οριοθετημένη έτοιμη προς χρήση από τρίτα συστατικά. 27
Δυνατότητα αντικατάστασης Αν το S είναι υποτύπος του Τ τότε όλα τα αντικείμενα του δεύτερου θα πρέπει να μπορούν να αντικατασταθούν με αντικείμενα του πρώτου χωρίς να αλλοιωθεί κανένα από τα επιθυμητά χαρακτηριστικά του συστήματος. Strong behavioral subtyping. 28
Επιμερισμός διεπαφών Κανένα συστατικό δεν πρέπει να εξαρτάται από μεθόδους που δε χρησιμοποιεί. Χρήση μικρών και διαφορετικών interfaces για τη θέσπιση των διεπαφών μεταξύ συστατικών. 29
Ανιστροφή εξαρτήσεων Τα υψηλού επιπέδου συστατικά δεν πρέπει να εξαρτώνται από τα χαμηλού επιπέδου συστατικά. Και τα δύο θα πρέπει να εξαρτώνται από κοινές αφαιρέσεις. Οι αφαιρέσεις δεν πρέπει να εξαρτώνται από λεπτομέρειες. Οι λεπτομέρειες θα πρέπει να εξαρτώνται από τις αφαιρέσεις. 30
Πρότυπα σχεδίασης design patterns Σε επόμενη διάλεξη 31