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/02/18 12:20]
gthanos [Πλεονεκτήματα του Αντικ/στραφούς Προγραμματισμού]
oop:introduction [2015/07/05 07:24]
gthanos
Line 7: Line 7:
  
 Τα "​αντικείμενα"​ στον πραγματικό κόσμο έχουν δύο βασικά χαρακτηριστικά:​ Τα "​αντικείμενα"​ στον πραγματικό κόσμο έχουν δύο βασικά χαρακτηριστικά:​
-  - **Κατάσταση (state):** Κάθε αντικείμενο διέπεται από συγκεκριμένα χαρακτηριστικά που ορίζουν την κατάσταση του. Για παράδειγμα ένα αυτοκίνητο έχω συγκεκριμένο χρώμα, ανήκει σε συγκεκριμένο μοντέλο και κάθε χρονική στιγμή έχει μία ταχύτητα και μία κατεύθυνση κίνησης. Τα παραπάνω χαρακτηριστικά διέπουν όλα τα αυτοκίνητα,​ αλλά κάθε αυτοκίνητο έχει τις δικές του τιμές οι οποίες μπορεί να διαφέρουν από τις τιμές άλλων αυτοκινήτων.+  - **Κατάσταση (state):** Κάθε αντικείμενο διέπεται από συγκεκριμένα χαρακτηριστικά που ορίζουν την κατάσταση του. Για παράδειγμα ένα αυτοκίνητο έχει συγκεκριμένο χρώμα, ανήκει σε συγκεκριμένο μοντέλο και κάθε χρονική στιγμή έχει μία ταχύτητα και μία κατεύθυνση κίνησης. Τα παραπάνω χαρακτηριστικά διέπουν όλα τα αυτοκίνητα,​ αλλά κάθε αυτοκίνητο έχει τις δικές του τιμές οι οποίες μπορεί να διαφέρουν από τις τιμές άλλων αυτοκινήτων.
   - **Συμπεριφορά (behaviour)**:​ Κάθε αντικείμενο διέπεται από συγκεκριμένους κανόνες συμπεριφοράς. Για παράδειγμα σε ένα αυτοκίνητο εάν στρίψουμε το τιμόνι στα αριστερά το αυτοκίνητο κινείται αριστερά. __Ο παραπάνω γενικός κανόνας ισχύει για όλα τα αυτοκίνητα__. Η σχέση μεταξύ της γωνίας στροφής του τιμονιού του αυτοκινήτου και της αλλαγή πορείας που αυτή συνεπάγεται μπορεί να διαφέρει μεταξύ διαφορετικών μοντέλων.   - **Συμπεριφορά (behaviour)**:​ Κάθε αντικείμενο διέπεται από συγκεκριμένους κανόνες συμπεριφοράς. Για παράδειγμα σε ένα αυτοκίνητο εάν στρίψουμε το τιμόνι στα αριστερά το αυτοκίνητο κινείται αριστερά. __Ο παραπάνω γενικός κανόνας ισχύει για όλα τα αυτοκίνητα__. Η σχέση μεταξύ της γωνίας στροφής του τιμονιού του αυτοκινήτου και της αλλαγή πορείας που αυτή συνεπάγεται μπορεί να διαφέρει μεταξύ διαφορετικών μοντέλων.
  
 Σε αναλογία των παραπάνω,​ τα αντικείμενα στον αντικειμενοστραφή προγραμματισμό διαθέτουν:​ Σε αναλογία των παραπάνω,​ τα αντικείμενα στον αντικειμενοστραφή προγραμματισμό διαθέτουν:​
   * **Δεδομένα //​(μεταβλητές)//:​** Τα δεδομένα περιγράφουν την κατάσταση του κάθε αντικειμένου και μπορεί η τιμή τους να διαφέρει από αντικείμενο σε αντικείμενο.   * **Δεδομένα //​(μεταβλητές)//:​** Τα δεδομένα περιγράφουν την κατάσταση του κάθε αντικειμένου και μπορεί η τιμή τους να διαφέρει από αντικείμενο σε αντικείμενο.
