Στην ενότητα αυτή θα µελετηθούν:



Σχετικά έγγραφα
2.1 Αντικειµενοστρεφής προγραµµατισµός

Κλάσεις και Αντικείµενα

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Λογισµικό (Software SW) Γλώσσες

Ελληνικό Ανοικτό Πανεπιστήµιο. Βασικές έννοιες αντικειµενοστρεφούς τεχνολογίας. ρ. Πάνος Φιτσιλής

3 Αλληλεπίδραση Αντικειμένων

Βασικά της γλώσσας JAVA

ΑΡΦΕ ΑΝΣΙΚΕΙΜΕΝΟΣΡΕΥΟΤ ΠΡΟΓΡΑΜΜΑΣΙΜΟΤ. Ιωάννης Φατζηλυγερούδης Αναπληρωτής Καθηγητής Τμήμα Μηχ/κών Η/Υ και Πληροφορικής Πανεπιστήμιο Πατρών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

Α. Ερωτήσεις Ανάπτυξης

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Υποδείγματα Ανάπτυξης

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

ΥΠΟΛΟΓΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ ΓΙΑ ΣΥΣΤΗΜΑΤΑ ΜΕΤΑΔΟΣΗΣ ΠΛΗΡΟΦΟΡΙΑΣ

Αντικειμενοστραφής Προγραμματισμός

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language) Ιστοσελίδα του µαθήµατος. Περιεχόµενα. ηµήτριος Κατσαρός, Ph.D. Κλάσεις.

ΑΠΛΗ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ

ΚΕΦΑΛΑΙΟ 7 ΕΙ Η, ΤΕΧΝΙΚΕΣ ΚΑΙ ΠΕΡΙΒΑΛΛΟΝΤΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

(Διαφάνειες Νίκου Βιδάκη)

Προγραµµατιστικές τεχνικές

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ. Ι. Ψαρομήλιγκος Χ. Κυτάγιας

Αντικειμενοστρέφεια. Henri Matisse, Harmony in Red, Κωστής Σαγώνας Νίκος Παπασπύρου

Κλάσεις. Κατηγορίες Αντικειµένων. Κλάσεις. Φυσικά Αντικείµενα. Χώρος = Οµάδα Φυσικών Αντικειµένων. Πρόγραµµα = Οµάδα

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Επεξεργασία Αρχείων Κειµένου

Πληροφοριακά Συστήματα Διοίκησης Ενότητα 1: Βασικές Αρχές Αντικειμενοστραφούς Σχεδίασης Συστημάτων και Εφαρμογών (1ο Μέρος)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Σχεδίαση Κλάσεων. Γρηγόρης Τσουµάκας. Τµήµα Πληροφορικής, Αριστοτέλειο Πανεπιστήµιο Θεσσαλονίκης. Έκδοση:

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

υναµικές οµές εδοµένων

ύο βασικές ιδέες Ενότητες Απόκρυψη Πληροφορίας, Αφηρηµένοι Τύποι εδοµένων 1) ιαχώρισε το πρόβληµα σεµικρότερα καλώς καθορισµένα υπο-προβλήµατα

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

Οντοκεντρικός Προγραμματισμός

Σύνθεση και Κληρονομικότητα

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

Wrapper Classes, Abstract Classes and Interfaces

Κεφάλαιο 3.1, : Συναρτήσεις I. ( ιάλεξη 11) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΗΜΙΟΥΡΓΙΑ ΠΑΙΧΝΙ ΙΟΥ ΣΤΟ SCRATCH ΒΗΜΑ ΠΡΟΣ ΒΗΜΑ

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

Μέθοδοι. Μέθοδοι ηµιουργοί, Υπερφόρτωση και Υπέρβαση Μεθόδων

Εισαγωγή στον Προγραμματισμό με C++

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός ΙI (Θ)

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

Outline. 4 Object-Oriented Programming

Σύνθεση και Κληρονομικότητα

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

Προγραµµατιστικές τεχνικές

Κεφάλαιο 10 ο Υποπρογράµµατα

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

