java:class_methods

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Last revision Both sides next revision
java:class_methods [2017/02/16 10:20]
gthanos
java:class_methods [2018/02/16 16:02]
gthanos
Line 1: Line 1:
 ====== Μέθοδοι της Κλάσης ====== ====== Μέθοδοι της Κλάσης ======
- 
  
 Ο ορισμός οποιασδήποτε μεθόδου στη Java περιέχει τα εξής πεδία Ο ορισμός οποιασδήποτε μεθόδου στη Java περιέχει τα εξής πεδία
Line 23: Line 22:
     - setLatitude     - setLatitude
     - isEmpty     - isEmpty
-  - H λίστα των παραμέτρων μέσα σε παρένθεση,​ χωρισμένες με κόμμα. Κάθε παράμετρος εκτός από το όνομά της οφείλει να διαθέτει και τον τύπο της, π.χ. ''​int speed''​ ή ''​double latitude''​. Εάν δεν υπάρχουν παράμετροι το περιεχόμενο των παρενθέσεων είναι κενό. 
-  - Μία σειρά από Exceptions (θα συζητηθούν αργότερα). 
-  - Το κυρίως σώμα της μεθόδου,​ το οποίο περιέχεται μέσα σε αγκύλες. 
  
 ===== Παραδείγματα μεθόδων ===== ===== Παραδείγματα μεθόδων =====
  
-**Οι μέθοδοι της κλάσης έχουν απευθείας πρόσβαση στα πεδία της κλάσης**. ​Δείτε το παρακάτω παράδειγμα από την κλάση **Rectangle** που αναπαριστά το ορθογώνιο παραλληλόγραμμο.+Δείτε το παρακάτω παράδειγμα από την κλάση **Rectangle** που αναπαριστά το ορθογώνιο παραλληλόγραμμο.
  
 <code java> <code java>
Line 52: Line 48:
  
 </​code>​ </​code>​
 +
 +<WRAP important 80% center round>
 +Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι ότι οι μέθοδοι της κλάσης έχουν απευθείας πρόσβαση στα πεδία της κλάσης. Στο παραπάνω παράδειγμα,​ οι μέθοδοι **setWidth** και **getWidth** έχουν απευθείας πρόσβαση στο πεδίο **width** της κλάσης και οι μέθοδοι **setHeight** και **getHeight** έχουν απευθείας πρόσβασης στο πεδιό **height** της κλάσης. Επίσης,​ η μέθοδος **resize** έχει πρόσβαση στα πεδία **width** και **height**.
 +</​WRAP>​
  
 ===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης ===== ===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης =====
  
-Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι η υπερφόρτωση των μεθόδων ​(ή συναρτήσεων). Με τον όρο υπερφόρτωση εννοούμε την δυνατότητα που μας δίνει ο Αντικειμενοστραφής Προγραμματισμός να ορίσουμε σε μία κλάση δύο μεθόδους με το ίδιο όνομα __αλλά διαφορετικά ορίσματα__. Τα ορίσματα μπορούν να διαφέρουν ​+Επιπλέον,​ βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι η υπερφόρτωση των μεθόδων. Με τον όρο υπερφόρτωση εννοούμε την δυνατότητα που μας δίνει ο Αντικειμενοστραφής Προγραμματισμός να ορίσουμε σε μία κλάση δύο μεθόδους με το ίδιο όνομα __αλλά διαφορετικά ορίσματα__. Τα ορίσματα μπορούν να διαφέρουν ​
   - ως προς τον τύπο τους ​   - ως προς τον τύπο τους ​
   - ως προς τον αριθμό τους και   - ως προς τον αριθμό τους και
-  - ως προς την σειρά τους ​(//αν και ο compiler της Java αντιλαμβάνεται την διαφορά,​ δεν συνίσταται να έχετε μεθόδους με τον ίδιο αριθμό και τύπο ορισμάτων,​ τα οποία όμως είναι διατεταγμένα με διαφορετική σειρά//​)+  - ως προς την σειρά τους ​
  
-Ας υποθέσουμε ότι έχουμε την κλάση **DrawChars** από ένα υποθετικό πρόγραμμα εκτύπωσης χαρακτήρων στην οθόνη. Διαθέτουμε την μέθοδο //draw// η οποία διαθέτει διαφορετικές εκδόσεις ανάλογα με τι εκτυπώνεται κάθε φορά. Το ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου αποφασίζεται από τον compiler με βάση το είδος και τον αριθμό των ορισμάτων.+<WRAP tip 80% center round> 
 +Aν και ο compiler της Java αντιλαμβάνεται την διαφορά,​ δεν αποτελεί ορθή προγραμματιστική πρακτική να έχετε μεθόδους με τον ίδιο αριθμό και τύπο ορισμάτων,​ τα οποία όμως είναι διατεταγμένα με διαφορετική σειρά. 
 +</​WRAP>​ 
 + 
 +Ας υποθέσουμε ότι έχουμε την κλάση **DrawChars** ​η οποία ​αποτελεί μέρος ενός υποθετικού προγράμματος ​εκτύπωσης χαρακτήρων στην οθόνη ​του υπολογιστή. Διαθέτουμε την μέθοδο //draw// η οποία διαθέτει διαφορετικές εκδόσεις ανάλογα με τι εκτυπώνεται κάθε φορά. Το ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου αποφασίζεται από τον compiler με βάση το είδος και τον αριθμό των ορισμάτων.
  
 <code java> <code java>
Line 79: Line 83:
 } }
 </​code>​ </​code>​
- 
-Στην παραπάνω κλάση αν δεν είχαμε την δυνατότητα **υπερφόρτωσης** των μεθόδων της θα έπρεπε να κάνουμε κάτι σαν το παρακάτω,​ το οποίο καταλήγει σε αισθητικά άσχημο και λιγότερο συντηρήσιμο κώδικα. 
- 
-<code c> 
-public class DrawChars { 
-    ... 
-    public void drawString(String s) { 
-        ... 
-    } 
-    public void drawInt(int i) { 
-        ... 
-    } 
-    public void drawDouble(double f) { 
-        ... 
-    } 
-    public void drawIntDouble(int i, double f) { 
-        ... 
-    } 
-} 
-</​code>​ 
- 
  
 |Προηγούμενο:​ [[:​java:​class_fields| Τα πεδία της κλάσης ]] | [[:toc | Περιεχόμενα ]] | Επόμενο:​ [[:​java:​class_constructors | Κατασκευαστές της κλάσης ]]| |Προηγούμενο:​ [[:​java:​class_fields| Τα πεδία της κλάσης ]] | [[:toc | Περιεχόμενα ]] | Επόμενο:​ [[:​java:​class_constructors | Κατασκευαστές της κλάσης ]]|
  
java/class_methods.txt · Last modified: 2019/02/22 08:23 by gthanos