Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Αντικειμενοστρεφής Προγραμματισμός Object-Oriented Programming Δρ. Σκάρλας Λάμπρος Πάτρα 2008-2009 14-10-08 Lecture 1.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Αντικειμενοστρεφής Προγραμματισμός Object-Oriented Programming Δρ. Σκάρλας Λάμπρος Πάτρα 2008-2009 14-10-08 Lecture 1."— Μεταγράφημα παρουσίασης:

1 Αντικειμενοστρεφής Προγραμματισμός Object-Oriented Programming Δρ. Σκάρλας Λάμπρος Πάτρα Lecture 1

2 Αντικειμενοστρεφής Προγραμματισμός Τι είναι: Μοντέλο προγραμματισμού -> Ένας τρόπος σκέψης Τυπικός ορισμός: Η αντικειμενοστρέφεια (object-orientation) είναι μία προσέγγιση στην ανάπτυξη λογισμικού που οργανώνει τόσο το πρόβλημα όσο και τη λύση του ως μία συλλογή από διακριτά αντικείμενα. Τα αντικείμενα αλληλεπιδρούν για την επίλυση του προβλήματος Eight Queens Problem

3 Αντικειμενοστρεφής Προγραμματισμός Ιστορία: 1967: Simula67 (Νορβηγία) -> πρώτη αντικειμενοστρεφής γλώσσα ’70: Smalltalk (Palo Alto, CA) -> κάθε στοιχείo ένα αντικείμενο Αρχές ’80: o αντικειμενοστρεφής τρόπος σκέψης εισάγεται σε ακαδημαϊκούς κύκλους ’80: C++ (Stroustrup, AT&T): σοβαρή, αποδοτική γλώσσα, πρότυπο στη βιομηχανία 1995: Java (Sun Microsystems)

4 Αντικειμενοστρεφής Προγραμματισμός Αποδοχή: Υψηλότατη τα τελευταία χρόνια Λόγοι: • Επιτυχής επίλυση προβλημάτων μικρής όσο και μεγάλης κλίμακας (scalability) • Προσομοιάζει τις τεχνικές καθημερινών προβλημάτων • Πολλές διαθέσιμες γλώσσες • Πολλές διαθέσιμες βιβλιοθήκες • Μόδα !!! • Η λανθασμένη αντίληψη ότι αν κάποιος γνωρίζει C, μπορεί εύκολα να μάθει C++

5 Αντικειμενοστρεφής Προγραμματισμός Επηρεάζουν οι γλώσσες τον τρόπο σκέψης ? Παράδειγμα Εσκιμώων: πολλαπλές λέξεις για την έννοια χιόνι (Μία κοινότητα ατόμων με κοινά ενδιαφέροντα αναπτύσσει εξειδικευμένο λεξιλόγιο) Δεν αντιλαμβάνονται οι Εσκιμώοι με διαφορετικό τρόπο τον κόσμο. Με κατάλληλη εκπαίδευση θα μπορούσαν και άλλοι να διακρίνουν διάφορες μορφές χιονιού. Οι υπόλοιπες γλώσσες όμως δεν μας οδηγούν προς αυτή την κατεύθυνση Προσοχή: Απλώς και μόνο η χρήση μιας αντικειμενοστρεφούς γλώσσας δεν οδηγεί στην ανάπτυξη αντικειμενοστρεφών προγραμμάτων

6 Αντικειμενοστρεφής Προγραμματισμός Παράδειγμα Ένας φοιτητής γενετικής αντιμετώπιζε το πρόβλημα ανάλυσης DNA. (εύρεση σχήματος μήκους m) Ο φοιτητής χρησιμοποίησε FORTRAN, που είναι μεν γρήγορη, αλλά η επίλυση του προβλήματος απαιτούσε πολύ χρόνο !!

7 Αντικειμενοστρεφής Προγραμματισμός Ο φοιτητής ζήτησε βοήθεια από κάποιον άλλο, που ήταν χρήστης της APL (γνωστής για την μικρή ταχύτητά της) Ωστόσο ο δεύτερος φοιτητής έλυσε το πρόβλημα σε λίγα λεπτά (αντί για ώρες) Οργάνωσε τα δεδομένα σε πίνακα με n γραμμές και m στήλες