public void printstatement() { System.out.println("Employee: " + name + " with salary: " + salary);

Οι δείκτες στη γλώσσα C

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

Με τι ασχολείται ο αντικειμενοστραφής προγραμματισμός

Αντικειµενοστρεφής Προγραµµατισµός

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

Αντικειμενοστρεφής Προγραμματισμός

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

Ενότητες στην C Τεχνική Υλοποίησης Αφαιρετικών Τύπων Δεδομένων στην C

Το Ηλεκτρονικό Ταχυδροµείο ( ) είναι ένα σύστηµα που δίνει την δυνατότητα στον χρήστη να ανταλλάξει µηνύµατα αλλά και αρχεία µε κάποιον άλλο

Κλάσεις και αντικείμενα #include <iostream.h<

Η στοίβα (stack) H στοίβα είναι ένας αποθηκευτικός χώρος οργανωµένος κατά τέτοιο τρόπο ώστε να υποστηρίζει δύο βασικές λειτουργίες:

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT)

Αντικείµενα. ηµιουργία και χρησιµοποίηση αντικειµένων. ηµιουργία αντικειµένων

Τεχνολογίες Υλοποίησης Αλγορίθµων

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

ΣΧΕ ΙΑΣΗ ΑΝΤΙΚΕΙΜΕΝΩΝ ΜΕ ΑΡΜΟ ΙΟΤΗΤΕΣ. Ορισµός σχεδιαστικών προτύπων Εφαρµογή των 9 GRASP προτύπων

Π2 Το Σύστηµα Κανόνων CLIPS

Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα

Εαρινό. Ύλη εργαστηρίου, Ασκήσεις Java

Αντικειμενοστρεφής προγραμματισμός Object Oriented Programming (OOP) Σπάχος Κυριάκος Καθηγητής Πληροφορικής ΠΕ19

7.3 Πρωτόκολλο TCP. 1. Το TCP πρωτόκολλο παρέχει υπηρεσίες προσανατολισµένες σε σύνδεση. Σ Λ

ΚΑΤΑΣΚΕΥΑΣΤΕΣ ΑΝΤΙΓΡΑΦΗΣ

Transcript:

Αντικειµενοστρεφής Προγραµµατισµός Στην ενότητα αυτή θα µελετηθούν: Εισαγωγή στον αντικειµενοστρεφή προγραµµατισµό H έννοια της κλάσης και του αντικειµένου Εισαγωγή στη C++ ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1

Τεχνολογία Λογισµικού Περιοχή της πληροφορικής που ασχολείται µε το κτίσιµο µεγάλων λογισµικών συστηµάτων. Στόχοι: ηµιουργία λογισµικών συστηµάτων που είναι αξιόπιστα, ευκατανόητα, αποδοτικά ως προς το κόστος τους, ευπροσάρµοστα και επαναχρησιµοποιήσηµα. Αρχές Τεχνολογίας Λογισµικού Αφαιρετικότητα / Abstraction Ενθυλάκωση / Encapsulation Τµηµατικότητα / Modularity Ιεραρχικότητα / Hierarchy ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2

Αφαιρετικότητα ιαδικασία εξαγωγής µόνο των σχετικών ιδιοτήτων ενός αντικειµένου. Οι ιδιότητες αυτές ορίζουν µια άποψη του αντικειµένου. Παράδειγµα: Ένας πωλητής αυτοκινήτων ασχολείται µε τα στοιχεία που αφορούν την πώληση ενός αυτοκινήτου όπως τιµή, χρόνος εγγύησης, χρώµα, επιπρόσθετος εξοπλισµός κλπ. Ένας µηχανικός βλέπει το αυτοκίνητο από την άποψη της συντήρησης του συστήµατος, όπως είδος λαδιού, µέγεθος φίλτρου λαδιού κλπ. Price? Oil change? ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 3

Ενθυλάκωση ιάσπαση ενός αντικειµένου σε υποµέρη, αποκρύπτοντας και προστατεύοντας ουσιαστικές πληροφορίες και προσφέροντας κατάλληλες µεθόδους για επεξεργασία των πληροφοριών µε ελεγµένο και χρήσιµο τρόπο. Με την απόκρυψη (της ακριβής µορφής) των πληροφοριών η παράσταση και το περιεχόµενο του αντικειµένου µπορεί να αλλάξει χωρίς να επηρεάζονται άλλα µέρη του συστήµατος. Radio Παράδειγµα - ράδιο αυτοκινήτου Το interface αποτελείται από τα σηµεία διασύνδεσης του ραδίου µε το αυτοκίνητο. Power Οι λεπτοµέρειες σχετικά µε το πως Connector δουλεύει το ράδιο αποκρύπτονται. (Για την εγκατάσταση ενός ραδίου δεν χρειάζεται να γνωρίζουµε τίποτα για το ηλεκτρικό του σύστηµα.) Speaker Connectors ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 4 Antenna Input

