User Tools

Site Tools


java:class_methods

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:class_methods [2018/02/09 09:24] gthanosjava:class_methods [2022/02/23 10:00] (current) – [Παραδείγματα μεθόδων] gthanos
Line 25: Line 25:
 ===== Παραδείγματα μεθόδων ===== ===== Παραδείγματα μεθόδων =====
  
-Δείτε το παρακάτω παράδειγμα από την κλάση **Rectangle** που αναπαριστά το ορθογώνιο παραλληλόγραμμο.+Με βάση παράδειγμα της προηγούμενης ενότητας για την κλάση **Rectangle** που αναπαριστά ένα ορθογώνιο παραλληλόγραμμο.
  
 <code java> <code java>
-public class Rectangle { +class Rectangle { 
-  public int width; +     
-  public int height; +  // the Rectangle class has 3 fields 
- +  int width; 
-  public Rectangle(int initWidth, int initHeight) {+  int height; 
 +  Point origin; 
 +     
 +  // the Rectangle class has one constructor 
 +  public Rectangle(int initWidth, int initHeight, Point initOrigin) {
     width = initWidth;     width = initWidth;
     height = initHeight;     height = initHeight;
 +    origin = initOrigin;
   }   }
-  + 
-  public void setWidth(int newWidth ) { width = newWidth; }  +  void setWidth(int newWidth ) { 
-  public void setHeight(int newHeight ) { height = newHeight; }  +    width = newWidth; 
-  public int getWidth() { return width;  } +  } 
-  public int getHeight() { return height;  }  +     
-  public void resize(int dw, int dh) {                                                      +  void setHeight(int newHeight ) { 
-    width +dwheight += dh;  +    height = newHeight; 
 +  } 
 +     
 +  Point getOrigin() { 
 +    return origin; 
 +  } 
 +   
 +  void setOrigin(int newX, int newY) { 
 +    origin.setX(newX); 
 +    origin.setY(newY); 
 +  }  
 +   
 +  void setOrigin(Point newOrigin) { 
 +    origin newOrigin;
   }   }
-  public int getArea() { return width * height; }+  
 } }
  
Line 50: Line 68:
  
 <WRAP important 80% center round> <WRAP important 80% center round>
-Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι ότι οι μέθοδοι της κλάσης έχουν απευθείας πρόσβαση στα πεδία της κλάσης. Στο παραπάνω παράδειγμα, οι μέθοδοι **setWidth** και **getWidth** έχουν απευθείας πρόσβαση στο πεδίο **width** της κλάσης και οι μέθοδοι **setHeight** και **getHeight** έχουν απευθείας πρόσβασης στο πεδιό **height** της κλάσης. Επίσης, η μέθοδος **resize** έχει πρόσβαση στα πεδία **width** και **height**.+Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι ότι οι μέθοδοι της κλάσης έχουν απευθείας πρόσβαση στα πεδία της κλάσης. Στο παραπάνω παράδειγμα, οι μέθοδοι **setWidth** και **getWidth** έχουν απευθείας πρόσβαση στο πεδίο **width** της κλάσης και οι μέθοδοι **setHeight** και **getHeight** έχουν απευθείας πρόσβασης στο πεδιό **height** της κλάσης.
 </WRAP> </WRAP>
  
 ===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης ===== ===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης =====
  
-Επιπλέον, βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι η υπερφόρτωση των μεθόδων (ή συναρτήσεων). Με τον όρο υπερφόρτωση εννοούμε την δυνατότητα που μας δίνει ο Αντικειμενοστραφής Προγραμματισμός να ορίσουμε σε μία κλάση δύο μεθόδους με το ίδιο όνομα __αλλά διαφορετικά ορίσματα__. Τα ορίσματα μπορούν να διαφέρουν +Επιπλέον, βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι η υπερφόρτωση των μεθόδων. Με τον όρο υπερφόρτωση εννοούμε την δυνατότητα που μας δίνει ο Αντικειμενοστραφής Προγραμματισμός να ορίσουμε σε μία κλάση δύο μεθόδους με το ίδιο όνομα __αλλά διαφορετικά ορίσματα__. Τα ορίσματα μπορούν να διαφέρουν 
   - ως προς τον τύπο τους    - ως προς τον τύπο τους 
   - ως προς τον αριθμό τους και   - ως προς τον αριθμό τους και
Line 61: Line 79:
  
 <WRAP tip 80% center round> <WRAP tip 80% center round>
-Aν και ο compiler της Java αντιλαμβάνεται την διαφορά, δεν αποτελεί ορθή προγραμματιστική πρακτική να έχετε μεθόδους με τον ίδιο αριθμό και τύπο ορισμάτων, τα οποία όμως είναι διατεταγμένα με διαφορετική σειρά.+Δεν αποτελεί ορθή προγραμματιστική πρακτική να έχετε μεθόδους με τον ίδιο αριθμό και τον ίδιο τύπο ορισμάτων, τα οποία όμως είναι διατεταγμένα με διαφορετική σειρά. Aν και ο compiler της Java αντιλαμβάνεται τη διαφορά, ο κώδικας καταλήγει να είναι δυσανάγνωστος και να περιέχει πιθανά λογικά σφάλματα.
 </WRAP> </WRAP>
  
-Ας υποθέσουμε ότι έχουμε την κλάση **DrawChars** η οποία αποτελεί μέρος ενός υποθετικού προγράμματος εκτύπωσης χαρακτήρων στην οθόνη του υπολογιστή. Διαθέτουμε την μέθοδο //draw// η οποία διαθέτει διαφορετικές εκδόσεις ανάλογα με τι εκτυπώνεται κάθε φορά. Το ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου αποφασίζεται από τον compiler με βάση το είδος και τον αριθμό των ορισμάτων.+Στο προηγούμενο παράδειγμα, έχουμε τις εξής δύο εκδόσεις της μεθόδου **setOrigin**:
  
 <code java> <code java>
-public class DrawChars { +  void setOrigin(Point newOrigin) { 
-    ... +    origin = newOrigin; 
-    public void draw(String s) { +  
-        ... +   
-    +  void setOrigin(int newX, int newY) { 
-    public void draw(int i) { +    origin.setX(newX); 
-        ... +    origin.setY(newY); 
-    } +  }
-    public void draw(double f{ +
-        ... +
-    } +
-    public void draw(int i, double f+
-        ... +
-    } +
-}+
 </code> </code>
 +
 +Παρατηρήστε ότι έχουμε δύο μεθόδους με το ίδιο όνομα, οι οποίες διαφοροποιούνται ως προς τον αριθμό και το είδος των ορισμάτων τους. __Ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου, αποφασίζεται από τον compiler με βάση το είδος και τον αριθμό των ορισμάτων__.
 +
  
 |Προηγούμενο: [[:java:class_fields| Τα πεδία της κλάσης ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:class_constructors | Κατασκευαστές της κλάσης ]]| |Προηγούμενο: [[:java:class_fields| Τα πεδία της κλάσης ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:class_constructors | Κατασκευαστές της κλάσης ]]|
  
java/class_methods.1518168263.txt.gz · Last modified: 2018/02/09 09:24 (external edit)