Ερώτηση - διευκρίνηση σχετικά με κληρονομικότητα - κλάσεις - αντικείμενα

Ξεκίνησε από kdimitris, 12 Μαΐου 2023, 09:29:38 ΠΜ

« προηγούμενο - επόμενο »

kdimitris

Καλημέρα.
Θα ήθελα την βοήθεια σας σχετικά με το παρακάτω:
Στο βιβλίο Πληροφορική σελίδα 109 και στην ερώτηση 4.1 αναφέρει :
Η διαδικασία με την οποία ένα αντικείμενο αποκτά χαρακτηριστικά από άλλο αντικείμενο ονομάζεται: και σωστή απάντηση είναι η Κληρονομικότητα (προφανώς απορρίπτουμε την Ενθυλάκωση και τον Πολυμορφισμό που είναι οι άλλες επιλογές)

Από αυτά που αντιλαμβάνομαι (εκτός και αν κάνω λάθος) η κληρονομικότητα ορίζεται ως έννοια μεταξύ κλάσεων και όχι αντικειμένων. Μιλάμε για κλάση πρόγονος και απόγονος. Το σχολικό συχνά στην ενότητα 4.4 άλλες φορές συνδυάζει τις έννοιες κληρονομικότητα με την έννοια του αντικειμένου (βλέπε ορισμός) και άλλες φορές με την έννοια της κλάσης (Μια κλάση Α μπορεί να είναι έγκυρη υποκλάση της Β αν έχει νόημα να πούμε «ένα Α είναι ένα (is_a) B»)

Σε Σωστό Λάθος που έπεσε σε μαθητή μου ανέφερε (στο περίπου)
Κληρονομικότητα είναι η διαδικασία με την οποία ένα αντικείμενο αποκτά χαρακτηριστικά από άλλο αντικείμενο. Και ενώ αυτός ανέφερε πως είναι Λάθος υποστηρίζοντας πως οι κλάσεις κληρονομούν και όχι τα αντικείμενα μεταξύ τους, ο καθηγητής (βασιζόμενος στο σχολικό) του είπε πως είναι Σωστό.

Εδώ και πολλά χρόνια που διδάσκω το μάθημα, πάντα χρησιμοποιώ το σχολικό ως Α και το Ω σε ότι αφορά την θεωρία καθώς αναφέρω πως άσχετα τι μπορεί να γράφουν τα καλύτερα βοηθήματα που κυκλοφορούν στην αγορά αν το γράφει το σχολικό, θα πρέπει να το λάβετε με βάση αυτό και μόνο. 

Θα ήθελα την βοήθεια σας και την άποψη σας πάνω στο συγκεκριμένο θέμα της κληρονομικότητας, καθώς μπορεί και εγώ να το αντιλαμβάνομαι λανθασμένα και θα πρέπει να το μεταφέρω σωστά. 

Σας ευχαριστώ εκ των προτέρων

eadamopo

Συμφωνώ συνάδελφε ότι σύμφωνα με τη θεωρία του βιβλίου η κληρονομικότητα ορίζεται ως έννοια μεταξύ κλάσεων.
Από οτι καταλαβάινω δεν μπορεί να παραχθεί αντικείμενο από κλάση που να έχει πρόσθετες ιδιότητες και μεθόδους πέρα από αυτές που έχει η κλάση από την οποία παράγεται. 

Καραμαούνας Πολύκαρπος

4.4 "Η δυνατότητα δημιουργίας ιεραρχιών αντικειμένων καλείται κληρονομικότητα (inheritance)..."

Από τη στιγμή που το βιβλίο (εσφαλμένα) το διατυπώνει έτσι στον ορισμό, η πρόταση θεωρείται σωστή.
Γενικά το βιβλίο έχει μπλέξει τις έννοιες αντικείμενο και κλάση. Θα έπρεπε να ξεκαθαρίσει ότι:
https://unstop.com/blog/difference-between-class-and-object 

NIKOS_KALYVAS