Τµηµατικότητα ιαµερισµός ενός αντικειµένου σε µικρότερα κοµµάτια (modules) έτσι ώστε τα κοµµάτια αυτά να κρατούν χρήσιµες και αυτόνοµες πληροφορίες και το αντικείµενο είναι πιο ευκατανόητο και ευκολο στη διαχείρησή του. Παράδειγµα: Ένα αυτοκίνητο µπορεί να διαχωριστεί σε υποσυστήµατα. Cooling system Radiator Thermostat Water pump Ignition system Battery Starter Spark plugs ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 5

Ιεραρχικότητα Ταξινόµηση αντικειµένων σύµφωνα µε τις µεταξύ τους σχέσεις. Οι ιεραρχίες µας βοηθούν να κατανοήσουµε καλύτερα πολύπλοκα συστήµατα. Παράδειγµα: η ιεραρχία σε µια εταιρεία βοηθεί τους εργαζόµενους να κατανοήσουν καλύτερα την εταιρεία και την θέση τους σ αυτήν. Ένας χρήσιµος τρόπος για ιεράρχηση παρόµοιων οντοτήτων είναι από το γενικότερο στο ειδικότερο. Οι επιστήµονες χρησιµοποιούν αυτή τη τεχνική για την αναγνώριση και κατάταξη των ειδών. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 6

Αντικειµενοστρεφής Προγραµµατισµός Οι παραδοσιακές διαδικαστικές γλώσσες προγραµµατισµού (π.χ. C, Modula-2, Fortran) αφαιρετικοποιούν τις συµβολικές γλώσσες (και κατ επέκταση αναπαραστούν το µοντέλο ενός υπολογιστή) και επιβάλουν στον προγραµµατιστή να δηµιουργήσει µια σύνδεση ανάµεσα στο µοντέλο µηχανής και στο µοντέλο του προβλήµατος που προσπαθεί να επιλύσει. Στον αντικειµενοστρεφή προγραµµατισµό υπάρχει η δυνατότητα περιγραφής και αναπαράστασης των στοιχείων του πραγµατικού χώρου ως αντικείµενα έτσι ώστε η επίλυση ενός προβλήµατος να χρησιµοποιεί έννοιες οι οποίες πηγάζουν άµεσα από το πρόβληµα. Έτσι η περιγραφή του προβλήµατος µέσω του προγράµµατος γίνεται µέ τους όρους του προβλήµατος και όχι της µηχανής. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 7

Αντικείµενα Αντικείµενα (objects): κάθε οντότητα που υπάρχει στον κόσµο µας χαρακτηρίζεται από Χαρακτηριστικά (attributes): όπως για παράδειγµα το µέγεθος, το χρώµα, το βάρος κλπ. Συµπεριφορές (behaviours): τι δηλαδή µπορεί να κάνει ένα αντικείµενο, πως ανταποκρίνεται και πως λειτουργεί. Παράδειγµα: το τηλεχειριστήριο και η τηλερόραση είναι αντικείµενα µε χαρακτηριστικά και συµπεριφορές. όταν πατήσουµε ένα κουµπί στο τηλεχειριστήριο αυτό θα στείλει το κατάλληλο µήνυµα προς την τηλεόραση και η τηλεόραση θα επιδείξει την κατάλληλη συµπεριφορά. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 8

