Commits

Panagiotis Mavrogiorgos committed 05f5996

Added "When to use inheritance?".

  • Participants
  • Parent commits ce4334d

Comments (0)

Files changed (1)

source/object_oriented_programming.rst

 Πότε χρησιμοποιούμε την Κληρονομικότητα;
 ----------------------------------------
 
-Απλά για λόγους πληρότητας πρέπει να αναφέρουμε και την *πολλαπλή
-κληρονομικότητα* (multiple inheritance). Πολλαπλή κληρονομικότητα σημαίνει μία
-υποκλάση να έχει πολλές υπερκλάσεις ταυτόχρονα. Παράδειγμα, δε θα παρουσιάσουμε
-εδώ καθώς η χρήση της καλό είναι να αποφεύγεται (εκτός και αν ξέρετε τι κάνετε
-:P).
+Το θεμελιώδες αυτό ερώτημα, ευτυχώς, έχει πάρα πολύ απλή απάντηση.  Η (απλή)
+*Κληρονομικότητα* χρησιμοποιείται όταν έχουμε μια ακολουθία (η ιεραρχία αν
+προτιμάτε) αντικειμένων τα οποία πηγαίνουν από το γενικότερο στο ειδικότερο. Το
+παράδειγμα με της προηγούμενης ενότητας (Ζώα ⇒ Θηλαστικά ⇒ Αιλουροειδή ⇒ Γάτες)
+είναι πολύ χαρακτηριστικό.
+
+Αν μελετήσουμε τις σχέσεις μεταξύ των διαδοχικών κλάσεων θα δούμε ότι η "κάθε
+υποκλάση **είναι** η υπερκλάση της". Δηλαδή:
+
+    Μία *Γάτα* είναι *Αιλουροειδές*.
+
+    Ένα *Αιλουροειδές* είναι *Θηλαστικό*.
+
+    Ένα *Θηλαστικό* είναι *Ζώο*.
+
+Η σχέση αυτή ισχύει όχι μόνο για την αμέσως ανώτερη υπερκλάση, αλλά για κάθε
+υπερκλάση. Δηλαδή:
+
+    Μία *Γάτα* είναι *Αιλουροειδές*.
+
+    Μια *Γάτα* είναι και *Θηλαστικό*.
+
+    Μια *Γάτα* είναι και *Ζώο*.
+
+Κάθε φορά που έχουμε μια παρόμοια σχέση μεταξύ αντικειμένων, δηλαδή μπορούμε να
+πούμε ότι **κάτι είναι κάτι άλλο** (is-a relationship) τότε μπορούμε/πρέπει να
+χρησιμοποιήσουμε κληρονομικότητα. Αυτό όμως δεν απαντάει στο *γιατί* να το
+κάνουμε αυτό... Γιατί να μην ορίσουμε κατευθείαν την κλάση της *Γάτας*; Γιατί να
+μπερδευόμαστε με κλάσεις, υποκλάσεις κτλ κτλ;
+
+Η απάντηση είναι η εξής. Αν έχουμε να ασχοληθούμε μόνο με *αντικείμενα Γάτας*
+τότε δεν μας χρειάζονται όλα αυτά. Αν όμως έχουμε να κατασκευάσουμε *Γάτες,
+Λιοντάρια, Τίγρεις* κτλ τότε τα οφέλη αρχίζουν να φαίνονται. Ορίζουμε αρχικά τα
+κοινά στοιχεία όλων αυτών των κλάσεων στην υπερκλάση *Αιλουροειδές*, την
+κληρονομούμε και την εξειδικεύουμε καταλλήλως στις υποκλάσεις.
+
+Αν μάλιστα εκτός από *Αιλουροειδή* έχουμε να κατασκευάσουμε και αντικείμενα
+*Σκύλου*, *Αλεπούς*, *Λύκου*, αλλά και *Αρκούδας*, *Αλόγου*, *Φώκιας* κτλ τότε
+η κλάση *Θηλαστικό* κατευθείαν αποκτάει νόημα.
+
+Με τον ίδιο τρόπο, αν στο πρόγραμμά μας χρειαζόμαστε και *Ψάρια* ή *Έντομα* κτλ
+τότε η υπερκλάση *Ζώο* βρίσκει και αυτή τη θέση της. H κάθε μία από τις κλάσεις
+*Ψάρι*, *Έντομο* κτλ θα έχει φυσικά το δικό της ιεραρχικό δέντρο, στο οποίο θα
+εξειδικεύεται καταλλήλως.
+
+.. Note::
+
+    Συνοψίζοντας, όταν για δύο αντικείμενα *Α* και *Β* μπορούμε να πούμε ότι
+    **το Α είναι το Β**, τότε μπορούμε να χρησιμοποιήσουμε κληρονομικότητα.
 
 Σύνθεση (Composition)
 =====================