8 Αντικειμενοστρεφής Προγραμματισμός στη συνέχεια ταξινόμησε τις γραμμές του πίνακα. Επαναλαμβανόμενο σχήμα = συνεχόμενες γραμμές με ίδιες τιμές T G G A C C Η γλώσσα προγραμματισμού επηρεάζει τον τρόπο επίλυσης: Στη γλώσσα APL η ταξινόμηση είναι πολύ ευκολότερη από ότι στη FORTRAN

9 Ένας τρόπος θεώρησης του κόσμου Chris θέλει να στείλει λουλούδια στην Mary ChrisFred bla Mary

10 Ένας τρόπος θεώρησης του κόσμου O μηχανισμός για την επίλυση του προβλήματος περιλαμβάνει την εύρεση ενός διαμεσολαβητή και τη μεταφορά σε αυτόν ενός μηνύματος (message). Είναι ευθύνη του Fred να ικανοποιήσει την επιθυμία του Chris. Προφανώς υπάρχει κάποια μέθοδος (method) για την επίτευξη του σκοπού. Ωστόσο, ο Chris, δεν χρειάζεται να γνωρίζει τον τρόπο με τον οποίο ο ανθοπώλης θα στείλει τα λουλούδια. Η πληροφορία αυτή, που δεν αφορά τον Chris, είναι υπό μία έννοια κρυμμένη. Ο ανθοπώλης ενδεχομένως να αλληλεπιδρά με διάφορα άλλα άτομα (προμηθευτές, άλλους ανθοπώλες, courier)

11 Ένας τρόπος θεώρησης του κόσμου Ένα αντικειμενοστρεφές πρόγραμμα είναι δομημένο ως ένα σύνολο αλληλεπιδρώντων διαμεσολαβητών, που ονομάζονται αντικείμενα. Κάθε αντικείμενο έχει τον δικό του διακριτό ρόλο. Κάθε αντικείμενο παρέχει μία υπηρεσία η οποία χρησιμοποιείται από άλλα μέλη του συνόλου.

12 Ένας τρόπος θεώρησης του κόσμου Η αλυσιδωτή αντίδραση ξεκίνησε από μία αίτηση ChrisFred bla Μία λειτουργία ενεργοποιείται στον αντικειμενοστρεφή προγραμματισμό με την μετάδοση ενός μηνύματος σε ένα αντικείμενο το οποίο είναι υπεύθυνο για αυτή τη λειτουργία. Το μήνυμα κωδικοποιεί την αίτηση για μία λειτουργία και συνοδεύεται από τυχόν επιπρόσθετες πληροφορίες (παραμέτρους) που απαιτούνται για την εκτέλεση της λειτουργίας. Όταν ο αποδέκτης αποδεχθεί το μήνυμα, αναλαμβάνει την ευθύνη να ολοκληρώσει την εν λόγω λειτουργία. Η απόκριση σε ένα μήνυμα είναι η εκτέλεση κάποιας λειτουργίας (μεθόδου) για την ικανοποίηση της αίτησης.

13 Ένας τρόπος θεώρησης του κόσμου Μία αρχή του αντικειμενοστρεφούς προγραμματισμού είναι κοντά στις ανθρώπινες αδυναμίες…… Αν υπάρχει κάποια εργασία που πρέπει να εκτελεστεί, πρώτη σκέψη είναι η εύρεση κάποιου άλλου που θα την εκτελέσει !! Ωστόσο, ο καλός προγραμματιστής διαφέρει, ακριβώς λόγω αυτού του στοιχείου: Η διάθεση να εμπιστευθούμε τμήματα λογισμικού που έχουν αναπτυχθεί από άλλους είναι ένα σημαντικό βήμα προς την κατεύθυνση του επαναχρησιμοποιούμενου λογισμικού (reusable software)