Αντικείµενα και κλάσεις Στον αντικειµενοστρεφή προγραµµατισµό όλα είναι αντικείµενα και χρησιµοποιούνται για αποθήκευση δεδοµένων όπως και για την εκτέλεση υπολογισµών πάνω σε δεδοµένα. Τα αντικείµενα λένε το ένα στο άλλο τι να κάνει µέσω ανταλλαγής µηνυµάτων. Για να εγερθεί ένα αίτηµα σε κάποιο αντικείµενο στέλνουµε ένα µήνυµα προς αυτό µε αποτέλεσµα την κλήση µιας συνάρτησης του αντικειµένου. Κάθε αντικείµενο έχει τη δική του µνήµη η οποία αποτελείται από άλλα αντικείµενα. Κάθε αντικείµενο έχει τύπο: Κάθε αντικείµενο είναι στιγµιότυπο µιας κλάσης (κλάση τύπος) Η κλάση καθορίζει τα χαρακτηριστικά και τις συµπεριφορές αντικειµένων: αντικείµενα της ίδιας κλάσης µπορούν να αποδεχθούν τα ίδια µηνύµατα. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 9

Αντικειµενοστρεφής Προγραµµατισµός Παράδειγµα Να προτείνετε δοµή για πρόγραµµα που να υλοποιεί ένα απλό παιχνίδι µε το όνοµα Bug Hunt στόχος του οποίου είναι η εξόντωση ζωυφίων από την οθόνη. Χαρακτηριστικά του παιχνιδιού: Ένα κινούµενο ζωύφιο εµφανίζεται σε ένα παράθυρο στην οθόνη Το ζωύφιο µπορεί να αλλάξει ανά πάσα στιγµή την διεύθυνση κίνησής του. Ένα ζωύφιο εξοντώνεται από τον παίκτη αν κτυπηθεί από τον παίκτη µέσω του ποντικιού κάποιο προκαθορισµένο αριθµό φορών. Όταν ένα ζωύφιο εξοντωθεί ένα γρηγορότερο ζωύφιο παίρνει την θέση του. Αν ένα κλικ του ποντικιού χάσει το στόχο του τότε ο παίκτης χάνει και το παιχνίδι τελειώνει. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 10

Bug Hunt Βήµα πρώτο Προσδιορισµός των αντικειµένων Ποντίκι Παράθυρο Ζωύφιο Ελεγκτής παιχνιδιού Ας επικεντρώσουµε την προσοχή µας στο αντικείµενο που αντιστοιχεί στο ζωύφιο. Τµηµατικότητα Other possible directions Current direction ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 11

Bug Hunt Για υλοποίηση του παιχνιδιού το ζωύφιο πρέπει να εφοδιαστεί µε τα πιο κάτω χαρακτηριστικά: Θέση στο παράθυρο Μορφή (display image) Ταχύτητα ιεύθυνση κίνησης ύναµη (ο αριθµός των κτυπηµάτων που αποµένουν για εξόντωσή του) Επίσης το ζωύφιο πρέπει να ανταποκρίνεται στα εξής µηνύµατα: Draw Move Change direction Hit Kill Is-pointed-at ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 12

Άλλα σηµαντικά αντικείµενα είναι Bug Hunt αυτό που ρυθµίζει το παιχνίδι, ο Ελεγκτής Παιχνιδιού (ΕΠ) και αυτό που αντιπροσωπεύει το ποντίκι. Τα τρία αυτά αντικείµενα θα επικοινωνούν και θα συνεργάζονται µεταξύ τους κατά την εξέλιξη του παιχνιδιού και θα εγείρουν µηνύµατα το ένα προς το άλλο. Για παράδειγµα: Κατά την εκκίνηση του παιχνιδιού το αντικείµενο ΕΠ θα πρέπει να δηµιουργεί τα αντικείµενα παράθυρο και ζωύφιο. Κάθε φορά που ο χρήστης κτυπά το ποντίκι σε κάποιο σηµείο στην οθόνη το αντικείµενο Ποντίκι θα πρέπει να στέλνει µήνυµα στο αντικείµενο ΕΠ ενηµερώνοντας σχετικά µε τη θέση του κτυπήµατος. Με τη σειρά του ο ΕΠ θα στέλνει µήνυµα στο αντικείµενο Ζωύφιο για να µάθει κατά πόσο το ζωύφιο έχει κτυπηθεί. Αν όχι ο ΕΠ θα πρέπει να τερµατίσει το παιχνίδι. Αν ναι, θα πρέπει να σταλεί µήνυµα στο Ζωύφιο για εκτέλεση της συµπεριφοράς Hit και στη συνέχεια, αν η δύναµη του Ζωύφιο έχει φτάσει το 0, ο ΕΠ θα πρέπει να σκοτώσει το ζωύφιο και να δηµιουργήσει ένα γρηγορότερο τοποθετώντας το στο παράθυρο του παιχνιδιού. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 13

