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 [2019/02/22 08:25] – [Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης] 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>
  
Line 61: Line 79:
  
 <WRAP tip 80% center round> <WRAP tip 80% center round>
-Aν και ο compiler της Java αντιλαμβάνεται την διαφορά, δεν αποτελεί ορθή προγραμματιστική πρακτική να έχετε μεθόδους με τον ίδιο αριθμό και τύπο ορισμάτων, τα οποία όμως είναι διατεταγμένα με διαφορετική σειρά.+Δεν αποτελεί ορθή προγραμματιστική πρακτική να έχετε μεθόδους με τον ίδιο αριθμό και τον ίδιο τύπο ορισμάτων, τα οποία όμως είναι διατεταγμένα με διαφορετική σειρά. Aν και ο compiler της Java αντιλαμβάνεται τη διαφορά, ο κώδικας καταλήγει να είναι δυσανάγνωστος και να περιέχει πιθανά λογικά σφάλματα.
 </WRAP> </WRAP>
  
-Ας υποθέσουμε ότι έχουμε την κλάση **SumNumbers** η οποία αποτελεί μέρος ενός υποθετικού προγράμματος άθροισης αριθμών. Διαθέτουμε την μέθοδο //sum// η οποία διαθέτει διαφορετικές εκδόσεις αθροισμάτων. Το ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου αποφασίζεται από τον compiler με βάση το είδος και τον αριθμό των ορισμάτων.+Στο προηγούμενο παράδειγμαέχουμε τις εξής δύο εκδόσεις της μεθόδου **setOrigin**:
  
 <code java> <code java>
-public class SumNumbers { +  void setOrigin(Point newOrigin) { 
- +    origin newOrigin
-    public double sum(double []nums) { +  } 
-        double sum 0+   
-        for(double num : nums) sum += num; +  void setOrigin(int newXint newY) { 
-        return sum; +    origin.setX(newX); 
-    } +    origin.setY(newY); 
-    public double sum(double adouble b) { +  }
-        return a+b; +
-    +
-    public double sum(double a, double b, double c+
-        return a+b+c+
-    +
-    // sum double a, count times +
-    public double sum(double a, int count+
-        double sum = 0+
-        for(int i=0; i<count; i++) +
-            sum += a; +
-        return sum; +
-    } +
-}+
 </code> </code>
 +
 +Παρατηρήστε ότι έχουμε δύο μεθόδους με το ίδιο όνομα, οι οποίες διαφοροποιούνται ως προς τον αριθμό και το είδος των ορισμάτων τους. __Ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου, αποφασίζεται από τον compiler με βάση το είδος και τον αριθμό των ορισμάτων__.
 +
  
 |Προηγούμενο: [[:java:class_fields| Τα πεδία της κλάσης ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:class_constructors | Κατασκευαστές της κλάσης ]]| |Προηγούμενο: [[:java:class_fields| Τα πεδία της κλάσης ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:class_constructors | Κατασκευαστές της κλάσης ]]|
  
java/class_methods.1550823916.txt.gz · Last modified: 2019/02/22 08:25 by gthanos