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
Next revision Both sides next revision
java:class_methods [2015/02/05 09:41]
gthanos [Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης]
java:class_methods [2017/02/16 09:52]
gthanos [Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης]
Line 1: Line 1:
 ====== Μέθοδοι της Κλάσης ====== ====== Μέθοδοι της Κλάσης ======
  
-Προηγουμένως συναντήσαμε ορισμούς μεθόδων. Γενικά,​ κατά τον ορισμό μίας μεθόδου ​μπορούμε να έχουμε τα εξής:+Προηγουμένως συναντήσαμε ορισμούς μεθόδων. Γενικά,​ κατά τον ορισμό μίας μεθόδου έχουμε τα εξής:
  
   - Προσδιοριστές τύπου, όπως **public**, **private**,​ **protected** (θα τον συναντήσουμε στην συνέχεια).   - Προσδιοριστές τύπου, όπως **public**, **private**,​ **protected** (θα τον συναντήσουμε στην συνέχεια).
   - Τον τύπο της επιστρεφόμενης τιμής ή void εάν η μέθοδος δεν επιστρέφει κάτι.   - Τον τύπο της επιστρεφόμενης τιμής ή void εάν η μέθοδος δεν επιστρέφει κάτι.
-  - Το όνομα της μεθόδου. Ισχύει και εδώ ο "​κανόνας"​ ότι τα ονομάτα ξεκινούν με μικρό γράμμα και εάν πρόκειται για ονόματα με περισσότερες από μία λέξεις αυτές χωρίζονται με κεφαλαία γράμματα. Η πρώτη λέξη κάθε μεθόδου θα πρέπει να είναι ρήμα. Μερικά παραδείγματα μπορείτε να δείτε παρακάτω:​+  - Το όνομα της μεθόδου. Ισχύει και εδώ ο "​κανόνας"​ ότι τα ονόματα ξεκινούν με μικρό γράμμα και εάν πρόκειται για ονόματα με περισσότερες από μία λέξεις αυτές χωρίζονται με κεφαλαία γράμματα. Η πρώτη λέξη κάθε μεθόδου θα πρέπει να είναι ρήμα. Μερικά παραδείγματα μπορείτε να δείτε παρακάτω:​
     - run     - run
     - runFast     - runFast
Line 13: Line 13:
     - setLatitude     - setLatitude
     - isEmpty     - isEmpty
-  - H λίστα των παραμέτρων μέσα σε παρένθεση,​ χωρισμένες με κόμμα. Κάθε παράμετρος εκτός από τον ​τύπο της οφείλει να διαθέτει και τον ​προσδιοριστή ​τύπου της, π.χ. ''​int speed''​ ή ''​double latitude''​. Εάν δεν υπάρχουν παράμετροι το περιεχόμενο των παρανθέσεων είναι κενό.+  - H λίστα των παραμέτρων μέσα σε παρένθεση,​ χωρισμένες με κόμμα. Κάθε παράμετρος εκτός από το όνομά της οφείλει να διαθέτει και τον τύπο της, π.χ. ''​int speed''​ ή ''​double latitude''​. Εάν δεν υπάρχουν παράμετροι το περιεχόμενο των παρενθέσεων είναι κενό.
   - Μία σειρά από Exceptions (θα συζητηθούν αργότερα).   - Μία σειρά από Exceptions (θα συζητηθούν αργότερα).
   - Το κυρίως σώμα της μεθόδου,​ το οποίο περιέχεται μέσα σε αγκύλες.   - Το κυρίως σώμα της μεθόδου,​ το οποίο περιέχεται μέσα σε αγκύλες.
  
-Παρακάτω δίνεται ​ένα ​τυπικό παράδειγμα μεθόδου+Παρακάτω δίνονται τυπικά παραδείγματα μεθόδων:
  
 <code java> <code java>
