java:class

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 [2015/02/18 08:59]
gthanos [Ο κατασκευαστής της υποκλάσης]
java:class [2017/02/16 09:18]
gthanos
Line 1: Line 1:
 ====== Η Κλάση ====== ====== Η Κλάση ======
  
-Στην ​[[:​oop:​introduction|Εισαγωγή στον Αντικειμενοστραφή Προγραμματισμό]] ​είδαμε την σχέση μεταξύ κλάσης και αντικειμένων. Εδώ θα δούμε πως ορίζουμε μία κλάση και θα ορίσουμε την πρώτη μας κλάση. Στην πιο απλή περίπτωση κάθε κλάση περιέχει ​τα εξής:+Στην ​προηγούμενη ενότητα είδαμε την σχέση μεταξύ κλάσης και αντικειμένων. Εδώ θα δούμε πως ορίζουμε μία κλάση και θα ορίσουμε την πρώτη μας κλάση. Στην πιο απλή περίπτωση κάθε κλάση περιέχει:​
  
   - **δεδομένα ή πεδία (fields)**   - **δεδομένα ή πεδία (fields)**
Line 7: Line 7:
   - **μεθόδους (methods)**   - **μεθόδους (methods)**
  
-Σε προηγούμενα παραδείγματα χρησιμοποιήσαμε την κλάση ​του ποδηλάτου ''​Bicycle''​. Παρακάτω ορίζουμε την κλάση αυτή.+Για τις ανάγκες του ​παρόντος κεφαλαίου θα ορίσουμε την κλάση ​**Rectangle** που απεικονίζει ένα ορθογώνιο παραλληλόγραμμο. Παρακάτω ορίζουμε την κλάση αυτή ​με χρήση δύο παραμέτρων,​ το πλάτος και το ύψος του ορθογωνίου. 
 + 
 +<code java Rectangle.java> 
 + 
 +public class Rectangle { 
 +     
 +  // the Rectangle class has 2 fields 
 +  public int width; 
 +  public int height; 
 +     
 +  // the Rectangle class has one constructor 
 +  public Rectangle(int initWidth, int initHeight) { 
 +    width = initWidth;​ 
 +    height = initHeight;​ 
 +  } 
 + 
 +  public void setWidth(int newWidth ) { 
 +    width = newWidth; 
 +  } 
 +     
 +  public void setHeight(int newHeight ) { 
 +    height = newHeight;​ 
 +  } 
 +   
 +  public int getWidth() { 
 +    return width; 
 +  } 
 +     
 +  public int getHeight() { 
 +    return height; 
 +  } 
 +   
 +  public int area() { 
 +    return width * height; 
 +  }
  
-<code java Bicycle.java>​ 
-public class Bicycle { 
-        ​ 
-    // the Bicycle class has 
-    // three fields 
-    public int cadence; 
-    public int gear; 
-    public int speed; 
-        ​ 
-    // the Bicycle class has 
-    // one constructor 
-    public Bicycle(int startCadence,​ int startSpeed, int startGear) { 
-        gear = startGear; 
-        cadence = startCadence;​ 
-        speed = startSpeed; 
-    } 
-        ​ 
-    // the Bicycle class has 
-    // four methods 
-    public void setCadence(int newValue) { 
-        cadence = newValue; 
-    } 
-        ​ 
-    public void setGear(int newValue) { 
-        gear = newValue; 
-    } 
-        ​ 
-    public void applyBrake(int decrement) { 
-        speed -= decrement; 
-    } 
-        ​ 
-    public void speedUp(int increment) { 
-        speed += increment; 
-    } 
-        ​ 
 } }
 </​code>​ </​code>​
  