-  * **Μεθόδους //​(συναρτήσεις)//:​** Οι μέθοδοι περιγράφουν την συμπεριφορά του αντικειμένου και είναι κοινές για όλα τα αντικείμενα ενός συγκεκριμένου τύπου. Για παράδειγμα όλα τα αυτοκίνητα ενός συγκεκριμένου μοντέλου διέπονται απο΄την ίδια σχέση μεταξύ της γωνίας στροφής του τιμονιού και της γωνίας στροφής των δύο μπροστινών τροχών.+  * **Μεθόδους //​(συναρτήσεις)//:​** Οι μέθοδοι περιγράφουν την συμπεριφορά του αντικειμένου και είναι κοινές για όλα τα αντικείμενα ενός συγκεκριμένου τύπου. Για παράδειγμα όλα τα αυτοκίνητα ενός συγκεκριμένου μοντέλου διέπονται από την ίδια σχέση μεταξύ της γωνίας στροφής του τιμονιού και της γωνίας στροφής των δύο μπροστινών τροχών.
  
 ===== Η Κλάση ===== ===== Η Κλάση =====
Line 69: Line 69:
  
 Τα αντικείμενα στον πραγματικό κόσμο ορίζουν την διεπαφή τους με τον έξω κόσμο μέσα από συγκεκριμένα εργαλεία που καταλήγουν σε συγκεκριμένες πράξεις. Για παράδειγμα, ​ Τα αντικείμενα στον πραγματικό κόσμο ορίζουν την διεπαφή τους με τον έξω κόσμο μέσα από συγκεκριμένα εργαλεία που καταλήγουν σε συγκεκριμένες πράξεις. Για παράδειγμα, ​
-  * τα κουμπιά ​του υπολογιστή ή του κινητού τηλεφώνου ή της τηλεόρασης ορίζουν τις δυνατότητες αλληλεπίδρασης με την συσκευή.  +  * τα κουμπιά ​και η οθόνη ​του κινητού τηλεφώνου ή της τηλεόρασης ορίζουν τις δυνατότητες αλληλεπίδρασης με την συσκευή.  
-  * το τιμόνι του ποδηλάτου ορίζει την πορεία του και η ταχύτητα ​κίνησης ​των πεταλιών ορίζει την ταχύτητα κίνησης του ποδηλάτου στον δρόμο.+  * Το πληκτρολόγιο, το ποντίκι και η οθόνη ορίζουν τις δυνατότητες αλληλεπίδρασης ​με έναν επιτραπέζιο υπολογιστή.
  
-Ανάλογη είναι η λειτουργία της **διεπαφής** για τον αντικειμενοστραφή προγραμματισμό. Ορίζουμε μία **διεπαφή**,​ ως ένα σύνολο από μεθόδους,​ δίνοντας μόνο τους ορισμούς των μεθόδων,​ χωρίς την υλοποίηση τους. Εάν μία κλάση υλοποιεί ΟΛΕΣ τις μεθόδους μιας διεπαφής,​ τότε η κλάση είναι σύμφωνη με την συγκεκριμένη διαπεφή. Ο τρόπος που υλοποιεί κάθε κλάση τις μεθόδους της διεπαφής,​ είναι εσωτερικό θέμα της κλάσης και δεν ελέγχεται από την διεπαφή. Επιπλέον,​ μία κλάση μπορεί να υλοποιεί μία ή περισσότερες διεπαφές.+Ανάλογη είναι η λειτουργία της **διεπαφής** για τον αντικειμενοστραφή προγραμματισμό. Ορίζουμε μία **διεπαφή**,​ ως ένα σύνολο από μεθόδους ​(δηλ τρόπους αλληλεπίδρασης με τα αντικείμενα), δίνοντας μόνο τους ορισμούς των μεθόδων,​ χωρίς την υλοποίηση τους. Εάν μία κλάση υλοποιεί ΟΛΕΣ τις μεθόδους μιας διεπαφής,​ τότε η κλάση είναι σύμφωνη με την συγκεκριμένη διεπαφή. Ο τρόπος που υλοποιεί κάθε κλάση τις μεθόδους της διεπαφής,​ είναι εσωτερικό θέμα της κλάσης και δεν ελέγχεται από την διεπαφή. Επιπλέον,​ μία κλάση μπορεί να υλοποιεί μία ή περισσότερες διεπαφές.
  
