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:22] – [Τύποι πεδίων της κλάσης] 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.1485530549.txt.gz · Last modified: 2017/01/27 15:22 (external edit)