14 Κλάσεις και Αντικείμενα Πώς γνωρίζει ο Chris τι υπηρεσίες παρέχει ο Fred ? κλάση αντικείμενο Ο όρος ανθοπώλης αναπαριστά μία κατηγορία (κλάση) της οποίας ο Fred είναι ένα αντικείμενο. Όλα τα αντικείμενα είναι στιγμιότυπα μιας κλάσης. Η μέθοδος που ενεργοποιείται από ένα αντικείμενο ως απόκριση σε ένα μήνυμα καθορίζεται από την κλάση του αποδέκτη. Όλα τα αντικείμενα μιας κλάσης χρησιμοποιούν την ίδια μέθοδο ως απόκριση στον ίδιο τύπο μηνύματος. Κάθε αντικείμενο έχει ιδιότητες και συμπεριφορά

15 Κλάσεις και Αντικείμενα Επιπλέον στοιχεία που γνωρίζει ο Chris για τον ανθοπώλη Fred προκύπτουν από το γεγονός ότι ο Fred είναι επίσης ιδιοκτήτης καταστήματος. Δυνατότητα οργάνωσης της γνώσης υπό μορφή μιας ιεραρχίας κατηγοριών

16 Κληρονομικότητα Η αρχή, ότι η γνώση που ισχύει για μία γενική κατηγορία εφαρμόζεται και σε ειδικότερες κατηγορίες, ονομάζεται κληρονομικότητα. Συνήθως η απεικόνιση της κληρονομικής σχέσης, πραγματοποιείται με δενδροειδή ιεραρχικά διαγράμματα Οι κλάσεις είναι δυνατόν να οργανωθούν σε μία ιεραρχική κληρονομική δομή. Μία κλάση παιδί (υποκείμενη κλάση) κληρονομεί χαρακτηριστικά και ιδιότητες από μία γονική κλάση που βρίσκεται υψηλότερα στην ιεραρχία.

17 Διασύνδεση Μεθόδων Θηλαστικά Πτηνά Ζώα ιδιότητα: γέννηση μικρά αβγά Επομένως, στο μοντέλο του αντικειμενοστρεφούς προγραμματισμού, θα πρέπει να υπάρχει μία τεχνική εισαγωγής εξαιρέσεων σε ένα γενικό κανόνα

18 Διασύνδεση Μεθόδων Αυτό επιτυγχάνεται με τη δυνατότητα η πληροφορία (χαρακτηριστικά και ιδιότητες) που ενυπάρχει σε μία κλάση, να μπορεί να επικαλύψει την πληροφορία που κληρονομείται από τις γονικές κλάσεις. Συχνά, σε προγράμματα, η δυνατότητα αυτή σχετίζεται με την ύπαρξη μεθόδων με το ίδιο όνομα σε δύο κλάσεις που συνδέονται ιεραρχικά, αλλά με διαφορετικό τρόπο υλοποίησης για κάθε μία.

19 Επικάλυψη και Πολυμορφισμός Η δυνατότητα, δύο διαφορετικά αντικείμενα που ανήκουν σε κλάσεις που συνδέονται με κληρονομικότητα, να αντιδρούν με διαφορετικό τρόπο στο ίδιο μήνυμα, ονομάζεται: επικάλυψη • επικάλυψη (χρησιμοποιείται στατική διασύνδεση) ή πολυμορφισμός • πολυμορφισμός (χρησιμοποιείται δυναμική διασύνδεση). Γενικότερα, επικάλυψη είναι η ανάθεση σε έναν τελεστή ή λειτουργία, περισσοτέρων της μιας εννοιών, ανάλογα με τους τύπους δεδομένων που σχετίζονται με τον τελεστή ή τη λειτουργία. Θεωρούμε το ακόλουθο παράδειγμα ενός απλού μοντέλου για την εκτύπωση και άθροιση δύο ακεραίων: εκτύπωση (518, 202) εκτύπωση (“Το άθροισμα των αριθμών είναι”) εκτύπωση (720)