-<WRAP tip> Στη γλώσσα Java o μεταγλωτιστής απαιτεί τη υλοποίηση όλων των μεθόδων που ​ορίζει η διεπαφή από ​την ​κλάση που την υλοποιεί. </​WRAP>​+Ας υποθέσουμε ότι ορίζεται ​η διεπαφή ''​MotorPropelled'' ​η οποία περιγράφει ένα ​σύνολο ​μεθόδων που ​πρέπει να υλοποιούνται από ​μία ​κλάση προκειμένου τα αντικείμενα της κλάσης αυτής να είναι ''​MotorPropelled''​ (δηλαδή να κινούνται και με χρήση μηχανής εσωτερικής καύσης). Ας υποθέσουμε ότι οι μέθοδοι που χρειαζόμαστε ​είναι οι παρακάτω:​ 
 +  * engineStart 
 +  * engineStop 
 +  * accelerate 
 +  * getFuelConsumption 
 +  * addFuel
  
-Για παράδειγμα στη γλώσσα ​Java μπορεί να οριστεί η παρακάτω διεπαφή+Αν οποιαδήποτε κλάση υλοποιεί τις ​παραπάνω μεθόδους τότε μπορούμε να πούμε ότι υλοποιεί το συγκεκριμένο interface, δηλ τα αντικείμενα της κλάσης αυτής είναι MotorPropelled. Η νέα κλάση μπορεί να είναι κάποια υποκλάση μιας ήδη γνωστής κλάσης (π.χ. μία υποκλάση της κλάσης ''​Bicycle''​) ​αλλά ​μπορεί να είναι και οποιαδήποτε άλλη κλάση αυτοκινούμενου οχήματος ακόμη και μία κλάση που ορίζεται εξ' ​αρχής. 
  
-<code java> +Στον αντικειμενοστραφή προγραμματισμό,​ όσες κλάσεις υλοποιούν όλες τις παραπάνω μεθόδους,​ υλοποιούν συνολικά το interface. Ως εκ τούτου υποστηρίζουν τις ιδιότητες του interface αυτού.
-interface ​Bicycle {  +
-  void changeCadence(int newValue);  +
-  void changeGear(int newValue);  +
-  void speedUp(int increment);  +
-  void applyBrakes(int decrement);  +
-+
-</​code>​+
  
-Η παρακάτω κλάση υλοποιεί το interface Bicycle ως εξής: 
- 
-<code java> 
-class ACMEBicycle implements Bicycle { 
- 
-    int cadence = 0; int speed = 0; int gear = 1; 
-    
-    void changeCadence(int newValue) { 
-         ​cadence = newValue; 
-    } 
-    void changeGear(int newValue) { 
-         gear = newValue; 
-    } 
-    void speedUp(int increment) { 
-         speed = speed + increment; ​   
-    } 
-    void applyBrakes(int decrement) { 
-         speed = speed - decrement; 
-    } 
-    void printStates() { 
-         ​System.out.println("​cadence:"​ + 
-             ​cadence + " speed:"​ +  
-             speed + " gear:" + gear); 
-    } 
-} 
-</​code>​ 
  
 ==== Πλεονεκτήματα του Αντικ/​στραφούς Προγραμματισμού ==== ==== Πλεονεκτήματα του Αντικ/​στραφούς Προγραμματισμού ====
oop/introduction.txt · Last modified: 2017/02/16 08:34 by gthanos