User Tools

Site Tools


java:inheritance_subclassing_vs_encapsulating

Differences

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

Link to this comparison view

Next revision
Previous revision
java:inheritance_subclassing_vs_encapsulating [2017/02/16 13:25] – created gthanosjava:inheritance_subclassing_vs_encapsulating [2018/02/09 15:19] (current) gthanos
Line 44: Line 44:
 Χρησιμοποιώντας την ιδιότητα της κληρονομικότητας, εάν ο νέος τύπος δεδομένων που προκύπτει αποτελεί εξειδίκευση ή επέκταση της γονικής κλάσης αλλά εξακολουθεί να είναι και τύπος δεδομένων της γονικής κλάσης τότε μπορούμε να χρησιμοποιήσουμε την κληρονομικότητα ως μέθοδο δημιουργίας της νέας κλάσης. Εάν όμως ο νέος τύπος δεδομένων δεν εξακολουθεί να είναι τύπος δεδομένων και της γονικής του κλάσης τότε είναι καλύτερα ο νέος τύπος να ενσωματώνει την παραπάνω κλάση ως πεδίο, αντί να την επεκτείνει μέσω της κληρονομικότητας. Χρησιμοποιώντας την ιδιότητα της κληρονομικότητας, εάν ο νέος τύπος δεδομένων που προκύπτει αποτελεί εξειδίκευση ή επέκταση της γονικής κλάσης αλλά εξακολουθεί να είναι και τύπος δεδομένων της γονικής κλάσης τότε μπορούμε να χρησιμοποιήσουμε την κληρονομικότητα ως μέθοδο δημιουργίας της νέας κλάσης. Εάν όμως ο νέος τύπος δεδομένων δεν εξακολουθεί να είναι τύπος δεδομένων και της γονικής του κλάσης τότε είναι καλύτερα ο νέος τύπος να ενσωματώνει την παραπάνω κλάση ως πεδίο, αντί να την επεκτείνει μέσω της κληρονομικότητας.
  
-Στο παραπάνω παράδειγμα, εάν η κλάση **Cuboid** κληρονομεί την κλάση **Rectangle** θα πρέπει η κλάση **Cuboid** να είναι και τύπου **Rectangle**. Αν και η κλάση του κυβοειδούς μπορεί να ενσωματώσει στην περιγραφή της και ένα ορθογώνιο παραλληλόγραμμο, το κυβοειδές δεν είναι ορθογώνιο παραλληλόγραμμο. Γενικότερα, ένα τρισδιάστατο σχήμα δεν μπορεί να είναι και διδιάστατο. Δεν μπορούμε να πάμε από το κυβοειδές προς το ορθογώνιο παραλληλόγραμμο διατηρώντας τις βασικές ιδιότητες του κυβοειδούς. Το κυβοειδές αποτελεί μία εντελώς νέα οντότητα σε σχέση με το ορθογώνιο παραλληλόγραμμο. Μπορούμε να εκφράσουμε το κυβοειδές με την χρήση της κλάσης ενός ορθογώνιου παραλληλογράμμου, χωρίς όμως η χρήση του ορθογωνίου παραλληλογράμμου να είναι απαραίτητη ή να συνδέεται άμεσα με το κυβοειδές. Επομένως, η χρήση της κληρονομικότητας στο παραπάνω παράδειγμα εισάγει λογική αντίφαση.+Στο παραπάνω παράδειγμα, εάν η κλάση **Cuboid** κληρονομεί την κλάση **Rectangle** θα πρέπει η κλάση **Cuboid** να είναι και τύπου **Rectangle**. Αν και η κλάση του κυβοειδούς μπορεί να ενσωματώσει στην περιγραφή της και ένα ορθογώνιο παραλληλόγραμμο, το κυβοειδές δεν είναι ορθογώνιο παραλληλόγραμμο. Γενικότερα, ένα τρισδιάστατο σχήμα δεν μπορεί να είναι και διδιάστατο. Μπορούμε να εκφράσουμε το κυβοειδές με την χρήση της κλάσης ενός ορθογώνιου παραλληλογράμμου, χωρίς όμως η χρήση του ορθογωνίου παραλληλογράμμου να είναι απαραίτητη ή να συνδέεται άμεσα με το κυβοειδές. Επομένως, η χρήση της κληρονομικότητας στο παραπάνω παράδειγμα εισάγει λογική αντίφαση.
  
-Αντίθετα, [[java:inheritance|στο αρχικό παράδειγμα της κληρονομικότητας]], από την κλάση Bicycle προκύπτουν οι κλάσεις //MountainBike//, //RoadBike// και //TandemBike//. Και οι 3 νέες κλάσεις είναι τύπου Bicycle, καθώς αποτελούν εξειδικεύσεις της γενικής κλάσης του ποδηλάτου. Επομένως, εδώ η κληρονομικότητα συνιστάται ως μέθοδος δημιουργίας των νέων τύπων δεδομένων.+Αντίθετα, [[java:inheritance|στο αρχικό παράδειγμα της κληρονομικότητας]], από την κλάση **Bicycle** προκύπτουν οι κλάσεις //MountainBike//, //RoadBike// και //TandemBike//. Και οι 3 νέες κλάσεις είναι τύπου **Bicycle**, καθώς αποτελούν εξειδικεύσεις της γενικής κλάσης του ποδηλάτου. Επομένως, σε αυτή την περίπτωση η κληρονομικότητα συνιστάται ως μέθοδος δημιουργίας των νέων τύπων δεδομένων.
  
- +|Προηγούμενο: [[ :java:type_casting | Ρητές (explicit) και άρρητες (implicit) μετατροπές τύπων ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[ :java:final | Final Κλάσεις και Μέθοδοι]]|
-|Προηγούμενο: [[ :java:type_casting | Ρητές (explicit) και άρρητες (implicit) μετατροπές τύπων ]] | Επόμενο: [[ :java:final | Final Κλάσεις και Μέθοδοι]]|+
java/inheritance_subclassing_vs_encapsulating.1487251531.txt.gz · Last modified: 2017/02/16 13:25 (external edit)