java:type_casting

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
java:type_casting [2016/02/15 05:44]
gthanos [Κριτήρια χρήσης της κληρονομικότητας ως εργαλείο ανάπτυξης λογισμικού]
java:type_casting [2017/02/16 13:34] (current)
gthanos
Line 43: Line 43:
 </​code>​ </​code>​
  
-===== Κριτήρια χρήσης της κληρονομικότητας ως εργαλείο ανάπτυξης λογισμικού ===== +ροηγούμενο[[ :java:inheritance ​Κληρονομικότητα ​]] | [[ :toc | Περιεχόμενα ​]]  | Επόμενο[[ :java:inheritance_subclassing_vs_encapsulating ​Κριτήριo χρήσης της κληρονομικότητας]]|
- +
-Ας επανέλθουμε στο παράδειγμα του ορθογωνίου παραλληλογράμμου το οποίο έχουμε συναντήσει αρκετές φορές στο παρελθόν και ας προσπαθήσουμε να δημιουργήσουμε την κλάση ενός [[wp>​Cuboid|κυβοειδούς]] με χρήση της υφιστάμενης κλάσης του ​[[java:class|ορθογωνίου παραλληλογράμμου]]. +
- +
-Πριν ξεκινήσουμε την υλοποίηση θα πρέπει να αποφασίσουμε εάν θέλουμε να δημιουργήσουμε το κυβοειδές χρησιμοποιώντας ως μεταβλητή της νέας κλάσης ένα αντικείμενο της κλάσης //​Rectangle//​ ή επιθυμούμε να επεκτείνουμε την κλάση //​Rectangle//​ μέσω της νέας κλάσης. Δείτε παρακάτω τις δύο παραλλαγές της κλάσης //Cuboid// με και χωρίς κληρονομικότητα+
- +
-<code java Cuboid.java>​ +
-public class Cuboid { +
-  Rectangle rec; +
-  int length; +
-   +
-  public Cuboid(int l, int w, int h) { +
-    rec = new Rectangle(w,​h);​ +
-    length = l; +
-  } +
-   +
-  public int getLength() { return length; } +
-  public void setLength(int l) { length = l; } +
-   +
-  public int volume() { return length * rec.area(); } +
-+
-</​code>​ +
- +
-ή  +
- +
-<code java Cuboid.java>​ +
-public class Cuboid extends Rectangle { +
-  int length; +
-   +
-  public Cuboid(int l, int w, int h) { +
-    super(w,​h);​ +
-    length = l; +
-  } +
-   +
-  public int getLength() { return length; } +
-  public void setLength(int l) { length = l; } +
-   +
-  public int volume() { return length * area(); } +
-+
-</​code>​ +
- +
-Και οι δύο κλάσεις μεταγλωττίζονται και λειτουργικά παράγουν το ίδιο αποτέλεσμα. Το ερώτημα είναι ποια από τις δύο μεθόδους θα προτιμήσουμε. Η απάντηση είναι απλή και συνίσταται στο εξήςΕάν ο νέος τύπος δεδομένων που προκύπτει είναι της ίδιας κατηγορίας με τον τύπο δεδομένων της αρχικής κλάσης τότε μπορούμε να χρησιμοποιήσουμε κληρονομικότητα. Εάν ​όμως ο νέος τύπος δεδομένων δεν είναι της ίδιας κατηγορίας με τον προηγούμενο τότε η 1η επιλογή είναι η βελτιστη.  +
- +
-Για παράδειγμα, ​[[java:inheritance|στο αρχικό παράδειγμα ​της κληρονομικότητας]],​ από την κλάση Bicycle προκύπτουην οι κλάσεις //​MountainBike//,​ //​RoadBike//,​ //​TandemBike//​. Και οι 3 νέες κλάσεις είναι τύπου Bicycle, καθώς αποτελούν εξειδικεύσεις της γενικής κλάσης του ποδηλάτου.  +
- +
-Στην περίπτωση που περιγράψαμε παραπάνω κάτι τέτοιο δεν ισχύει. Αν και το κυβοειδές χρειάζεται ένα ορθογώνιο παραλληλόγραμμο για να περιγραφεί,​ το κυβοειδές δεν είναι και ορθογώνιο παραλληλόγραμμο. Δεν μπορούμε να πάμε δηλαδή από το κυβοειδές προς το ορθογώνιο παραλληλόγραμμο διατηρώντας τις βασικές ιδιότητες του κυβοειδούς,​ καθώς το κυβοειδές είναι ένα τρισδιάστατο σχήμα, ενώ το ορθογώνιο παραλληλόγραμμο διδιάστατο.+
java/type_casting.1455515086.txt.gz · Last modified: 2016/02/26 11:15 (external edit)