Bug Hunt - Αντικείµενα Παρατηρούµε ότι Κάθε τι στο πρόγραµµά µας είναι αντικείµενο. Τα αντικείµενα εκτελούν υπολογισµούς εγείροντας µεταξύ τους αιτήµατα µέσω µηνύµατων. Ο αποδέκτης ενός µηνύµατος είναι το αντικείµενο εκείνο που θα το διεκπεραιώσει, πιθανόν εγείροντας µε τη σειρά του αιτήµατα σε άλλα αντικείµενα. Τα αντικείµενα συνεργάζονται µεταξύ τους και η σωστή εξέλιξη του προγράµµατος εξαρτάται από την καλή συνεργασία των αντίκειµένων. Yes or No Response Is Pointed At? Game Controller Mouse MouseClick ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 14

Bug Hunt - Μηνύµατα Οι ενέργειες προκύπτουν ως αποτελέσµατα αιτηµάτων για δράση. ενθυλάκωση Το µήνυµα κωδικοποιεί την απαίτηση για την εκτέλεση κάποιας ενέργειας παρέχοντας οποιεσδήποτε πληροφορίες που τυχόν χρειάζονται για διεκπεραίωση της ενέργειας. Ο αποδέκτης ενός µηνύµατος ανταποκρίνεται σε αυτό µε την πραγµατοποίηση της κατάλληλης ενέργειας (µεθόδου) και επιστρέφοντας κάποια τιµή στον αποστολέα του µηνύµατος. Ο αποστολέας του µηνύµατος δεν χρειάζεται να ξέρει λεπτοµέρειες για τη µέθοδο που θα εκτελέσει ο παραλήπτης. Yes or No Response Is Pointed At? Game Controller Mouse MouseClick ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 15

Bug Hunt -Κλάσεις Η συµπεριφορά που αναµένουµε απόένα αργό και ένα γρήγορο ζωύφιο καθορίζεται από τη γενική ιδέα που έχουµε σχετικά µε τα ζωύφια του παιχνιδιού, όπως περιγράφετε στη διαφάνεια 12. Έτσι ένα αργό ή ένα γρήγορο ζωύφιο αποτελούν κάποια εκδοχή (στιγµιότυπο) της κλάσης (κατηγορίας) Ζωυφίου. Μια κλάση είναι µια δοµή στην οποία αποθηκεύονται τα δυνατά χαρακτηρηστικά και συµπεριφορές (µεθόδοι) των αντικειµένων που ανήκουν στην κλάση. Όλα τα αντικείµενα είναι στιγµιότυπα κάποιας κλάσης. Οι δυνατές συµπεριφορές ενός αντικειµένου προκαθορίζονται πλήρως από την κλάση στην οποία ανήκει. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 16

Ch 1 / Foil 17 Position Image Speed Direction Strength Bug Draw Set Direction Hit Kill Is pointed at The Η κλάση bug class Ζωύφιο Bug Στιγµιότυπα objects της with κλάσης Ζωύφιο particular µε διαφορετικά properties χαρακτηριστικά Position: 9,2.2 Image: Speed: 4 Direction: Left Strength: 4 Position: 5,3.8 Image: Speed: 2 Direction: Right Strength: 2

Κληρονοµικότητα Κληρονοµικότητα είναι η βασική αρχή του αντικειµενοστρεφή προγραµµατισµού σύµφωνα µε την οποία τα χαρακτηριστικά και συµπεριφορές µιας γενικότερης κλάσης ισχύουν και εφαρµόζονται (κληρονοµούνται) σε ειδικότερες κλάσεις. Ιεραρχικότητα Παράδειγµα: Έστω ότι θέλουµε να ορίσουµε δύο διαφορετικά είδη ζωυφίων, το Αργό Ζωύφιο και το Γρήγορο Ζωύφιο που διαφέρουν ως προς τις συµπεριφορές τους ως εξής: Το ΑΖ, σε περίπτωση που κατά την κίνησή του κτυπήσει τα σύνορα του παραθύρου, αµέσως αντιστρέφει την κατεύθυνση κίνησης του (µέθοδος Μove ΑΖ), ενώ το ΓΖ, διαπερνά το σύνορο και ξαναεµφανίζεται στην απέναντι πλευρά του παραθύρου (µέθοδος Μove ΓΖ). Τότε µπορούµε να δηµιουργήσουµε δύο κλάσεις FastBug και SlowBug οι οποίες κληρονοµούν από τη γενική κλάση Bug τα χαρακτηριστικά και συµπεριφορές της ενώ επιπρόσθετα ορίζουν η κάθε µια την δική της µέθοδο κίνησης (υποκλάσεις - υπερκλάσεις) : ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 18

