ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.1 Διαχείριση εξαιρέσεων Ι Οι εξαιρέσεις είναι καταστάσεις που οδηγούν σε μη αναμενόμενα αποτελέσματα ή ακόμη και σε «κρέμασμα» του προγράμματος. Όταν μία γλώσσα υποστηρίζει εντολές διαχείρισης εξαιρέσεων και ο προγραμματιστής τις χρησιμοποιεί, τότε το αποτέλεσμα είναι ένα πιο αξιόπιστο πρόγραμμα. Η C++ διαθέτει τρεις λέξεις κλειδιά που η συνδυασμένη χρήση τους μπορεί να καθιστά ένα πρόγραμμα αξιόπιστο. 1. try {... } περικλείει εντολές που η εκτέλεση μιας απ΄ αυτές μπορεί να προκαλέσει εξαίρεση. Σε περίπτωση εξαίρεσης, αντί να οδηγηθεί το πρόγραμμα σε μία μη επιθυμητή κατάσταση ή και κρέμασμα, μπορεί να λειτουργήσει μία εντολή throw που σηματοδοτεί μία εξαίρεση
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.2 Διαχείριση εξαιρέσεων ΙΙ 2. throw έκφραση η εντολή throw σηματοδοτεί μία συγκεκριμένη εξαίρεση στην οποία αντιστοιχεί η τιμή της έκφρασης. Η εντολή throw πρέπει να εκτελείται με ένα block try ή μέσα από συνάρτηση που καλείται από block try 3. catch (έκφραση) {...} To block εντολών που συνοδεύει μία catch κάνει τη διαχείριση του λάθους, που ο τύπος του ταιριάζει στην τιμή της έκφρασης. Η εντολή catch ακολουθεί μία εντολή try.
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.3 Διαχείριση εξαιρέσεων ΙΙI (Παράδειγμα) #include class loss_of_precision_in_division { private: int a, b; public: loss_of_precision_in_division(int x, int y) { a=x; b=y; } int get_a() { return a;} int get_b() { return b;} }; int safe_divide(int a, int b){ if (a%b==0) return a/b; else throw loss_of_precision_in_division(a,b); } int main() { double d; int a,b; cin>>a>>b; try { d=safe_divide(a,b); } catch (loss_of_precision_in_division x){ cout<<"loss of precision in division!” <<endl; cout<<"I will use real division!" <<endl; d=double(x.get_a())/x.get_b(); } cout<<"result: "<<d<<endl; }
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.4 Διαχείριση εξαιρέσεων ΙΙI (Παράδειγμα 2) #include class odd { }; class even { }; int main() { int a; cin >> a; try { if (a<0) a=-a; if (a%2 == 1) throw odd(); else throw even(); } catch (odd i) { cout<<“this number is odd”<<endl; } catch (even i) { cout<<“this number is even”<<endl; } Πολλαπλά throws
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.5 Διαχείριση εξαιρέσεων άγνωστου τύπου try {... } catch (type1 t) {... } //... catch (typen t) {... } //default catch block catch (...) { cout<< “fatal error: program exits” << endl; exit(1); }
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.6 Διαχείριση εξαιρέσεων ΙV #include int main () { try { char * mystring; mystring = new char [10]; if (mystring == NULL) throw "Allocation failure"; for (int n=0; n<=100; n++) { if (n>9) throw n; mystring[n]='z'; } } catch (int i) { cout << "Exception: "; cout << "index " << i << " is out of range" << endl; } catch (char * str) { cout << "Exception: " << str << endl; } return 0; } Πολλαπλά throws Exception: index 10 is out of range
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.7 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση Ι ΕΦΑΡΜΟΓΗ: ΠΡΟΔΙΑΓΡΑΦΕΣ ΛΟΓΙΣΜΙΚΟΥ Σχεδιάστε το λογισμικό υποστήριξης ενός τραπεζικού συστήματος που θα εξυπηρετεί τους ταμίες και τις Αυτόματες Ταμειολογιστικές Μηχανές (ΑΤΜ) ενός τραπεζικού ομίλου. Κάθε τράπεζα διαθέτει το δικό της υπολογιστή για να συντηρεί τους λογαριασμούς και να επεξεργάζεται τις συναλλαγές τους. Οι τερματικοί σταθμοί των ταμείων ανήκουν στην τράπεζα όπου βρίσκονται και επικοινωνούν απευθείας με τον υπολογιστή της τράπεζας. Οι ταμίες εισάγουν δεδομένα λογαριασμών και δεδομένα συναλλαγών. Οι ΑΤΜ επικοινωνούν με τον κεντρικό υπολογιστή που διενεργεί τις συναλλαγές με τις αντίστοιχες τράπεζες. Η ΑΤΜ όταν δέχεται τραπεζική κάρτα, αλληλεπιδρά με το χρήστη, επικοινωνεί με τον κεντρικό υπολογιστή για την εκτέλεση της συναλλαγής, αποδίδει μετρητά και εκτυπώνει αποδείξεις. Το σύστημα απαιτεί κατάλληλη καταγραφή στοιχείων και πρόνοιες ασφάλειας. Επίσης, το σύστημα διαχειρίζεται με σωστό τρόπο ταυτόχρονες προσπελάσεις στον ίδιο λογαριασμό. Οι τράπεζες παρέχουν οι ίδιες το λογισμικό που χρησιμοποιείται στους υπολογιστές τους.
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.8 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΙΙ ΕΦΑΡΜΟΓΗ: ΠΡΟΔΙΑΓΡΑΦΕΣ ΛΟΓΙΣΜΙΚΟΥ (συνέχεια) Εσείς πρέπει να σχεδιάσετε το λογισμικό των ΑΤΜ και του συστήματος. Το κόστος του διαμοιραζόμενου συστήματος επιμερίζεται στις τράπεζες σύμφωνα με των αριθμό των πελατών που διαθέτουν τραπεζικές κάρτες.
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.9 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΙΙΙ - Αναγνώριση αντικειμένων και κλάσεων - Αναγνώριση συνδέσεων μεταξύ των αντικειμένων - Αναγνώριση ιδιοτήτων των αντικειμένων - Οργάνωση και απλοποίηση των κλάσεων αντικειμένων με τη χρήση κληρονομικότητας Αναγνώριση αντικειμένων Στα αντικείμενα περιλαμβάνονται φυσικές οντότητες, όπως σπίτια, εργαζόμενοι κ.α. αλλά και λογικές οντότητες όπως κρατήσεις θέσεων, πρόγραμμα πληρωμών κ.α. Όλες οι κλάσεις πρέπει να έχουν νόημα στο πεδίο της εφαρμογής: αποφεύγονται αντικείμενα όπως συνδετικές λίστες, υπορουτίνες κ.α. Δεν αναφέρονται πάντα όλες οι κλάσεις στις προδιαγραφές της εφαρμογής: κάποιες υπονοούνται ή προκύπτουν από τη γενικότερη γνώση του προβλήματος.
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.10 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΙV Αναγνώριση αντικειμένων (συνέχεια) Οι κλάσεις αντιστοιχούν συνήθως σε ουσιαστικά. Γράψτε μία λίστα από υποψήφιες κλάσεις που προκύπτουν από την περιγραφή του προβλήματος. Στη φάση αυτή δεν μας ενδιαφέρει η κληρονομικότητα ή οι υψηλού επιπέδου abstract κλάσεις. Η οργάνωσή τους σε ευρύτερες κατηγορίες μπορεί γίνεται αργότερα ψάχνοντας τις μεταξύ τους ομοιότητες και διαφορές
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.11 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση V
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.12 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση VΙ Αναγνώριση αντικειμένων (συνέχεια) Απαλείφονται οι κλάσεις που: - είναι πλεονάζουσες - είναι μη σχετικές - είναι ασαφείς - αποτελούν ιδιότητες άλλων κλάσεων - αποτελούν λειτουργίες αντικειμένων - αποτελούν ρόλο που η κλάση παίζει σε μία σύνδεση π.χ. κάτοχος. Μία αποδεκτή κλάση θα ήταν π.χ. ο πελάτης - έχουν σχέση με την υλοποίηση του συστήματος
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.13 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση VΙΙ ΑΠΟΔΕΚΤΕΣ ΚΛΑΣΕΙΣ
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.14 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΙΧ Αναγνώριση συνδέσεων μεταξύ των αντικειμένων Οποιασδήποτε μορφής εξάρτηση μεταξύ δύο ή περισσότερων κλάσεων είναι σύνδεση. Επίσης, σύνδεση είναι και η αναφορά μιας κλάσης σε μία άλλη. Ιδιότητες κλάσεων δεν θα πρέπει να αναφέρονται σε άλλες κλάσεις, αλλά αντί γι΄ αυτό πρέπει να χρησιμοποιούνται συνδέσεις. Όταν σε αυτό το στάδιο της σχεδίασης ανατίθενται σε ιδιότητες αντικειμένων τιμές άλλων αντικειμένων, τότε δε γίνεται εμφανής η σύνδεση μεταξύ των αντικειμένων, όπως θα έπρεπε σε ένα διάγραμμα συνδέσεων. Οι συνδέσεις υλοποιούνται με διάφορους τρόπους, αλλά σε αυτή τη φάση της σχεδίασης δεν μας απασχολεί η υλοποίηση. Οι συνδέσεις εκφράζονται συνήθως με ρήματα ή με φράσεις με ρήματα. Μπορεί να εκφράζουν θέση (δίπλα στο, μέρος του, περιέχεται στο), ενέργειες, επικοινωνία (μιλά στο), κατοχή
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.15 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση Χ Αναγνώριση συνδέσεων μεταξύ των αντικειμένων (συνέχεια) κατοχή (έχει, μέρος του) ή κάποια συνθήκη (δουλεύει για το, είναι παντρεμένος στο, διευθύνει) κ.α. Στο παράδειγμά μας: Φράσεις με ρήματα Το τραπεζικό σύστημα εξυπηρετεί τους ταμίες και τις ΑΤΜ. Οι ΑΤΜ ανήκουν στον τραπεζικό όμιλο. Η τράπεζα διαθέτει έναν Η/Υ τράπεζας. (7) Ο Η/Υ της τράπεζας συντηρεί λογαριασμούς. Ο Η/Υ της τράπεζας επεξεργάζεται συναλλαγές λογαριασμών. Η τράπεζα διαθέτει τερματικό σταθμό ταμείου. (6) Ο τερματικός σταθμός του ταμείου επικοινωνεί με τον Η/Υ της τράπεζας. (8) Ο ταμίας εισάγει συναλλαγές λογαριασμών. (11) Οι ΑΤΜ επικοινωνούν με τον κεντρικό υπολογιστή για τις συναλλαγές. (10)
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.16 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧΙ Φράσεις με ρήματα (συνέχεια) Ο κεντρικός υπολογιστές διενεργεί τη συναλλαγή με την τράπεζα Η ΑΤΜ δέχεται τραπεζική κάρτα. Η ΑΤΜ αλληλεπιδρά με το χρήστη. Η ΑΤΜ αποδίδει μετρητά. Η ΑΤΜ εκτυπώνει αποδείξεις. Το σύστημα διαχειρίζεται ταυτόχρονες προσπελάσεις. Η τράπεζα παρέχει το λογισμικό. Το κόστος επιμερίζεται στις τράπεζες. Ρήματα που εννοούνται Ο όμιλος αποτελείται από τράπεζες. (1) Η τράπεζα διατηρεί τους λογαριασμούς. (2) Ο όμιλος έχει έναν κεντρικό υπολογιστή. (9) Το σύστημα κάνει καταγραφή στοιχείων. Το σύστημα παρέχει ασφάλεια. Οι πελάτες έχουν τραπεζικές κάρτες. (3)
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.17 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧΙΙ Ρήματα που προκύπτουν από τη γνώση του πεδίου της εφαρμογής Η τραπεζική κάρτα έχει προσπέλαση σε λογαριασμούς. (4) Η τράπεζα απασχολεί ταμίες. (5) Απαλείφονται οι συνδέσεις που: - είναι συνδέσεις μεταξύ κλάσεων που έχουν απαλειφθεί - δεν είναι σχετικές ή αφορούν την υλοποίηση του συστήματος - εκφράζουν ενέργειες. Μία σύνδεση πρέπει να εκφράζει δομική ιδιότητα της εφαρμογής και όχι παροδικά γεγονότα. - τριπλές συνδέσεις: οι τριπλές συνδέσεις συνήθως αποσυντίθενται σε διπλές - συναγόμενες συνδέσεις: δεν περιλαμβάνουμε συνδέσεις που προκύπτουν από άλλες συνδέσεις που έχουμε ήδη περιλάβει γιατί θεωρούνται πλεονασματικές συνδέσεις
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.18 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧΙΙΙ Προσδιορίζουμε τη σημασία των συνδέσεων ως εξής: - αποφεύγουμε την περιγραφή του πως ή του γιατί προκύπτει μία κατάσταση. Συνήθως περιγράφουμε το τι είναι μία κατάσταση. Π.χ. «Η τράπεζα συντηρεί λογαριασμούς.» είναι μία ενέργεια. Το αναδιατυπώνουμε ως «Η τράπεζα διατηρεί λογαριασμούς.» - περιορισμένες συνδέσεις (μη μοναδικά ονόματα) π.χ. κωδικοί - αναγνωρίζουμε πολλαπλότητα - συμπληρώνουμε τις συνδέσεις που λείπουν
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.19 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧΙV
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.20 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧV Τύποι συσχετίσεων μεταξύ κλάσεων: - γενίκευση (κληρονομικότητα) - σύνδεση κανονικές συνδέσεις περιλαμβάνει (αποτελείται από) Πώς υλοποιούνται οι συσχετίσεις μεταξύ κλάσεων; Δείτε παραδείγματα από την επόμενη διαφάνεια.
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.21 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧVΙ #include “Book.h” class Person { private: Book the_Book; public: Person(); ~Person();... Book get_the_Book(); void set_the_Book(Book value); }; Book Person::get_the_Book() { return the_Book; } void Person::set_the_Book(Book value){ the_Book = value; } #include “Person.h” class Book { private: Person the_Person; public: Book (); ~Book ();... const Person get_the_Person(); void set_the_Person(Person value); }; Person Book::get_the_Person() { return the_Person; } void Book::set_the_Person(Person value) { the_Person = value; }
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.22 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧVΙΙ #include “Apartment.h” class Person { private: Apartment Residence; public: Person (); ~Person ();... Apartment get_Residence(); void set_Residence(Apartment value); }; #include “Person.h” class Apartment { private: Person Renter; public: Apartment (); ~Apartment ();... Person get_Renter(); void set_Renter(Person value); };
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.23 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧVΙΙI #include “AprtmntB.hpp” class Person { private: ApartmentBuilding Lives_at; public: Person (); ~Person ();... ApartmentBuilding get_Lives_at(); void set_Lives_at(ApartmentBuilding value); }; #include “Person.hpp” class ApartmentBuilding { private: UnboundedSetByValue Houses; public: ApartmentBuilding(); ~ApartmentBuilding();... UnboundedSetByValue get_Houses(); void set_Houses(UnboundedSetByValue value); };
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.24 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧΙX
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.25 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧΧΙ Αναγνώριση ιδιοτήτων των αντικειμένων Ψάχνουμε για ιδιότητες αντικειμένων. Οι ιδιότητες συνήθως αντιστοιχούν σε ουσιαστικά που ακολουθούνται από κτητικές φράσεις του τύπου «το χρώμα του αυτοκινήτου». Επίθετα όπως «κόκκινο» εκφράζουν συνήθως τιμές ιδιοτήτων. Πάντως σε αντίθεση με τις συνδέσεις και τις κλάσεις οι ιδιότητες των αντικειμένων είναι λιγότερο πιθανό να περιγράφονται πλήρως στις προδιαγραφές της εφαρμογής. - παραγόμενες ιδιότητες πρέπει να παραλείπονται π.χ. η «ηλικία» προκύπτει από τη «ημερομηνία γέννησης» - συχνά επιβάλλεται η αναγνώριση ιδιοτήτων σύνδεσης. Έτσι, π.χ. σε μία πολλά προς πολλά σύνδεση μεταξύ των ΜΕΤΟΧΟΣ και ΕΤΑΙΡΕΙΑ υπάρχει η ιδιότητας σύνδεσης «αριθμός μετοχών»
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.26 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧΧΙΙ Αναγνώριση ιδιοτήτων των αντικειμένων (συνέχεια) Απαλείφουμε μη απαραίτητες και λάθος ιδιότητες με βάση τα εξής κριτήρια: - αν έχουν επιλεγεί ως αντικείμενα - αν είναι ιδιότητες σύνδεσης σε μία πολλά προς πολλά σύνδεση - μη σχετική ιδιότητα: μία ιδιότητα που φαίνεται να είναι εντελώς διαφορετική και ότι δε σχετίζεται με τις άλλες ιδιότητες της κλάσης, μπορεί να είναι ένδειξη ότι η κλάση πρέπει να χωριστεί σε δύο διακριτές κλάσεις. Ιδιότητες στο διάγραμμα κλάσεων του παραδείγματος (επόμενη διαφάνεια)
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.27 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧΧΙΙΙ
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Δευτέρα, 30 Ιουνίου 2014Τμ. Πληροφορικής, Α.Π.Θ.28 Αντικειμενοστρεφής Ανάλυση & Σχεδίαση ΧΧΙV Βελτίωση του διαγράμματος κλάσεων με κληρονομικότητα Η κληρονομικότητα μπορεί να ενσωματωθεί στα διάγραμμα κλάσεων με δύο τρόπους: - από κάτω προς τα πάνω με τη γενίκευση των κοινών στοιχείων δύο ή περισσοτέρων κλάσεων σε μία υπερκλάση. Ψάχνουμε για κλάσεις με παρόμοιες ιδιότητες, συνδέσεις ή λειτουργίες. Για παράδειγμα οι κλάσεις ΣΥΝΑΛΛΑΓΗ ΛΟΓΑΡΙΑΣΜΟΥ και ΣΥΝΑΛΛΑΓΗ ΕΞ ΑΠΟΣΤΑΣΕΩΣ. Από την άλλη οι κλάσεις ΚΕΝΤΡΙΚΟΣ ΥΠΟΛΟΓΙΣΤΗΣ και Η/Υ ΤΡΑΠΕΖΑΣ δε μοιάζουν. Γενικά επιτρέπεται να προβούμε σε επανακαθορισμό κάποιων ιδιοτήτων ή ακόμη και κλάσεων αλλά δεν πρέπει αυτό να γίνεται άκριτα. - από πάνω προς τα κάτω με την εξειδίκευση μιας κλάσης σε περισσότερο ειδικές κλάσεις Όταν υπάρχουν ιεραρχίες κλάσεων, οι συνδέσεις και οι ιδιότητες θα ορίζονται στις ειδικές κλάσεις και όχι στις υπερκλάσεις.