Κλάση vs Αντικείμενο – Διαφορές μεταξύ τους
Κλάση
Αντικείμενο
Μια κλάση είναι ένα πρότυπο για τη δημιουργία αντικειμένων στο πρόγραμμα.
Το αντικείμενο είναι ένα στιγμιότυπο μιας κλάσης.
Μια κλάση είναι μια λογική οντότητα
Το αντικείμενο είναι μια φυσική οντότητα
Μια κλάση δεν δεσμεύει χώρο μνήμης κατά τη δημιουργία της.
Το αντικείμενο δεσμεύει χώρο μνήμης κάθε φορά που δημιουργείται και κάποιο νέο.
Μπορείτε να δηλώσετε μια κλάση μόνο μία φορά.
Μπορείτε να δημιουργήσετε περισσότερα από ένα αντικείμενα χρησιμοποιώντας μια κλάση.
Παράδειγμα: Αυτοκίνητο.
Παράδειγμα: Jaguar, BMW, Tesla κ.λπ.
Η κλάση δημιουργεί αντικείμενα
Τα αντικείμενα δίνουν ζωή στην κλάση.
Δεν έχει τιμές που σχετίζονται με τα πεδία.
Κάθε αντικείμενο έχει τις δικές του τιμές, οι οποίες σχετίζονται με τα πεδία.
ΝΙΚΟΣ ΚΑΛΥΒΑΣ
Καθηγητής Πληροφορικής (ΠΕ86)

pgrontas

Ναι μεν η κληρονομικότητα είναι μεταξύ των κλάσεων, αλλά τα αντικείμενα ως πραγματοποιήσεις των κλάσεων κληρονομούν μέσω αυτών.
Για να είναι λάθος η πρόταση θα έπρεπε να βρούμε κάποια περίπτωση που η κλάση κληρονομεί αλλά το αντικείμενο ως υλοποίηση όχι. Με μια πρώτη σκέψεη δεν μου έρχεται κάτι τέτοιο στο μυαλό.
Αυτό θα είχε αξία ως αντιπαράδειγμα. Αλλιώς φοβάμαι ότι παίζουμε με τις λέξεις.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

kdimitris

Ευχαριστώ για τις απαντήσεις σας. Έχοντας όμως στο μυαλό μου την C++ και με όσα θυμάμαι ποτέ δεν όρισα ένα αντικείμενο να κληρονομεί από άλλα αντικείμενα άλλα πάντα ορίζαμε τις κλάσεις. Φτάνοντας στην δημιουργία αντικειμένων αυτά ακολουθούσαν 100% το πρότυπο της κλάσης τους
class Animal


class Dog: public Animal

evry

Η κληρονομικότητα δεν ορίζεται πάντα μέσω κλάσεων όπως έχουμε συνηθίσει. Υπάρχουν και οι object-based ή prototype-based γλώσσες στις οποίες δεν δημιουργούμε κλάσεις αλλά αντικείμενα και από αυτά με cloning και τροποποίηση των μεθόδων έχουμε κάτι σαν κληρονομικότητα. Αυτό είναι πιο κοντά στον πραγματικό κόσμο από το μοντέλο του OOP που γνωρίζουμε.
Μερικές γλώσσες που ακολουθούν αυτή την προσέγγιση είναι η Ruby, Obliq, Javascript, η Lua και άλλες.
Η πιο χαρακτηριστική γλώσσα αυτής της κατηγορίας είναι η Self που έχει εξαιρετικό ενδιαφέρον.
Επίσης γλώσσες όπως η Python, και η R  έχουν packages που επιτρέπουν αυτού του είδους την κληρονομικότητα.
Οι δυνατότητες που έχει αυτός ο τρόπος είναι πέρα από αυτά που έχουμε συνηθίσει.
π.χ. έχω ένα αντικείμενο Α με μια μέθοδο compute()
Στην συνέχεια κάνω clone το Α σε ένα B και σε ένα C και αποφασίζω να αλλάξω την compute στο C.
Αν θέλω (π.χ. Κάτι σαν static) αλλάζει και στο Α και στο Β. Απίστευτα δυναμική συμπεριφορά.
What I cannot create I do not understand -- Richard Feynman
http://evripides.mysch.gr