This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
java:data_encapsulation [2015/01/21 13:24] gthanos |
java:data_encapsulation [2016/02/26 11:15] (current) |
||
|---|---|---|---|
| Line 52: | Line 52: | ||
| ===== Τύποι πεδίων της κλάσης ===== | ===== Τύποι πεδίων της κλάσης ===== | ||
| - | Μία κλάση μπορεί να διαθέτει **primitive** τύπους δεδομένων (πχ. int, long, char, double, float κλπ) ή **reference** τύπους δεδομένων. | + | Μία κλάση μπορεί να διαθέτει **primitive** (βασικούς) τύπους δεδομένων (πχ. int, long, char, double, float κλπ) ή **reference** τύπους δεδομένων. **Reference** τύποι δεδομένων είναι οι μη βασικοί τύποι δεδομένων που αναφέρονται σε άλλες κλάσεις. Για παράδειγμα, ας πούμε ότι στο παραπάνω παράδειγμα θέλουμε να προσθέσουμε την θέση του ποδηλάτου. Η θέση του ποδηλάτου μπορεί να προσδιοριστεί από την παρακάτω κλάση ''Coordinates'' που προσδιορίζει την θέση με βάση το γεωγραφικό ύψος και πλάτος. |
| - | Οι reference τύποι δεδομένων | + | <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** (γιατί;). | ||