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/02/09 15:08] – [Απόκρυψη δεδομένων και εσωτερικής υλοποίησης] 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: |
- | Βασικούς τύπους δεδομένων συναντήσαμε | + | === Βασικοί Τύποι === |
+ | |||
+ | Βασικοί | ||
+ | |||
+ | ^ τύπος δεδομένων ^ 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< | ||
+ | | αριθμός bytes | 1 | 2 | 4 | 8 | 4 | 8 | not-applicable< | ||
+ | | εύρος τιμών | ||
+ | |||
+ | <color red>*</ | ||
+ | |||
+ | === Αναφορικοί Τύποι === | ||
+ | |||
+ | Αναφορικοί (reference) | ||
{{ : | {{ : | ||
<code java Point.java> | <code java Point.java> | ||
- | + | class Point { | |
- | public | + | int x; // x coordinate |
- | | + | int y; // y coordinate |
- | | + | |
- | + | public Point(int xPos, int yPos) { | |
- | public Point(int xPos, int yPos) { | + | x = xPos; |
- | x = xPos; | + | y = yPos; |
- | y = yPos; | + | } |
- | } | + | |
- | + | int getX() { | |
- | | + | return x; |
- | return x; | + | } |
- | } | + | |
- | + | void setX(int xPos) { | |
- | | + | x = xPos; |
- | x = xPos; | + | } |
- | } | + | |
- | + | int getY() { | |
- | | + | return y; |
- | return y; | + | } |
- | } | + | |
- | + | void setY(int yPos) { | |
- | | + | y = yPos; |
- | y = yPos; | + | } |
- | } | + | |
} | } | ||
</ | </ | ||
- | Με χρήση της παραπάνω κλάσης η κλάση '' | + | Με χρήση της παραπάνω κλάσης η κλάση '' |
<code java Rectangle.java> | <code java Rectangle.java> | ||
- | public | + | class Rectangle { |
| | ||
// 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 66: | Line 78: | ||
} | } | ||
- | | + | void setWidth(int newWidth ) { |
width = newWidth; | width = newWidth; | ||
} | } | ||
| | ||
- | | + | void setHeight(int newHeight ) { |
height = newHeight; | height = newHeight; | ||
} | } | ||
| | ||
- | | + | void setOrigin(Point newOrigin) { |
origin = newOrigin; | origin = newOrigin; | ||
} | } | ||
| | ||
- | | + | |
- | origin | + | |
} | } | ||
| | ||
- | | + | |
- | | + | |
- | 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** και **private**. | ||
- | |||
- | Όταν __ένα πεδίο ή μία μέθοδος__ ορίζεται ως **public** τότε αυτό είναι προσβάσιμο από οποιαδήποτε άλλη κλάση. Όταν ένα πεδίο ή μια μέθοδος ορίζεται ως **private** τότε αυτό είναι προσβάσιμο μόνο εντός της κλάσης στην οποία έχει οριστεί. /*: | ||
- | - άλλες κλάσεις που περιέχουν πεδία που ανήκουν στη συγκεκριμένη κλάση. Για παράδειγμα, | ||
- | - [[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**. Βγάλτε από τα σχόλια την μέθοδο που είναι στο τέλος της κλάσης και βάλτε σε σχόλια της αμέσως προηγούμενη μέθοδο. | ||
- | </ | ||
- | |||
- | ===== Απόκρυψη δεδομένων και εσωτερικής υλοποίησης ===== | ||
- | |||
- | Ένα από τα βασικά χαρακτηριστικά του Αντικειμενοστραφούς Προγραμματισμούς είναι η απόκρυψη των δεδομένων και της εσωτερικής υλοποίησης των κλάσεων στις υπόλοιπες κλάσεις που τις χρησιμοποιούν. Κατά κανόνα, | ||
- | |||
- | <WRAP todo 80% center round> | ||
- | Ακολουθώντας την παραπάνω πρακτική επαναορίστε την κλάση **Rectangle**, | ||
- | </ | ||
- | |||
- | <WRAP tip 80% center round> | ||
- | Για κάθε πεδίο των κλάσεων **Point** και **Rectangle** έχουμε ορίσει συναρτήσεις λήψης της τιμής των πεδίων της κλάσης (γνωστές ως **getters** ή **accessors**), | ||
- | </ | ||
|Προηγούμενο: | |Προηγούμενο: |
java/class_fields.1486652912.txt.gz · Last modified: 2017/02/09 15:08 by gthanos