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:57]
gthanos [Διεπαφές - Interfaces]
oop:introduction [2015/01/20 14:48]
gthanos [Διεπαφές - Interfaces]
Line 63: Line 63:
   * το τιμόνι του ποδηλάτου ορίζει την πορεία του και η ταχύτητα κίνησης των πεταλιών ορίζει την ταχύτητα κίνησης του ποδηλάτου στον δρόμο.   * το τιμόνι του ποδηλάτου ορίζει την πορεία του και η ταχύτητα κίνησης των πεταλιών ορίζει την ταχύτητα κίνησης του ποδηλάτου στον δρόμο.
  
-Ανάλογη είναι η λειτουργία της ​Διεπαφής για τον αντικειμενοστραφή προγραμματισμό. Ορίζουμε μία **διεπαφή**,​ ως ένα σύνολο από μεθόδους,​ δίνοντας μόνο τους ορισμούς των μεθόδων,​ χωρίς την υλοποίηση τους. Εάν μία κλάση υλοποιεί ΟΛΕΣ τις μεθόδους μιας διεπαφής,​ τότε η κλάση είναι σύμφωνη με την συγκεκριμένη διαπεφή. Ο τρόπος που υλοποιεί κάθε κλάση τις μεθόδους της διεπαφής,​ είναι εσωτερικό θέμα της κλάσης και δεν ελέγχεται από την διεπαφή. Επιπλέον,​ μία κλάση μπορεί να υλοποιεί μία ή περισσότερες διεπαφές.+Ανάλογη είναι η λειτουργία της ​**διεπαφής** για τον αντικειμενοστραφή προγραμματισμό. Ορίζουμε μία **διεπαφή**,​ ως ένα σύνολο από μεθόδους,​ δίνοντας μόνο τους ορισμούς των μεθόδων,​ χωρίς την υλοποίηση τους. Εάν μία κλάση υλοποιεί ΟΛΕΣ τις μεθόδους μιας διεπαφής,​ τότε η κλάση είναι σύμφωνη με την συγκεκριμένη διαπεφή. Ο τρόπος που υλοποιεί κάθε κλάση τις μεθόδους της διεπαφής,​ είναι εσωτερικό θέμα της κλάσης και δεν ελέγχεται από την διεπαφή. Επιπλέον,​ μία κλάση μπορεί να υλοποιεί μία ή περισσότερες διεπαφές.
  
-Στη Java o μεταγλωτιστής απαιτεί τη υλοποίηση όλων των μεθόδων που ορίζει η διεπαφή από την κλάση που τη υλοποιεί.+<WRAP tip> ​Στη ​γλώσσα ​Java o μεταγλωτιστής απαιτεί τη υλοποίηση όλων των μεθόδων που ορίζει η διεπαφή από την κλάση που την υλοποιεί. ​</​WRAP>​
  
 +Για παράδειγμα στη γλώσσα Java μπορεί να οριστεί η παρακάτω διεπαφή
  
 +<code java>
 +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>​
  
 +==== Πλεονεκτήματα του Αντικ/​στραφούς Προγραμματισμού ====
 +  * **Modularity:​** O κώδικας μίας κλάσης μπορεί να σχεδιαστεί και να αναπτυχθεί εντελώς ανεξάρτητα από τον κώδικα άλλης κλάσης. Η υλοποίηση μίας κλάσης μπορεί να αλλάξει ριζικά χωρίς να επηρεαστεί ο κώδικας των κλάσεων που χρησιμοποιούν τη συγκεκριμένη κλάση.
 +  * **Απόκρυψη πληροφορίας:​** Στον αντικειμενοστραφή προγραμματισμό δεν μας ενδιαφέρει η εσωτερική υλοποίηση κάθε κλάσης αλλά μόνο οι δημόσιες (public) μέθοδοι που υλοποιεί.
 +  * **Επαναχρησιμοποίση κώδικα:​** Η κλάση σχεδιάζεται έτσι ώστε να μπορεί να επαναχρησιμοποιηθεί και σε άλλα προγράμματα.
 +  * **Επεκτασιμότητα:​** Η κλάση μπορεί να επεκταθεί μέσω της κληρονομικότητας σε πιο ειδικές κλάσεις.
 +  * **Ευκολότερη αποσφαλμάτωση:​** Κατά την αποσφαλμάτωση ο αρχικός έλεγχος μπορεί να γίνει σε επίπεδο κλάσης (**Unit testing**). Αλλαγές σε μία κλάση δεν συνεπάγονται αλλαγές και σε άλλα σημεία του προγράμματος που χρησιμοποιούν την κλάση αυτή.
  
  
oop/introduction.txt · Last modified: 2017/02/16 08:34 by gthanos