Χαρακτηριστικά Properties που κληρονοµούνται inherited by descendants από τους απογόνους Κληρονοµικότητα Bug Properties Messages Position Draw Image SetDirection Velocity Hit Strength Kill Direction IsPointed At Ιδιότητες που κληρονοµούνται Messages inherited από τους by descendants απογόνους is a SlowBug Messages Move is a FastBug Messages Move ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 19

Εισαγωγή στη C++ Η γλώσσα C++ µετεξελίχθηκε από τη γλώσσα προγραµµατισµού C. Οι δύο γλώσσες έχουν πολλά κοινά όπως πολλές εντολές ροής (if/else, while, for, etc). H C++ όµως επεκτείνει την C µε στοιχεία αντικειµενοστρεφή προγραµµατισµού. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 20

Κλάσεις Οι κλάσεις στη C++ είναι ένας νέος τύπος περιγραφής δεδοµένων και λειτουργιών που µπορεί να ορίσει ο προγραµµατιστής ή να χρησιµοποιήσει έτοιµες από ήδη υπάρχουσες στις βιβλιοθήκες της C++. Στη C η βασική µονάδα προγραµµατισµού είναι η συνάρτηση. Στη C++ η βασική µονάδα προγραµµατισµού είναι η κλάση. Κάθε κλάση περιέχει: Χαρακτηριστικά/Attributes τα οποία θεωρούµε ότι είναι το τµήµα των δεδοµένων της κλάσης (data members). Συµπεριφορές/Behaviors: οι οποίες αποτελούν το συναρτησιακό τµήµα της κλάσης (member functions). ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 21