20 Επικάλυψη και Πολυμορφισμός Σε ένα συμβατικό πρόγραμμα οι συναρτήσεις εκτύπωσης έχουν διαφορετική υλοποίηση ανάλογα με το τι εκτυπώνεται: write_two_integers(518, 202); write_string("The sum of these numbers is:"); write_one_integer(720); Αν ο μεταγλωττιστής είναι σε θέση να αποφασίσει βάσει του τύπου και αριθμού των ορισμάτων ποια υλοποίηση θα χρησιμοποιήσει: write(518, 202); write("The sum of these numbers is:"); write(720); Αν η δυνατότητα αυτή υπάρχει σε μία γλώσσα προγραμματισμού, θεωρείται ότι είναι δυνατή η επικάλυψη μιας λειτουργίας Η διασύνδεση ονόματος και υλοποίησης που πραγματοποιείται κατά τη μεταγλώττιση (at compile time) ονομάζεται στατική διασύνδεση.

21 Επικάλυψη και Πολυμορφισμός Παράδειγμα 2 Θεωρούμε μία ομάδα ατόμων, ορισμένα εκ των οποίων είναι φοιτητές. Ζητούμε από τα μέλη της ομάδας να παρουσιάσουν τον εαυτό τους: • Κάθε φοιτητής θα πρέπει να δώσει το όνομα του καθώς και τη σχολή στην οποία φοιτά, • όλα τα υπόλοιπα μέλη της ομάδας πρέπει να δώσουν μόνο το όνομά τους. Δημιουργούμε ένα αντικειμενοστρεφές μοντέλο αυτής της ομάδας εισάγοντας δύο κλάσεις, Person και Student. Η κλάση Person έχει μία μέθοδο present_yourself που εκτυπώνει το όνομα ενώ η κλάση Student έχει μία μέθοδο present_yourself που εκτυπώνει το όνομα και τη σχολή φοίτησης.

22 Επικάλυψη και Πολυμορφισμός Στην πραγματικότητα αλλά και στο μοντέλο η απαίτηση είναι απλή: η απάντηση στο ερώτημα present_yourself να δοθεί με βάση την κλάση στην οποία ανήκει το κάθε αντικείμενο. φοιτητής άλλο παρουσιάσου όνομα σχολή παρουσιάσου όνομα παρουσιάσου όνομα σχολή Κατά τη συγγραφή του προγράμματος δεν είναι γνωστό τι αντικείμενα θα περιέχει η λίστα.

23 Επικάλυψη και Πολυμορφισμός Κατά συνέπεια, δεν είναι σαφές κατά τη μεταγλώττιση ποια υλοποίηση της λειτουργίας παρουσιάσου θα πρέπει να καλείται κάθε φορά. Ωστόσο, κατά την εκτέλεση του προγράμματος η λίστα των αντικειμένων υπάρχει. Αν το σύστημα έχει τη δυνατότητα να επιλέξει τη σωστή υλοποίηση κατά το χρόνο που εκτελείται ένα πρόγραμμα, το πρόβλημα επιλύεται. δυναμική διασύνδεση. Η δυνατότητα διασύνδεσης μεταξύ ονόματος και υλοποίησης μιας μεθόδου κατά την εκτέλεση ενός προγράμματος ονομάζεται δυναμική διασύνδεση. Κατά συνέπεια υπάρχει η δυνατότητα, αντικείμενα που ανήκουν σε κλάσεις που συνδέονται με κληρονομικότητα, να ανταποκρίνονται με διαφορετικό τρόπο στο ίδιο μήνυμα. Η δυνατότητα αυτή ονομάζεται πολυμορφισμός.