-    ​public int getCadence() { +  public void setWidth(int newWidth ) { 
-        return ​cadence+    width = newWidth; 
-    } +  } 
-  +   
-    public void setCadence(int newValue) { +  ​public int getWidth() { 
-        ​cadence ​newValue+    return ​width
-    +  
-  +    ​ 
-    public int getGear() { +  ​public void setHeight(int newHeight ​) { 
-        return ​gear+    ​height ​newHeight
-    +  
-  +   
-    public void setGear(int newValue) { +  public int getHeight() { 
-        ​gear ​newValue+    return ​height
-    +  
-  +     
-    public int getSpeed() { +  public void setColor(int[] newColor) { 
-        return ​speed+    ​color ​newColor
-    +  
-  +   
-    public void applyBrake(int decrement) { +  public int[] getColor() { 
-        speed -decrement+    return ​color
-    +  
-  +   
-    public ​void speedUp(int increment) { +  public void setPoint(Point newOrigin) { 
-        speed += increment+    ​origin ​newOrigin
-    }+  
 +   
 +  public ​Point getPoint() { 
 +    ​return origin
 +  }
 </​code>​ </​code>​
  
 ===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης ===== ===== Υπερφόρτωση (overloading) των μεθόδων μίας κλάσης =====
  
-Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι η υπερφόρτωση των μεθόδων (ή συναρτήσεων). Με τον όρο υπερφόρτωση εννοούμε την δυνατότητα που μας δίνει ο Αντικειμενοστραφής Προγραμματισμός να ορίσουμε σε μία κλάση δύο μεθόδους με το ίδιο όνομα __αλλά διαφορετικά ορίσματα__. Τα ορίσματα μπορούν να διαφέρουν ​**α)** ​ως προς τον τύπο τους και ​**β)** ​ως προς τον αριθμό τους+Βασικό χαρακτηριστικό του Αντικειμενοστραφούς Προγραμματισμού είναι η υπερφόρτωση των μεθόδων (ή συναρτήσεων). Με τον όρο υπερφόρτωση εννοούμε την δυνατότητα που μας δίνει ο Αντικειμενοστραφής Προγραμματισμός να ορίσουμε σε μία κλάση δύο μεθόδους με το ίδιο όνομα __αλλά διαφορετικά ορίσματα__. Τα ορίσματα μπορούν να διαφέρουν ​ 
 +  - ως προς τον τύπο ​τους  
 +  - ως προς τον αριθμό ​τους και 
 +  - ως προς ​την σειρά ​τους (//αν και ο compiler της Java αντιλαμβάνεται την διαφορά,​ δεν συνίσταται να έχετε μεθόδους με τον ίδιο ​αριθμό ​και ​τύπο ορισμάτων,​ τα οποία όμως είναι διατεταγμένα με διαφορετική σειρά//​)
  
-Ας υποθέσουμε ότι έχουμε την κλάση DrawChars από ένα υποθετικό πρόγραμμα εκτύπωσης χαρακτήρων στην οθόνη. Διαθέτουμε την μέθοδο draw η οποία διαθέτει διαφορετικές εκδόσεις ανάλογα με τι εκτυπώνεται κάθε φορά. Το ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου αποφασίζεται από τον compiler με βάση το είδος και τον αριθμό των ορισμάτων.+Ας υποθέσουμε ότι έχουμε την κλάση ​**DrawChars** από ένα υποθετικό πρόγραμμα εκτύπωσης χαρακτήρων στην οθόνη. Διαθέτουμε την μέθοδο ​//draw// η οποία διαθέτει διαφορετικές εκδόσεις ανάλογα με τι εκτυπώνεται κάθε φορά. Το ποια έκδοση χρησιμοποιείται σε κάθε κλήση της μεθόδου αποφασίζεται από τον compiler με βάση το είδος και τον αριθμό των ορισμάτων.
  
 <code java> <code java>
Line 73: Line 80:
 </​code>​ </​code>​
  
-Στην παραπάνω κλάση αν δεν είχαμε την δυνατότητα **υπερφόρτωσης** των μεθόδων της θα έπρεπε να κάνουμε κάτι σαν το παρακάτω,​ το οποίο καταλήγει σε αισθητικά άσχημο και λιγότερο συντηρίσιμο κώδικα.+Στην παραπάνω κλάση αν δεν είχαμε την δυνατότητα **υπερφόρτωσης** των μεθόδων της θα έπρεπε να κάνουμε κάτι σαν το παρακάτω,​ το οποίο καταλήγει σε αισθητικά άσχημο και λιγότερο συντηρήσιμο κώδικα.
  
 <code c> <code c>
Line 93: Line 100:
 </​code>​ </​code>​
  
-<WRAP info> +<WRAP info 80% center round
-Ανάλογη με την υπερφόρτωση μεθόδων είναι και η υπερφόρτωση κατασκευαστών. Όπως μπορούμε να έχουμε πολλές μεθόδους με το ίδιο όνομα αλλά διαφορετικά ορίσματα,​ έτσι μπορούμε να έχουμε και πολλούς κατασκευαστές με διαφορετικά ορίσματα. Δείτε το παράδειγμα που ακολουθεί για την κλάση ​Bicycle ​της προηγούμενης ​παραγράφου.+Ανάλογη με την υπερφόρτωση μεθόδων είναι και η υπερφόρτωση κατασκευαστών. Όπως μπορούμε να έχουμε πολλές μεθόδους με το ίδιο όνομα αλλά διαφορετικά ορίσματα,​ έτσι μπορούμε να έχουμε και πολλούς κατασκευαστές με διαφορετικά ορίσματα. Δείτε το παράδειγμα που ακολουθεί για την κλάση ​Rectangle ​της προηγούμενης ​ενότητας.
 </​WRAP>​ </​WRAP>​
  
-public class Bicycle ​{ +<code java Rectangle.java>​ 
-         +public class Rectangle ​{
-    private int cadence; +
-    private int gear; +
-    private int speed; +
-    public Coordinates coordinates;​ +
-         +
-    public Bicycle(int startCadence,​ int startSpeed, int startGear, double lat, double log) { +
-        coordinates = new Coordinates( lat, log); +
-        gear = startGear;​ +
-        cadence = startCadence;​ +
-        speed = startSpeed;​ +
-    }+
     ​     ​
-    public Bicycle(int startCadence,​ int startSpeed, int startGear) { +  private ​int width
-        coordinates = new Coordinates( 0.0, 0.0)+  ​private ​int height
-        gear = startGear;​ +  ​private Point origin;
-        cadence = startCadence;​ +
-        speed = startSpeed;​ +
-    } +
-         +
-    public ​int getCadence() { +
-        return cadence+
-    } +
-         +
-    public void setCadence(int newValue) { +
-        cadence = newValue; +
-    } +
-         +
-    public int getGear() { +
-        return gear; +
-    } +
-         +
-    public void setGear(int newValue) { +
-        gear = newValue; +
-    } +
-         +
-    public int getSpeed() { +
-        return speed; +
-    } +
-         +
-    public void applyBrake(int decrement) { +
-        speed -= decrement;​ +
-    } +
-         +
-    public void speedUp(int increment) { +
-        speed += increment;​ +
-    }+
     ​     ​
-    ​public ​Coordinates get_coordinates() { +  ​public ​Rectangle(int initWidth, int initHeight, Point initOrigin) { 
-        ​return coordinates+    width = initWidth
-    }+    ​height = initHeight;​ 
 +    origin = initOrigin;​ 
 +  } 
 +   
 +  public Rectangle(int initWidth, int initHeight, int xPos, int yPos) { 
 +    width = initWidth;​ 
 +    height = initHeight;​ 
 +    origin = new Point(xPos,​yPos);​ 
 +  } 
 +   
 +  // Αυτός λέγεται copy constructor:​ είναι κατασκευαστής που παίρνει ως παράμετρο 
 +  // ένα ήδη υπάρχον αντικείμενο τύπου Rectangle και κατασκευάζει ένα αντίγραφο. 
 +  public Rectangle (Rectangle other) { 
 +    width = other.width;​ 
 +    height = other.height;​ 
 +    origin = new Point(other.origin);​ // εδώ καλούμε τον copy constructor της κλάσης Point 
 +  ​}
     ​     ​
-    ​public void setCoordinates(double lat, double log) { + 
-        ​coordinates.setLatitude(lat); +  ​public void setWidth(int newWidth ​) { 
-        ​coordinates.setLongitude(log); +    width = newWidth; 
-    }+  } 
 +   
 +  public int getWidth() 
 +    return width
 +  } 
 +     
 +  public void setHeight(int newHeight ​
 +    height = newHeight; 
 +  } 
 +   
 +  public int getHeight() { 
 +    ​return height; 
 +  } 
 +     
 +  public void setColor(int[] setColor) { 
 +    color = setColor; 
 +  } 
 +   
 +  public int[] getColor() { 
 +    return color; 
 +  } 
 +   
 +  public void setOrigin(Point newOrigin) { 
 +    origin = newOrigin;​ 
 +  } 
 +   
 +  public Point getOrigin() { 
 +    return origin; 
 +  ​  ​
 } }
 </​code>​ </​code>​
Line 159: Line 168:
  
  
-|Προηγούμενο:​ [[:​java:​class_fields| Τα πεδία της κλάσης ]] | Επόμενο:​ [[:java:objects ​Δημιουργώντας Αντικείμενα - Ο τελεστής new ]]|+|Προηγούμενο:​ [[:​java:​class_fields| Τα πεδία της κλάσης ​]] | [[:toc | Περιεχόμενα ​]] | Επόμενο:​ [[:java:class_constructors ​Κατασκευαστές της κλάσης ]]|
  
java/class_methods.txt · Last modified: 2019/02/22 08:23 by gthanos