oop:introduction

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
oop:introduction [2015/01/20 13:11]
gthanos [Headline]
oop:introduction [2015/01/20 14:37]
gthanos [Διεπαφές - Interfaces]
Line 28: Line 28:
 Ανάλογα,​ στον αντικειμενοστραφή προγραμματισμό,​ μία κλάση μπορεί να δώσει διαφοροποιημένα αντικείμενα. Κάθε αντικείμενο υλοποιείται από μία μέθοδο που καλείται κατασκευαστής (//​constructor//​). Ο κατασκευαστής της κλάσης υλοποιεί το κάθε αντικείμενο με βάση το σχέδιο της κλάσης μπορεί να κληθεί για διαφορετικά αντικείμενα με διαφορετικές παραμέτρους,​ οδηγώντας τελικά σε διαφοροποιημένα αντικείμενα ως προς τα χαρακτηριστικά τους. ​ Ανάλογα,​ στον αντικειμενοστραφή προγραμματισμό,​ μία κλάση μπορεί να δώσει διαφοροποιημένα αντικείμενα. Κάθε αντικείμενο υλοποιείται από μία μέθοδο που καλείται κατασκευαστής (//​constructor//​). Ο κατασκευαστής της κλάσης υλοποιεί το κάθε αντικείμενο με βάση το σχέδιο της κλάσης μπορεί να κληθεί για διαφορετικά αντικείμενα με διαφορετικές παραμέτρους,​ οδηγώντας τελικά σε διαφοροποιημένα αντικείμενα ως προς τα χαρακτηριστικά τους. ​
  
-Επιπρόσθετα,​ μια κλάση μπορεί να έχει περισσότερους του ενός κατασκευαστές. ​+Mια κλάση μπορεί να έχει περισσότερους του ενός κατασκευαστές.  
 + 
 +Οι κατασκευαστές κάνουν τα εξής: 
 +  * Δεσμεύουν την απαραίτητη μνήμη για το νέο αντικείμενο. 
 +  * Αρχικοποιούν το αντικείμενο με βάση τις αρχικές τιμές των παραμέτρων με τις οποίες καλείται ο κατασκευαστής.
  
 ==== Περιεχόμενα της Κλάσης ==== ==== Περιεχόμενα της Κλάσης ====
  
 Κάθε κλάση περιέχει κατά βάση τρία (3) πράγματα:​ Κάθε κλάση περιέχει κατά βάση τρία (3) πράγματα:​
-  - Δεδομένα. Τα δεδομένα διακρίνονται σε:+  - **Δεδομένα**. Τα δεδομένα διακρίνονται σε:
     * Βασικούς τύπους δεδομένων (Primitive Types), char, int, long, float, double, arrays κλπ     * Βασικούς τύπους δεδομένων (Primitive Types), char, int, long, float, double, arrays κλπ
     * Σύνθετους τύπους δεδομένων (Reference Types), Strings, Arrays, Objects κλπ     * Σύνθετους τύπους δεδομένων (Reference Types), Strings, Arrays, Objects κλπ
-  - Object Constructors (κατασκευαστές αντικειμένων) +  - **Kατασκευαστές αντικειμένων**. 
-  - Μεθόδους (συναρτήσεις στην γλώσσα C)+  - **Μεθόδους** (συναρτήσεις στην γλώσσα C) 
 + 
 +==== Κληρονομικότητα ==== 
 + 
 +Στον πραγματικό κόσμο πολλά πράγματα μοιράζονται κοινά χαρακτηριστικά. Για παράδειγμα:​ 
 +  * Υπάρχουν επιμέρους τύποι ποδηλάτων,​ όπως mountain, street, bmx κλπ 
 +  * Υπάρχουν επιμέρους τύποι αυτοκινήτων,​ sport, 4x4, sedan, coupe, supercars, luxury cars. 
 + 
 +Γενικά,​ μπορούμε να ορίσουμε κλάσεις που περιγράφουν γενικότερες έννοιες και στην συνέχεια να τις εξειδικεύσουμε περιγράφοντας έννοιες πιο ειδικές. Για παράδειγμα,​ για ένα τζιπ επιβατικό αυτοκίνητο μπορεί να οριστεί η παρακάτω ιεραρχία. 
 + 
 +//​**Αυτοκινούμενο όχημα** --> **Τετράτροχο αυτοκινούμενο όχημα** --> **Επιβατικό τετράτροχο αυτοκινούμενο όχημα** -> **Επιβατικό τετράτροχο αυτοκινούμενο όχημα για χρήση εκτός δρόμου (τζιπ)** --> **Επιβατικό τετράτροχο αυτοκινούμενο όχημα για χρήση εκτός δρόμου (τζιπ) - συγκεκριμένο μοντέλο **//. 
 + 
 +Με βάση την παραπάνω ιεραρχία,​ μπορούμε να ορίσουμε την αρχική κλάση του αυτοκινούμενου οχήματος,​ την οποία στη συνέχεια να εξειδικεύσουμε σε πιο ειδικές κλάσεις. Οι γλώσσες αντικειμενοστραφούς προγραμματισμού δίνουν την δυνατότητα να δημιουργηθούν ιεραρχίες κλάσεων (//​σχεδίων//​),​ όπου οι πιο ειδικές κλάσεις (**υποκλάσεις - __Sub Classes__**) κληρονομούν τα χαρακτηριστικά των **γονικών (__Super Classes__)** κλάσεων,​ τα οποία εξειδικεύουν περαιτέρω.  
 + 
 +| Στο διπλανή εικόνα παρουσιάζεται το παράδειγμα κληρονομικότητας της κλάσης του ποδηλάτου. Από την γενική κλάση του ποδηλάτου προκύπτουν δύο επιμέρους κλάσεις **α)** το ποδήλατο για δύο επιβάτες **β)** το ποδήλατο με ταχύτητες. | {{:​oop:​bicycle-hierarchy.png?​200 |}} | 
 + 
 +==== Διεπαφές - Interfaces ==== 
 + 
 +Τα αντικείμενα στον πραγματικό κόσμο ορίζουν την διεπαφή τους με τον έξω κόσμο μέσα από συγκεκριμένα εργαλεία που καταλήγουν σε συγκεκριμένες πράξεις. Για παράδειγμα,​  
 +  * τα κουμπιά του υπολογιστή ή του κινητού τηλεφώνου ή της τηλεόρασης ορίζουν τις δυνατότητες αλληλεπίδρασης με την συσκευή.  
 +  * το τιμόνι του ποδηλάτου ορίζει την πορεία του και η ταχύτητα κίνησης των πεταλιών ορίζει την ταχύτητα κίνησης του ποδηλάτου στον δρόμο. 
 + 
 +Ανάλογη είναι η λειτουργία της Διεπαφής για τον αντικειμενοστραφή προγραμματισμό. Ορίζουμε μία **διεπαφή**,​ ως ένα σύνολο από μεθόδους,​ δίνοντας μόνο τους ορισμούς των μεθόδων,​ χωρίς την υλοποίηση τους. Εάν μία κλάση υλοποιεί ΟΛΕΣ τις μεθόδους μιας διεπαφής,​ τότε η κλάση είναι σύμφωνη με την συγκεκριμένη διαπεφή. Ο τρόπος που υλοποιεί κάθε κλάση τις μεθόδους της διεπαφής,​ είναι εσωτερικό θέμα της κλάσης και δεν ελέγχεται από την διεπαφή. Επιπλέον,​ μία κλάση μπορεί να υλοποιεί μία ή περισσότερες διεπαφές. 
 + 
 +<WRAP tip> Στη γλώσσα Java o μεταγλωτιστής απαιτεί τη υλοποίηση όλων των μεθόδων που ορίζει η διεπαφή από την κλάση που τη υλοποιεί. </​WRAP>​ 
 + 
 + 
 + 
 + 
 + 
  
  
oop/introduction.txt · Last modified: 2017/02/16 08:34 by gthanos