-Παρατηρήστε ότι η παραπάνω κλάση αποτελείται από ​δεδομένα (τις μεταβλητές ''​cadence'',​ ''​gear'',​ ''​speed''​) ​και τις παρακάτω μεθόδους.+Παρατηρήστε ότι η παραπάνω κλάση αποτελείται από ​τα πεδία:  
 +  * την μεταβλητή **width** που συμβολίζει το πλάτος του παραλληλογράμμου. 
 +  * την ​μεταβλητή **height** που συμβολίζει το ύψος του παραλληλογράμμου. 
 + 
 +και τις παρακάτω μεθόδους:
 <code java> <code java>
-public void setCadence(int newValue); +  ​public void setWidth(int newWidth ​); 
-public void setGear(int newValue); +  public void setHeight(int newHeight ​); 
-public ​void setGear(int newValue); +  public ​int getWidth(); 
-public ​void applyBrake(int decrement); +  public ​int getHeight(); 
-public ​void speedUp(int increment);+  public ​int area();
 </​code>​ </​code>​
  
-Προς το παρόν αγνοήστε τον προσδιοριστεί **public**, το οποίο θα εξετάσουμε στην συνέχεια.+Προς το παρόν αγνοήστε τον προσδιοριστή **public** ​μπροστά από τα πεδία και τις μεθόδους, τον οποίο θα εξετάσουμε στην συνέχεια.
  
 ===== Ο κατασκευαστής της κλάσης ===== ===== Ο κατασκευαστής της κλάσης =====
Line 63: Line 66:
  
 <code java> <code java>
-public ​Bicycle(int startCadence, int startSpeed, int startGear);+public ​Rectangle(int setWidth, int setHeight);
 </​code>​ </​code>​
  
-Η "​ειδική"​ αυτή μέθοδος αποτελεί τον κατασκευαστή της κλάσης. Ο κατασκευαστής της κλάσης έχει τις εξής ​δύο ​αρμοδιότητες:​ +Η "​ειδική"​ αυτή μέθοδος αποτελεί τον κατασκευαστή της κλάσης. Ο κατασκευαστής της κλάσης έχει τις εξής ​ αρμοδιότητες:​ 
-  - Δεσμεύει την απαραίτητη μνήμη για τα αντικείμενα της κλάσης.+  - Δεσμεύει την απαραίτητη μνήμη για την αποθήκευση του ​αντικειμένου που δημιουργείται.
   - Αρχικοποιεί τα δεδομένα ενός αντικειμένου,​ εφόσον διαθέτει τυπικές παραμέτρους και σώμα (σώμα μιας μεθόδου εννοούμε το τμήμα του κώδικα μέσα στις αγκύλες **{}** ).   - Αρχικοποιεί τα δεδομένα ενός αντικειμένου,​ εφόσον διαθέτει τυπικές παραμέτρους και σώμα (σώμα μιας μεθόδου εννοούμε το τμήμα του κώδικα μέσα στις αγκύλες **{}** ).
 +  - Επιστρέφει ένα δείκτη στην αρχή της περιοχής που έχει δημιουργηθεί το νέο αντικείμενο της κλάσης. Υπό αυτή την έννοια,​ η μεταβλητή του κάθε αντικειμένου είναι ένας δείκτης (αναφορά) που δείχνει στο νέο αντικείμενο.
  
-Αν και ο κατασκευαστής της κλάσης δεν έχει επιστρεφόμενο τύπο, στη πράξη ​επιστρέφει ένα αντικείμενο (ή __πιο σωστά__ τη διεύθυνση ​ενός αντικειμένου) του τύπου της ​κλάσης στην οποία αντιστοιχεί.+<WRAP tip 80% center round> 
 +Η κάθε κλήση του κατασκευαστή της κλάσης δημιουργεί και επιστρέφει ένα αντικείμενο σε κάθε κλήση του.
  
