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 revision Previous revision
Next revision
Previous revision
java:class_methods [2017/02/16 10:00]
gthanos
java:class_methods [2022/02/23 10:00]
gthanos [Παραδείγματα μεθόδων]
Line 3: Line 3:
 Ο ορισμός οποιασδήποτε μεθόδου στη Java περιέχει τα εξής πεδία Ο ορισμός οποιασδήποτε μεθόδου στη Java περιέχει τα εξής πεδία
  
-<color red><πρ. πρόσβασης></color> <color green><επιστ. τύπος></color> <color magenta><όνομα></color> (<color orange><λίστα περαμέτρων></color>) <color gray>Exceptions</color> **{ +<color red><πρ. πρόσβασης></color> <color green><επιστ. τύπος></color> <color magenta><όνομα></color> (<color orange><λίστα περαμέτρων></color>) <color gray>Exceptions</color> **{**.....**}**
-}**+
  
-  - <color redΠροσδιοριστές πρόσβασης</color>, όπως //public// ή //private//.+  - <color red>Προσδιοριστές πρόσβασης</color>, όπως //public// ή //private//.
   - <color green>Τον τύπο της επιστρεφόμενης τιμής</color> ή void εάν η μέθοδος δεν επιστρέφει κάτι.   - <color green>Τον τύπο της επιστρεφόμενης τιμής</color> ή void εάν η μέθοδος δεν επιστρέφει κάτι.
   - <color magenta>Το όνομα της μεθόδου</color>   - <color magenta>Το όνομα της μεθόδου</color>
Line 12: Line 11:
   - Μία σειρά από <color gray>Exceptions</color> (θα συζητηθούν αργότερα).   - Μία σειρά από <color gray>Exceptions</color> (θα συζητηθούν αργότερα).
   - Το κυρίως σώμα της μεθόδου, το οποίο περιέχεται μέσα σε αγκύλες **{}**.   - Το κυρίως σώμα της μεθόδου, το οποίο περιέχεται μέσα σε αγκύλες **{}**.
- 
  
 ===== Κανόνες ονοματολογίας ===== ===== Κανόνες ονοματολογίας =====
Line 24: Line 22:
     - setLatitude     - setLatitude
     - isEmpty     - isEmpty
-  - H λίστα των παραμέτρων μέσα σε παρένθεση, χωρισμένες με κόμμα. Κάθε παράμετρος εκτός από το όνομά της οφείλει να διαθέτει και τον τύπο της, π.χ. ''int speed'' ή ''double latitude''. Εάν δεν υπάρχουν παράμετροι το περιεχόμενο των παρενθέσεων είναι κενό. 
-  - Μία σειρά από Exceptions (θα συζητηθούν αργότερα). 
-  - Το κυρίως σώμα της μεθόδου, το οποίο περιέχεται μέσα σε αγκύλες. 
  
-Παρακάτω δίνονται τυπικά παραδείγματα μεθόδων:+===== Παραδείγματα μεθόδων ===== 
 + 
 +Με βάση παράδειγμα της προηγούμενης ενότητας για την κλάση **Rectangle** που αναπαριστά ένα ορθογώνιο παραλληλόγραμμο.
  
 <code java> <code java>
-  public void setWidth(int newWidth ) {+class Rectangle { 
 +     
 +  // the Rectangle class has 3 fields 
 +  int width; 
 +  int height; 
 +  Point origin; 
 +     
 +  // the Rectangle class has one constructor 
 +  public Rectangle(int initWidth, int initHeight, Point initOrigin) { 
 +    width = initWidth; 
 +    height = initHeight; 
 +    origin = initOrigin; 
 +  } 
 + 
 +  void setWidth(int newWidth ) {
     width = newWidth;     width = newWidth;
-  } 
-   
-  public int getWidth() { 
-    return width; 
   }   }
          
-  public void setHeight(int newHeight ) {+  void setHeight(int newHeight ) {
     height = newHeight;     height = newHeight;
-  } 
-   
-  public int getHeight() { 
-    return height; 
   }   }
          
-  public void setColor(int[] newColor) { +  Point getOrigin() { 
-    color = newColor;+    return origin;
   }   }
      
-  public int[] getColor() { +  void setOrigin(int newX, int newY) { 
-    return color+    origin.setX(newX); 
-  }+    origin.setY(newY)
 +  } 
      
-  public void setPoint(Point newOrigin) {+  void setOrigin(Point newOrigin) {
     origin = newOrigin;     origin = newOrigin;
   }   }
      
-  public Point getPoint() { +} 
-    return origin; +
-  }+
 </code> </code>
 +
 +<WRAP important 80% center round>
 +Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι ότι οι μέθοδοι της κλάσης έχουν απευθείας πρόσβαση στα πεδία της κλάσης. Στο παραπάνω παράδειγμα, οι μέθοδοι **setWidth** και **getWidth** έχουν απευθείας πρόσβαση στο πεδίο **width** της κλάσης και οι μέθοδοι **setHeight** και **getHeight** έχουν απευθείας πρόσβασης στο πεδιό **height** της κλάσης.
 +</WRAP>
  
 ===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης ===== ===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης =====
  
-Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι η υπερφόρτωση των μεθόδων (ή συναρτήσεων). Με τον όρο υπερφόρτωση εννοούμε την δυνατότητα που μας δίνει ο Αντικειμενοστραφής Προγραμματισμός να ορίσουμε σε μία κλάση δύο μεθόδους με το ίδιο όνομα __αλλά διαφορετικά ορίσματα__. Τα ορίσματα μπορούν να διαφέρουν +Επιπλέον, βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι η υπερφόρτωση των μεθόδων. Με τον όρο υπερφόρτωση εννοούμε την δυνατότητα που μας δίνει ο Αντικειμενοστραφής Προγραμματισμός να ορίσουμε σε μία κλάση δύο μεθόδους με το ίδιο όνομα __αλλά διαφορετικά ορίσματα__. Τα ορίσματα μπορούν να διαφέρουν 
   - ως προς τον τύπο τους    - ως προς τον τύπο τους 
   - ως προς τον αριθμό τους και   - ως προς τον αριθμό τους και
Line 72: 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) { +
-        ... +
-    } +
-    public void draw(int i) { +
-        ... +
-    } +
-    public void draw(double f) { +
-        ... +
-    } +
-    public void draw(int i, double f) { +
-        ... +
-    } +
-+
-</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> +
- +
-==== Υπερφόρτωση κατασκευαστών ==== +
- +
-Ανάλογη με την υπερφόρτωση μεθόδων είναι και η υπερφόρτωση κατασκευαστών. Όπως μπορούμε να έχουμε πολλές μεθόδους με το ίδιο όνομα αλλά διαφορετικά ορίσματα, έτσι μπορούμε να έχουμε και πολλούς κατασκευαστές με διαφορετικά ορίσματα. Δείτε το παράδειγμα που ακολουθεί για την κλάση Rectangle της προηγούμενης ενότητας. Στο παράδειγμα αυτό η κλάση διαθέτει τους παρακάτω δύο κατασκευαστές +
- +
-<code java> +
-public Rectangle(int initWidth, int initHeight, Point initOrigin)+
-public Rectangle(int initWidth, int initHeight, int xPos, int yPos); +
-</code> +
- +
- +
-<code java Rectangle.java> +
-public class Rectangle { +
-     +
-  // the Rectangle class has 3 fields +
-  private int width; +
-  private int height; +
-  private Point origin; +
-     +
-  // the Rectangle class has two constructors +
-  public Rectangle(int initWidth, int initHeight, Point initOrigin) { +
-    width = initWidth; +
-    height = initHeight; +
-    origin = initOrigin;+
   }   }
      
-  public Rectangle(int initWidth, int initHeight, int xPos, int yPos) { +  void setOrigin(int newX, int newY) { 
-    width = initWidth; +    origin.setX(newX)
-    height = initHeight+    origin.setY(newY);
-    origin = new Point(xPos,yPos);+
   }   }
-     
-  // the Rectangel class has 3 methods 
-  public void setWidth(int newWidth ) { 
-    width = newWidth; 
-  } 
-   
-  public int getWidth() { 
-    return width; 
-  } 
-     
-  public void setHeight(int newHeight ) { 
-    height = newHeight; 
-  } 
-   
-  public int getHeight() { 
-    return height; 
-  } 
-   
-  public void setOrigin(Point newOrigin) { 
-    origin = newOrigin; 
-  } 
-   
-  public Point getOrigin() { 
-    return origin; 
-  }    
-} 
 </code> </code>
  
 +Παρατηρήστε ότι έχουμε δύο μεθόδους με το ίδιο όνομα, οι οποίες διαφοροποιούνται ως προς τον αριθμό και το είδος των ορισμάτων τους. __Ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου, αποφασίζεται από τον compiler με βάση το είδος και τον αριθμό των ορισμάτων__.
  
  
 |Προηγούμενο: [[:java:class_fields| Τα πεδία της κλάσης ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:class_constructors | Κατασκευαστές της κλάσης ]]| |Προηγούμενο: [[:java:class_fields| Τα πεδία της κλάσης ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:class_constructors | Κατασκευαστές της κλάσης ]]|
  
java/class_methods.txt · Last modified: 2022/02/23 10:00 by gthanos