java:class_fields
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:class_fields [2017/01/27 15:18] – [Απόκρυψη δεδομένων και εσωτερικής υλοποίησης] gthanos | java:class_fields [2022/02/23 10:11] (current) – gthanos | ||
---|---|---|---|
Line 6: | Line 6: | ||
- Τα ονόματα των μεταβλητών είναι case-sensitive. Κάθε μεταβλητή μπορεί να ξεκινά με ένα γράμμα της αλφαβήτου (κεφαλαίο ή μικρό), | - Τα ονόματα των μεταβλητών είναι case-sensitive. Κάθε μεταβλητή μπορεί να ξεκινά με ένα γράμμα της αλφαβήτου (κεφαλαίο ή μικρό), | ||
- | - Οι υπόλοιποι χαρακτήρες των μεταβλητών σας μπορεί να είναι γράμματα (κεφαλαία και μικρά), | + | - Οι υπόλοιποι χαρακτήρες των μεταβλητών σας μπορεί να είναι γράμματα (κεφαλαία και μικρά), |
- Αν το όνομα της μεταβλητής σας αποτελείται από μία λέξη τότε γράψτε την λέξη αυτή με μικρά γράμματα (π.χ. role, colour, speed). Εάν η μεταβλητή σας περιέχει δύο λέξεις ενώστε τις λέξεις αυτές κάνοντας το πρώτο γράμμα κάθε λέξης κεφαλαίο (π.χ. adminRole, brighterColour, | - Αν το όνομα της μεταβλητής σας αποτελείται από μία λέξη τότε γράψτε την λέξη αυτή με μικρά γράμματα (π.χ. role, colour, speed). Εάν η μεταβλητή σας περιέχει δύο λέξεις ενώστε τις λέξεις αυτές κάνοντας το πρώτο γράμμα κάθε λέξης κεφαλαίο (π.χ. adminRole, brighterColour, | ||
- Εάν η μεταβλητή σας ορίζεται ως σταθερά, | - Εάν η μεταβλητή σας ορίζεται ως σταθερά, | ||
Line 12: | Line 12: | ||
===== Τύποι πεδίων της κλάσης ===== | ===== Τύποι πεδίων της κλάσης ===== | ||
- | Μία κλάση μπορεί να διαθέτει | + | Μία κλάση μπορεί να διαθέτει |
- | - [[java: | + | - **[[java: |
- | - [[java: | + | - **[[java: |
- | Βασικούς τύπους δεδομένων συναντήσαμε ήδη στην προηγούμενη σελίδα. **Reference** τύποι | + | === Βασικοί |
- | {{ :java:rectangle-origin.png? | + | Βασικοί τύποι δεδομένων είναι οι ακεραιες μεταβλητές που συναντήσαμε στην [[java:class|κλάση Rectangle της προηγούμενης σελίδας]]. Οι βασικοί τύποι δεδομένων περιγράφονται περιληπτικά στον παρακάτω πίνακα: |
- | <code java Point.java> | + | ^ τύπος δεδομένων ^ byte ^ short ^ int ^ long ^ float ^ double ^ boolean ^ char ^ |
+ | | αριθμός bits | 8 | 16 | 32 | 64 | 32-bit IEEE 754 floating point | 64-bit IEEE 754 floating point | not-applicable<color red> | ||
+ | | αριθμός bytes | 1 | 2 | 4 | 8 | 4 | 8 | not-applicable< | ||
+ | | εύρος τιμών | ||
- | public class Point { | + | <color red>*</color> Ο τύπος **boolean** λαμβάνει μόνο δύο τιμές. Ο αριθμός των bytes που καταλαμβάνονται δεν ορίζεται και πιθανόν διαφέρει από υλοποίηση σε υλοποίηση JVM. |
- | private int x; | + | |
- | private int y; | + | |
- | + | ||
- | public Point(int xPos, int yPos) { | + | |
- | x = xPos; | + | |
- | y = yPos; | + | |
- | } | + | |
- | + | ||
- | public int getX() { | + | |
- | return x; | + | |
- | } | + | |
- | + | ||
- | public void setX(int xPos) { | + | |
- | x = xPos; | + | |
- | } | + | |
- | + | ||
- | public int getY() { | + | |
- | return y; | + | |
- | } | + | |
- | + | ||
- | public void setY(int yPos) { | + | |
- | y = yPos; | + | |
- | } | + | |
- | } | + | |
- | </code> | + | |
- | Με χρήση της παραπάνω | + | === Αναφορικοί Τύποι === |
- | <code java Rectangle.java> | + | Αναφορικοί (reference) τύποι δεδομένων είναι οι μη βασικοί τύποι δεδομένων που περιγράφονται από κλάσεις. Για παράδειγμα, |
- | public class Rectangle { | + | |
- | + | {{ : | |
- | // the Rectangle class has 3 fields | + | |
- | private int width; | + | |
- | private int height; | + | |
- | private | + | |
- | + | ||
- | // the Rectangle class has one constructor | + | |
- | public Rectangle(int initWidth, int initHeight, Point initOrigin) { | + | |
- | width = initWidth; | + | |
- | | + | |
- | | + | |
- | } | + | |
- | public | + | <code java Point.java> |
- | | + | class Point { |
+ | int x; | ||
+ | int y; // y coordinate | ||
+ | |||
+ | | ||
+ | | ||
+ | y = yPos; | ||
} | } | ||
- | | + | |
- | | + | int getX() { |
- | | + | |
} | } | ||
- | | + | |
- | | + | void setX(int xPos) { |
- | | + | |
} | } | ||
| | ||
- | | + | |
- | | + | |
} | } | ||
| | ||
- | | + | void setY(int yPos) { |
- | | + | |
- | origin.setY(newY); | + | |
} | } | ||
- | /* | + | } |
- | // this method cannot compile as long as x,y | + | |
- | // are declared private. | + | |
- | public void setOrigin(int newX, int newY) { | + | |
- | origin.x = newX; | + | |
- | origin.y = newY; | + | |
- | } | + | |
- | */ | + | |
- | } | + | |
</ | </ | ||
- | Η κλάση '' | + | Με χρήση της παραπάνω κλάσης η κλάση '' |
- | + | ||
- | <WRAP todo 80% center round> | + | |
- | Μεταγλωττίστε τις δύο παραπάνω κλάσεις γράφοντας | + | |
- | < | + | |
- | javac Point.java | + | |
- | javac Rectangle.java | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | ===== Διάκριση μεταξύ πεδίων με τον προσδιοριστή πρόσβασης public και private ===== | + | |
- | + | ||
- | Πιθανόν να παρατηρήσατε νωρίτερα τους προσδιοριστές **public** και **private**. Οι προσδιοριστές αυτοί αφορούν την προσβασιμότητα των πεδίων ή των μεθόδων της κλάσης από άλλες κλάσεις. Στη συνέχεια θα δούμε και τον προσδιοριστή τύπου **protected** καθώς και την πιθανή έλλειψη προσδιοριστή τύπου, ο οποίος από μόνος του είναι ένας επιπλέον προσδιοριστής. Για την ώρα θα εξετάσουμε | + | |
- | + | ||
- | Όταν __ένα πεδίο ή μία μέθοδος__ ορίζεται ως **public** τότε αυτό είναι | + | |
- | - άλλες κλάσεις που περιέχουν πεδία που ανήκουν στη συγκεκριμένη κλάση. Για παράδειγμα, | + | |
- | - [[java: | + | |
- | + | ||
- | Με βάση τα παραπάνω | + | |
- | <code java> | + | |
- | private int x; | + | |
- | private int y; | + | |
- | </ | + | |
- | + | ||
- | Σε αυτή την περίπτωση, | + | |
- | * public int getX() | + | |
- | * public int setX(int xPos) | + | |
- | * public int getY() | + | |
- | * public int setY(int yPos) | + | |
- | + | ||
- | Ο παραπάνω περιορισμός δεν θα υπήρχε εάν τα πεδία της κλάσης **Point** είχαν οριστεί ως **public** αντί για **private**. | + | |
- | + | ||
- | <WRAP todo 80% center round> | + | |
- | Αλλάξτε τον προσδιοριστή πρόσβασης για τα πεδία της κλάσης **Point** από **private** σε **public**. Βγάλτε από τα σχόλια την | + | |
- | </ | + | |
- | + | ||
- | ===== Απόκρυψη δεδομένων και εσωτερικής υλοποίησης ===== | + | |
- | + | ||
- | Ένα από τα βασικά χαρακτηριστικά του Αντικειμενοστραφούς Προγραμματισμούς είναι η απόκρυψη των δεδομένων και της εσωτερικής υλοποίησης των κλάσεων σε τρίτες κλάσεις που τις χρησιμοποιούν. Κατά κανόνα, | + | |
- | + | ||
- | Ακολουθώντας την παραπάνω πρακτική θα επαναορίσουμε την κλάση **Rectangle**, | + | |
<code java Rectangle.java> | <code java Rectangle.java> | ||
- | + | class Rectangle { | |
- | public | + | |
| | ||
// the Rectangle class has 3 fields | // the Rectangle class has 3 fields | ||
- | | + | int width; |
- | | + | int height; |
- | | + | Point origin; |
| | ||
// the Rectangle class has one constructor | // the Rectangle class has one constructor | ||
Line 155: | Line 78: | ||
} | } | ||
- | | + | void setWidth(int newWidth ) { |
width = newWidth; | width = newWidth; | ||
- | } | ||
- | | ||
- | public int getWidth() { | ||
- | return width; | ||
} | } | ||
| | ||
- | | + | void setHeight(int newHeight ) { |
height = newHeight; | height = newHeight; | ||
- | } | ||
- | | ||
- | public int getHeight() { | ||
- | return height; | ||
} | } | ||
| | ||
- | | + | void setOrigin(Point newOrigin) { |
origin = newOrigin; | origin = newOrigin; | ||
} | } | ||
| | ||
- | | + | Point getOrigin() { |
return origin; | return origin; | ||
} | } | ||
| | ||
+ | int area() { | ||
+ | return width * height; | ||
+ | } | ||
} | } | ||
</ | </ | ||
- | Για | + | Η κλάση '' |
|Προηγούμενο: | |Προηγούμενο: |
java/class_fields.1485530328.txt.gz · Last modified: 2017/01/27 15:18 by gthanos