Παράδειγµα class Time{ public: //πρωτότυπα συναρτήσεων της κλάσης Time(); void settime(int, int, int); void printtime(); private: int hour, minute, second; }; //κατασκευαστής της κλάσης ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 22

Παράδειγµα (συν.) Ο ορισµός µιας κλάσης ξεκινά µε τη λέξη class. To σώµα µιας κλάσης ορίζεται µεταξύ { }. H συνάρτηση κλάσης µε το ίδιο όνοµα µε αυτό της κλάσης ονοµάζεται κατασκευαστής (constructor). Η συνάρτηση κατασκευαστής καλείται αυτόµατα όταν ένα αντικείµενο αυτής της κλάσης δηµιουργείται. Το τµήµα public µιας κλάσης (δεδοµένα ή/και συναρτήσεις) είναι διαθέσιµο σε όλους που έχουν πρόσβαση στο αντικείµενο αυτής της κλάσης. Το τµήµα private µιας κλάσης (δεδοµένα ή/και συναρτήσεις) είναι διαθέσιµο µόνο στις συναρτήσεις που είναι µέλη αυτής της κλάσης. Αυτό έχει σαν αποτέλεσµα την απόκρυψη πληροφοριών (information hiding). ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 23

Αντικείµενα class Time{ public: //πρωτότυπα συναρτήσεων της κλάσης Time(); void settime(int, int, int); void printtime(); private: int hour, minute, second; };... Time t1, t2; int i1, i2; //κατασκευαστής της κλάσης ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 24

Αντικείµενα Τα στιγµιότυπα (instances) ενός κοινού τύπου δεδοµένων (όπως τα i1 και i2 στην προηγούµενη σελίδα) ονοµάζονται, από την εµπειρία µας µε τη C, µεταβλητές. Οι i1 και i2 για παράδειγµα, είναι µεταβλητές τύπου int. Στιγµιότυπα (instances) µιας κλάσης ονοµάζονται αντικείµενα (οbjects). Έτσι τα t1, t2 του παραδείγµατος είναι αντικείµενα της κλάσης Time. Συνεπώς, τα αντικείµενα περικλείουν (encapsulate) χαρακτηριστικά (attributes) και συµπεριφορές (behaviors), έχουν την δυνατότητα απόκρυψης πληροφοριών (information hiding), επικοινωνούν µε το περιβάλλον τους µέσω ενός καλά ορισµένου τρόπου διασύνδεσης (interface). ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 25

Aντικείµενα Η συνάρτηση-µέλος (member function) µιας κλάσης που έχει το ίδιο όνοµα µε την κλάση ονοµάζεται κατασκευαστής (constructor) και καλείται αυτόµατα µε τη δηµιουργία ενός αντικειµένου. Για όλες τις συναρτήσεις-µέλη µιας κλάσης µπορούµε να χρησιµοποιήσουµε τα πρωτότυπα των συναρτήσεων και ο ορισµός του να γίνει αργότερα µετά την περιγραφή της κλάσης. Ο κώδικας των συναρτήσεων µπορεί να τοποθετηθεί και µέσα στην κλάση αλλά δεν προτείνεται για καλύτερη αναγνωσιµότητα και κοµψότητα του παραγόµενου κώδικα. Τα µέλη δεδοµένων (data members) δηλώνονται ακριβώς όπως δηλώνουµε απλές µεταβλητές γνωστών τύπων δεδοµένων. Βέβαια µπορούµε να χρησιµοποιήσουµε και αντικείµενα ως µέλη-δεδοµένων και τη δυνατότητα αυτή την ονοµάζουµε σύνθεση (composition) αντικειµένων. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 26

Παράδειγµα class Time{ public: //πρωτότυπα συναρτήσεων της κλάσης Time(); void settime(int, int, int); void printtime(); private: int hour, minute, second; }; Τime :: Time() {hour = minute = second = 0;} //oρισµός κατασκευαστή της κλάσης ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 27

Παράδειγµα void Τime :: settime(int h, int m, int s) { if( h >= 0 && h < 24) hour = h; else hour = 0; if( m >= 0 && h < 59) minute = m; else minute = 0;... } Time timeobject1, timeobject2; Time *timeptr; //oρισµός της συνάρτησης settime ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 28

Ορισµός Αντικειµένων Τα αντικείµενα ορίζονται κάνοντας χρήσης του ονόµατος της κλάσης από την οποία προέρχονται. Όπως οι µεταβλητές χρησιµοποιούνται µόνο αν έχουν προηγούµενα οριστεί έτσι και τα αντικείµενα πρέπει να ορίζονται πριν να χρησιµοποιηθούν. Για να προσπελάσουµε το δηµόσιο τµήµα ενός αντικειµένου χρησιµοποιούµε τον τελεστή. : timeobject1.settime(6, 30, 0); timeobject2.printtime(); To προσωπικό (private) τµήµα ενός αντικειµένου δεν πρέπει και δεν µπορεί να προσπελαστεί από το περιβάλλον του αντικειµένου. ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 29

Ορισµός Αντικειµένων Για να προσπελάσουµε ένα αντικείµενο µέσω ενός δείκτη χρησιµοποιούµε τον τελεστή -> : timeptr -> settime(18, 25, 0); timeptr -> printtime(); Ο κατασκευαστής µιας κλάσης µπορεί να υλοποιηθεί έτσι ώστε να τοποθετεί default τιµές σε µερικά ή όλα τα ορίσµατά του : ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 30

Παράδειγµα class Time{ public: Time(int=0, int=0, int=0); void settime(int, int, int); void printtime(); private: int hour, minute, second; }; Τime :: Time(int hr, int min, int sec) {settime(hr, min, sec);} ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 31

Default τιµές σε ορίσµατα συναρτήσεων Συνεπώς, µπορούµε να δηµιουργήσουµε αντικείµενα ως εξής µε αποτελέσµατα όπως φαίνονται πιο κάτω: Time t1; 00:00:00 Time t2(6); 06:00:00 Time t3(6, 30); 06:30:00 Time t4(6, 30, 5); 06:30:05 ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 32