-<WRAP tip> +Κάθε κλάση έχει τουλάχιστον ένα κατασκευαστή (**//μπορεί να έχει και περισσότερους//**).__Εάν δεν έχει οριστεί κατασκευαστής σε μία κλάση ​__o compiler ορίζει ένα κατασκευαστή χωρίς τυπικές παραμέτρους και χωρίς εντολές μέσα στο κυρίως σώμα. ​Ο κατασκευαστής αυτός ονομάζεται **βασικός κατασκευαστής της κλάσης** (default constructor) ​Για την παραπάνω κλάση ​Rectangle ​ο βασικός ​κατασκευαστής θα ήταν o εξής:
-Κάθε κλάση έχει τουλάχιστον ένα κατασκευαστή (μπορεί να έχει και περισσότερους).__Εάν δεν έχει οριστεί κατασκευαστής σε μία κλάση__ o compiler ορίζει ένα κατασκευαστή χωρίς τυπικές παραμέτρους και χωρίς εντολές μέσα στο κυρίως σώμα. Για την παραπάνω κλάση ​Bicycle ​ο default ​κατασκευαστής θα ήταν o εξής:+
  
 <code java> <code java>
-public ​Bicycle() {+public ​Rectangle() {
 } }
 </​code>​ </​code>​
 </​WRAP>​ </​WRAP>​
  
 +/*
 ====== Κληρονομικότητα Κλάσης ====== ====== Κληρονομικότητα Κλάσης ======
  
Line 192: Line 197:
  
 <WRAP tip> <WRAP tip>
-Αν δεν κληθεί κανένας κατασκευστής από τον προγραμματιστή και ο compiler δεν βρει τον default κατασκευαστή της γονικής κλάσης τότε θα εμφανίσει ένα μήνυμα λάθους της μορφής. ​+Αν δεν κληθεί κανένας κατασκευαστής από τον προγραμματιστή και ο compiler δεν βρει τον default κατασκευαστή της γονικής κλάσης τότε θα εμφανίσει ένα μήνυμα λάθους της μορφής. ​
 <​code>​ <​code>​
 error: no suitable constructor found for Bicycle (no arguments) error: no suitable constructor found for Bicycle (no arguments)
 </​code>​ </​code>​
  
-Συνηπώς,​ η αρχικοποίηση του αντικειμένου αποτελεί ευθύνη του προγραμμαστιστή ο οποίος θα πρέπει να φροντίστει είτε να καλέσει τον κατασκευαστή της γονικής κλάσης ή να βεβαιώσει ότι θα υπάρχει ο default κατασκευαστής.+Συνηπώς,​ η αρχικοποίηση του αντικειμένου αποτελεί ευθύνη του προγραμματιστή ο οποίος θα πρέπει να φροντίσει είτε να καλέσει τον κατασκευαστή της γονικής κλάσης ή να βεβαιώσει ότι θα υπάρχει ο default κατασκευαστής.
 </​WRAP>​ </​WRAP>​
  
Line 212: Line 217:
     }     }
 </​code>​ </​code>​
-δηλαδή η αντικατάσταση του κώδικα που περιέχει ο κατασκευστής της γονικής κλάσης μέσα στον κατασκευαστή της υποκλάσης **__δεν αναιρεί__** την ανάγκη να εκτελεστεί πρώτα ο default κατασκευατής της γονικής κλάσης.+δηλαδή η αντικατάσταση του κώδικα που περιέχει ο κατασκευαστής της γονικής κλάσης μέσα στον κατασκευαστή της υποκλάσης **__δεν αναιρεί__** την ανάγκη να εκτελεστεί πρώτα ο default κατασκευαστής της γονικής κλάσης.
  
 +*/
  
-|Προηγούμενο:​ [[:java:install| Εγκατάσταση ​Java]] | Επόμενο:​ [[:​java:​class_fields | Τα πεδία (δεδομενα) της κλάσης]]|+|Προηγούμενο:​ [[:java:break_loop_statements ​ 
 +Εντολές τερματισμού και ελέγχου ​της ανακύκλωσης]] | [[:toc | Περιεχόμενα]] | Επόμενο:​ [[:​java:​class_fields | Τα πεδία (δεδομένα) της κλάσης]]|
  
java/class.txt · Last modified: 2020/02/20 14:24 by gthanos