This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
java:data_encapsulation [2015/01/21 13:18] gthanos created |
java:data_encapsulation [2016/02/26 11:15] (current) |
||
---|---|---|---|
Line 47: | Line 47: | ||
} | } | ||
</code> | </code> | ||
+ | |||
+ | Για κάθε μεταβλητή έχουμε ορίσει συναρτήσεις λήψης της τιμής των πεδίων της κλάσης (**getters**), αλλά και συναρτήσεις για τον ορισμό η την μεταβολή της τιμής τους (**setters**). | ||
+ | |||
+ | ===== Τύποι πεδίων της κλάσης ===== | ||
+ | |||
+ | Μία κλάση μπορεί να διαθέτει **primitive** (βασικούς) τύπους δεδομένων (πχ. int, long, char, double, float κλπ) ή **reference** τύπους δεδομένων. **Reference** τύποι δεδομένων είναι οι μη βασικοί τύποι δεδομένων που αναφέρονται σε άλλες κλάσεις. Για παράδειγμα, ας πούμε ότι στο παραπάνω παράδειγμα θέλουμε να προσθέσουμε την θέση του ποδηλάτου. Η θέση του ποδηλάτου μπορεί να προσδιοριστεί από την παρακάτω κλάση ''Coordinates'' που προσδιορίζει την θέση με βάση το γεωγραφικό ύψος και πλάτος. | ||
+ | |||
+ | <code java> | ||
+ | class Coordinates { | ||
+ | private double latitude; | ||
+ | private double longitude; | ||
+ | | ||
+ | public void Coordinates(double lat, double long) { | ||
+ | latitude = lat; | ||
+ | longitude = long; | ||
+ | } | ||
+ | | ||
+ | public double getLatitude() { | ||
+ | return latitude; | ||
+ | } | ||
+ | public double getLongitude() { | ||
+ | return longitude; | ||
+ | } | ||
+ | public void setLatitude(double lat) { | ||
+ | latitude = lat; | ||
+ | } | ||
+ | public void setLongitude(double long) { | ||
+ | longitude = long; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Με χρήση της παραπάνω κλάσης η κλάση ''Bicycle'' γίνεται. | ||
+ | |||
+ | <code java> | ||
+ | public class Bicycle { | ||
+ | | ||
+ | private int cadence; | ||
+ | private int gear; | ||
+ | private int speed; | ||
+ | public Coordinates coordinates; | ||
+ | | ||
+ | public Bicycle(int startCadence, int startSpeed, int startGear, int lat, int log) { | ||
+ | coordinates = new Coordinates(lat,long); | ||
+ | gear = startGear; | ||
+ | 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; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Η κλάση ''Bicycle'' επομένως περιέχει εκτός από **primitive** πεδία και ένα **reference** πεδίο το πεδίο ''coordinates''. Εδώ θα πρέπει να παρατηρήσουμε δύο πράγματα. | ||
+ | - Στην 1η γραμμή του κατασκευαστή τη κλάσης ''Βicycle'' συναντούμε ''coordinates = new Coordinates(lat,long);''. | ||
+ | - Το πεδίο ''coordinates'' ορίζεται ως **public** και όχι ως **private** (γιατί;). | ||
+ | |||