24 Σύνοψη Αντικειμενοστρεφών Εννοιών 1. Οτιδήποτε είναι ένα αντικείμενο 2. Οι υπολογισμοί επιτυγχάνονται με την αλληλεπίδραση των αντικειμένων. Τα αντικείμενα αλληλεπιδρούν με την αποστολή μηνυμάτων. Ένα μήνυμα είναι μία αίτηση για εκτέλεση λειτουργίας. 3. Κάθε αντικείμενο έχει τη δική του μνήμη. 4. Κάθε αντικείμενο είναι ένα στιγμιότυπο μιας κλάσης. Μία κλάση αναπαριστά ένα σύνολο αντικειμένων με κοινά χαρακτηριστικά και ιδιότητες. 5. Η κλάση είναι η αποθήκη συμπεριφοράς που σχετίζεται με ένα αντικείμενο. Αυτό σημαίνει, ότι όλα τα αντικείμενα μέλη μιας κλάσης μπορούν να επιτελέσουν τις ίδιες λειτουργίες. 6. Οι κλάσεις είναι οργανωμένες σε μία δενδροειδή ιεραρχία. Η συμπεριφορά που σχετίζεται με τα αντικείμενα μιας γονικής κλάσης είναι αυτομάτως διαθέσιμη σε οποιαδήποτε υποκείμενη κλάση.

25 Αφαίρεση

26

27

28 Είναι προφανές ότι, για λόγους διαχείρισης της πληροφορίας, ορισμένη ποσότητα πληροφορίας αποκρύπτεται σκοπίμως. Αφαίρεση ονομάζεται η σκόπιμη σύμπτυξη ή απόκρυψη πληροφορίας που αφορά μία διαδικασία ή ένα κατασκεύασμα, με σκοπό την καλύτερη κατανόηση άλλων απόψεων, λεπτομερειών ή δομής. Η ιδέα της αφαίρεσης μπορεί να υποδιαιρεθεί σε διάφορες υποκατηγορίες: • Η πλέον συνήθης τεχνική αφαίρεσης είναι ο διαμερισμός ενός συνόλου στα τμήματα που το αποτελούν και στη συνέχεια ο διαμερισμός καθενός από τα τμήματα κ.ο.κ. "διαίρει και βασίλευε" (divide and conquer). •Εξειδίκευση του γενικού, προσέγγιση που υλοποιείται στις αντικειμενοστρεφείς γλώσσες με τις αρχές της κληρονομικότητας. •Ύπαρξη πολλαπλών απόψεων ενός συστήματος, κάθε μία από τις οποίες επικεντρώνεται σε συγκεκριμένα χαρακτηριστικά.

29 Αφαίρεση Οι τεχνικές του διαμερισμού σε τμήματα και του διαχωρισμού σε ειδικότερες κατηγορίες αντιστοιχούν στις δύο πιο σημαντικές μορφές αφαίρεσης στον αντικειμενοστρεφή προγραμματισμό όπου είναι συνήθως γνωστές ως: έχει • αφαίρεση τύπου "έχει" (has-a abstraction) και ως είναι • αφαίρεση τύπου "είναι" (is-a abstraction) αντίστοιχα. Κατά το διαμερισμό σε τμήματα για παράδειγμα, ένα αυτοκίνητο "έχει" μία μηχανή και "έχει" ένα σύστημα μετάδοσης. Στον διαχωρισμό σε ειδικότερες κατηγορίες, ένα ποδήλατο "είναι" ένα όχημα, ή "είναι" ένα δίκυκλο για παράδειγμα. Οι δύο αυτές μορφές αφαίρεσης συνδέονται στενά με συγκεκριμένες προγραμματιστικές έννοιες σε διάφορες αντικειμενοστρεφείς γλώσσες προγραμματισμού.

30 Ενσωμάτωση Θεμελιώδης έννοια στον Αντικειμενοστρεφή Προγραμματισμό: Object Ενσωμάτωση: Ενσωμάτωση: Το αντικείμενο περιλαμβάνει τόσο δεδομένα όσο και τις μεθόδους που χειρίζονται τα δεδομένα :Λογαριασμός • Όνομα κατόχου • Αριθμός • Υποκατάστημα Τραπέζης Δεδομένα, Ιδιότητες (Attributes) • Υπολογισμός τόκων • Εκτύπωση υπολοίπου • Μεταφορά σε άλλο λογαριασμό Συμπεριφορά, Λειτουργίες (Methods)

