Εφαρμοσμένη Πληροφορική ΙΙ (Θ) Αντικειμενοστραφής Προγραμματισμός και JavaScript 1
Ορισμοί Κλάση: πρότυπο (template) π.χ. πολύγωνο Μέθοδος ή μήνυμα: Μια ορισμένη δυνατότητα της κλάσης π.χ. για τα πολύγωνα computearea Γνώρισμα: Ένα ορισμένο στοιχείο (δεδομένο) της κλάσης π.χ. για τα πολύγωνα κορυφές πολυγώνου Αντικείμενο ή στιγμιότυπο: ένα συγκεκριμένο αντικείμενο της κλάσης π.χ. το πολύγωνο του χώρου του ΤΕΙ 2
Ορολογία: Κλάση Ορίζει τα αφαιρετικά χαρακτηριστικά των αντικειμένων Περιλαμβάνει: τα χαρακτηριστικά (γνωρίσματα ή πεδία ή ιδιότητες) τη συμπεριφορά (μεθόδους, λειτουργίες) των αντικειμένων. Προσχέδιο-προδιαγραφή που περιγράφει τη φύση των αντικειμένων Για παράδειγμα η κλάση Πολύγωνο αποτελείται από τα χαρακτηριστικά που περιγράφουν όλα τα πολύγωνα, όπως οι κορυφές και οι μονάδες μέτρησης εμβαδού τους τις δυνατότητες-λειτουργίες των πολυγώνων όπως ο υπολογισμός εμβαδού η διαχείριση (διαγραφή/προσθήκη) των κορυφών του 3
Ορολογία: Στιγμιότυπο Συγκεκριμένο αντικείμενο της κλάσης Είναι το πραγματικό αντικείμενο που δημιουργείται κατά την εκτέλεση (π.χ. το αντικείμενο πολύγωνοτει είναι ένα στιγμιότυπο της κλάσης Πολύγωνο) Κατάσταση αντικειμένου: το σύνολο των τιμών των γνωρισμάτων ενός συγκεκριμένου αντικειμένου Το αντικείμενο αποτελείται από: την κατάσταση του και τη συμπεριφορά που ορίζεται στην κλάση του Οι όροι στιγμιότυπο και αντικείμενο είναι ταυτόσημοι 4
Ορολογία: Μέθοδος Δυνατότητα/ικανότητα των αντικειμένων της κλάσης Στη φυσική γλώσσα οι μέθοδοι είναι ρήματα π.χ. ως μέλος της κλάσης Πολύγωνο, για το πολύγωνοτει ισχύει ότι υπάρχει η δυνατότητα υπολογισμού του εμβαδού του περιλαμβάνει τη μέθοδο computearea() μπορεί να περιλαμβάνει κι άλλες μεθόδους (π.χ υπολογισμό περιμέτρου) Η χρήση μιας μεθόδου μες στο πρόγραμμα επηρεάζει την κατάσταση ή αναφέρεται συνήθως σε ένα συγκεκριμένο αντικείμενο (π.χ. ο υπολογισμός εμβαδού είναι μια δυνατότητα που υπάρχει για όλα τα πολύγωνα, αλλά εφαρμόζεται σε συγκεκριμένο πολύγωνο κάθε φορά) 5
Κατασκευαστές αντικειμένων στη JS Στη JavaScript δεν υπάρχει η δυνατότητα δημιουργίας/περιγραφής κλάσεων με την κλασσική έννοια του αντικειμενοστραφούς προγραμματισμού παρέχεται η δυνατότητα δημιουργίας αντικειμένων βάσει προτύπου (αντί κλάσης) που ορίζεται από μια συνάρτησηκατασκευαστή Συνάρτηση-Κατασκευαστής Συνάρτηση που χρησιμοποιείται ως πρότυπο κατασκευής αντικειμένων Τα αντικείμενα JavaScript κληρονομούν όλες τις ιδιότητες/μεθόδους του προτύπου στο οποίο βασίζονται Οποιαδήποτε συνάρτηση JavaScript μπορεί να χρησιμοποιηθεί ως κατασκευαστής 6
Ιδιότητες/Μέθοδοι Κατασκευαστών JS Η λέξη-κλειδί this αναφέρεται στο (αρχικά προσωρινό) αντικείμενο το οποίο δημιουργείται κατά την κλήση του κατασκευαστή Η προσθήκη ιδιότητας στο υπό κατασκευή αντικείμενο ακολουθεί τη σύνταξη: this.όνομα-ιδιότητας = τιμή Σε συναρτήσεις που προορίζονται για μέθοδοι του κατασκευαστή, η αναφορά στις ιδιότητες του προτύπου θα πρέπει να γίνεται με τον δείκτη this Nέα αντικείμενα του προτύπου δημιουργούνται χρησιμοποιώντας τη λέξη κλειδί new πριν την εντολή κλήσης της συνάρτησης-κατασκευαστή η συνάρτηση επιστρέφει (έμμεσα) αντικείμενο τύπου Object σε αυτή την περίπτωση 7
Ιδιότητες/Μέθοδοι Κατασκευαστών JS Παράδειγμα -- Κατασκευαστής 2Δ σημείων /* Συνάρτηση-κατασκευαστής σημείων */ function Point(crs,x,y){ this.crs = crs; this.x = x; this.y = y; /* μέθοδος μέτρησης απόστασης μεταξύ του τρέχοντος σημείου και του σημείου p */ this.computedistfrom = function(p){ var dx = this.x - p.x; var dy = this.y - p.y; return Math.sqrt(dx*dx+dy*dy); }; } //Εκτέλεση var p1 = new Point( EPSG:2100,0,0); var p2 = new Point( EPSG:2100,0,5); alert( Απόσταση: +p1.computedistfrom(p2)); //Απόσταση:5 8
Στιγμιότυπα προτύπων Κατά την εκτέλεση δημιουργία πολλών στιγμιοτύπων του ίδιου προτύπου: Ο κατασκευαστής δίνει τη δυνατότητα δημιουργίας πολλών αντικειμένων του ίδιου προτύπου Κάθε αντικείμενο αποθηκεύεται σε μια ξεχωριστή μεταβλητή Κάθε στιγμιότυπο έχει το δικό του χώρο μεταβλητών με τιμές: επιθυμητό για τα δεδομένα (ιδιότητες) πλεονασμός για τις μεθόδους Οι μέθοδοι προτύπων θα πρέπει να ορίζονται μια φορά μόνο και να χρησιμοποιούνται δείκτες (αναφορά) στον ορισμό τους 9
Μέθοδοι στιγμιοτύπων Παράδειγμα -- Δείκτης σε μέθοδο αντικειμένων //Ορισμοί function computedistfrom(p){ var dx = this.x - p.x; var dy = this.y - p.y; return Math.sqrt(dx*dx+dy*dy); } /*Συνάρτηση-κατασκευαστής σημείων*/ function Point(crs,x,y){ this.crs = crs; this.x = x; this.y = y; this.computedistfrom = computedistfrom; } //Εκτέλεση var p1 = new Point( EPSG:2100,0,0); var p2 = new Point( EPSG:2100,0,5); alert( Απόσταση: +p1.computedistfrom(p2)); //Απόσταση:5 10