31 Ενσωμάτωση Λογ. Α • Όνομα κατόχου: Πέτρου • Αριθμός: • Υποκατάστημα: Μαρτίου • Υπολογισμός τόκων • Εκτύπωση υπολοίπου • Μεταφορά σε άλλο λογαριασμό Λογαριασμός • Όνομα κατόχου: ΧΧΧΧ • Αριθμός: ΧΧΧΧ • Υποκατάστημα : ΧΧΧΧ • Υπολογισμός τόκων • Εκτύπωση υπολοίπου • Μεταφορά σε άλλο λογαριασμό Λογ. Β • Όνομα κατόχου: Νικολάου • Αριθμός: • Υποκατάστημα: Τσιμισκή • Υπολογισμός τόκων • Εκτύπωση υπολοίπου • Μεταφορά σε άλλο λογαριασμό Λογ. Γ • Όνομα κατόχου: Ξένος • Αριθμός: • Υποκατάστημα: Χαριλάου • Υπολογισμός τόκων • Εκτύπωση υπολοίπου • Μεταφορά σε άλλο λογαριασμό

32 Σύνθεση Αυτοκίνητο • Τύπος: ΧΧΧΧ • Μηχανή: • CD Player: Μηχανή CD Player

33 Αντικειμενοστρεφής Σχεδίαση Το να προγραμματίζει κανείς σε μία αντικειμενοστρεφή γλώσσα δεν είναι ούτε αναγκαία ούτε ικανή συνθήκη για αντικειμενοστρεφή σχεδίαση Η σημαντικότερη συνθήκη είναι η δημιουργία μιας κοινότητας αλληλεπιδρώντων αλλά ανεξάρτητων οντοτήτων που συνεργάζονται για την επίτευξη ενός στόχου. Τεχνική Σχεδίασης: Κατανομή Ευθυνών – Αρμοδιοτήτων Ευθύνη -> αναμένεται ότι τηρούνται κάποιοι κανόνες -> προϋποθέτει ένα βαθμό αυτονομίας Διαφορά μεταξύ συμβατικού μοντέλου προγραμματισμού και αντικειμενοστρεφούς μοντέλου: -> εκτέλεση εργασίας από ένα παιδί υπό συνεχή επίβλεψη -> ανάθεση ευθύνης στο παιδί – ανεξάρτητη εκτέλεση

34 Προγραμματισμός σε μικρή και μεγάλη κλίμακα Προγραμματισμός σε μικρή κλίμακα: • ανάπτυξη του κώδικα από μικρή ομάδα προγραμματιστών • Κύριο πρόβλημα: σχεδίαση των αλγορίθμων Προγραμματισμός σε μεγάλη κλίμακα: • ανάπτυξη του συστήματος από μεγάλη ομάδα προγραμματιστών, με διακριτούς ρόλους επικοινωνία μεταξύ τμημάτων του έργου • Κύριο πρόβλημα: διαχείριση της πληροφορίας και επικοινωνία μεταξύ τμημάτων του έργου Ο αντικειμενοστρεφής προγραμματισμός ενδείκνυται για έργα λογισμικού μεγάλης κλίμακας

35 Visual studio c++ express #include "stdafx.h" #include "iostream" int _tmain(int argc, _TCHAR* argv[]) { std::cout << "Hello World"; return 0; }

36 C++ #include using namespace std; int main() { cout << "Hello World\n"; return 0; }

37 2.4Δομές Ελέγχου  C++ keywords  Δεν μπορούν να χρησιμοποιηθούν ως ονόματα μεταβλητών ή προσδιοριστικά (identifiers)

38 Compilers /IDE  VISUAL C++ EXPRESS  MinGW  CYGWIN (G++)  BLOODSHED devc++  ECLIPSE


Κατέβασμα ppt "Αντικειμενοστρεφής Προγραμματισμός Object-Oriented Programming Δρ. Σκάρλας Λάμπρος Πάτρα 2008-2009 14-10-08 Lecture 1."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google