Κλάση υποκλάση

Ξεκίνησε από ΣΧΟΙΝΑΣ ΚΩΣΤΑΣ, 24 Φεβ 2020, 02:52:40 ΜΜ

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

bagelis

Γενικά συμφωνώ στο πνεύμα, παρ' όλα αυτά χρειάζεσαι εκφώνηση. Διαφορετικά υπάρχουν χιλιάδες διαφορετικά σενάρια.
Π.χ.
Παράθεση από: pgrontas στις 05 Μαρ 2020, 04:31:28 ΜΜ
Όμως το Νόμισμα-Ευρώ δεν είναι μία από αυτές, κατά τη γνώμη μου. Έχει το Ευρώ κάποιο χαρακτηριστικό που δεν έχει οποιοδήποτε νόμισμα; Όχι. Άρα είναι αντικείμενο.
Σε μία χρηματιστηριακή εταιρεία που κάνει συναλλαγές σε διάφορα νομίσματα αλλά έχει έδρα την Ελλάδα και όλες οι συναλλαγές της μετατρέπονται και εκτελούνται σε ευρώ, δεν θα είχε νόημα μία μορφή όπως
Υπερκλάση: Νόμισμα
Υποκλάσεις: Ξένο Νόμισμα, Ευρώ;


Παράθεση από: pgrontas στις 05 Μαρ 2020, 04:31:28 ΜΜ
Αντίθετα στο Άνθρωπος-Άνδρας, ο άνδρας έχει επιπλέον τη μέθοδο ΠάειΣτρατό() πχ. Άρα είναι υποκλάση.
Σε ένα παιχνίδι που το μόνο που αλλάζει στον άνδρα και στη γυναίκα είναι το σύμβολο του αρσενικού και του θηλυκού σε μία φωτογραφία και σε όλα τα άλλα συμπεριφέρονται όμοια, δεν θα ήταν απλά κλάση - αντικείμενο;
Παράθεση από: pgrontas στις 05 Μαρ 2020, 04:31:28 ΜΜ
Ομοίως και για το Ζώο-Ελέφαντας.
Ομοίως με παράδειγμα ένα παιδικό παιχνίδι που ο παίκτης σημαδεύει με το ποντίκι του το ζώο, το "πυροβολεί" και αυτό "σκοτώνεται" δίνοντας πόντους, ο ελέφαντας θα ήταν απλά αντικείμενο του ζώου.


pgrontas

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

bagelis

πιθανότατα συμφωνούμε και δεν αξίζει να το συνεχίζουμε ίσως, δες όμως ότι ο pgrontas λέει το νόμισμα - ευρώ, κλάση αντικείμενο, ενώ ο George eco σε προηγούμενο ποστ λέει ότι είναι κλάση - υποκλάση.

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

bugman

#18
Αν είναι Κλάση το Νόμισμα τότε μπορεί να είναι Αντικείμενο της Κλάσης Νόμισμα το Ευρώ.
Έτσι με αυτό το σκεπτικό δεν υπάρχει κλάση-υποκλάση.
Ας υποθέσουμε όμως ότι έχουμε το Ευρώ και το Δολάριο και πως το καθένα είναι ένα αντικείμενο με μια ιδιαίτερη μέθοδο, πχ την Πληροφορίες. Δηλαδή έχουμε το Νόμισμα με μια γενική μέθοδο Πληροφορίες και φτιάχνουμε δυο άλλα αντικείμενα που κληρονομούν ότι έχει το Νόμισμα αλλά τροποποιούν την Πληροφορίες. Αυτό σημαίνει ότι μπορώ να έχω ένα αντικείμενο πχ Ε100 κλάσης Ευρώ που να είναι υποκλάση του Νομίσματος. Το Ε100 κρατάει την κατάσταση (state) του αντικειμένου, πχ την Αξία 2000 ευρώ.
Το ερώτημα είναι: Γιατί να πάμε στο Κλάση Υποκλάση Αντικείμενο, και όχι στο Κλάση Αντικείμενο.
Η απάντηση των 1000 δολαρίων είναι ότι κάθε Κλάση την έχουμε για μια δουλειά, έτσι την υποκλάση τη θέλουμε για μια δουλειά διαφορετική από τη Κλάση, και αυτή είναι να χρησιμοποιείται σε μια μέθοδο ενός άλλου αντικειμένου, πχ Λογαριασμού, όπου θα καλεί την Πληροφόρηση, την "εικονική" μέθοδο που παίζει διαφορετική σε κάθε υποκλάση.
Πώς θα κάναμε με το πρώτο σχέδιο, Κλάση αντικείμενο; Αν η Πληροφόρηση έπαιζε μόνο για να μεταφέρει ένα αλφαριθμητικό (πχ σε μια ΓΡΑΨΕ) τότε η Κλάση Νόμισμα θα είχε ιδιότητες ΚείμενοΠληροφόρησης και ΤίτλοΝομίσματος (πχ Ευρώ) μαζί με το Ποσότητα, ώστε το Αντικείμενο Ευρώ να έχει ό,τι χρειάζεται ώστε αν περαστεί στο Λογαριασμό να μπορεί να προκύψει η πληροφόρηση που θέλουμε.

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

taxata

#19
Ζώο
  ^
   |
   + Κατοικίδιο
              ^
              |
              + Σκύλος
                     ^
                      |
                      ? Ντόπερμαν

ΥΓ
Ποιο Ντόπερμαν το δικό μου ο "Θεμιστοκλής" ή όλα τα Ντόπερμαν
Τάσος_Χατζηπαπαδόπουλος
Κύριε δεν έχω internet
http://users.sch.gr/chatzipap/

bugman

@taxata
Κλάση είναι το περίγραμμα, Αντικείμενο είναι η ουσία, αυτό που κρατάει την Κατάσταση "state". Όταν λέμε για ένα Ντοπερμαν "Θεμιστοκλή" μιλάμε για ένα αντικείμενο τύπου Ντόπερμαν, εκτός και αν έχουμε Σκύλο "Ντόπερμαν" και "Θεμιστοκλή". Το τελευταίο μας λέει ότι δεν υπάρχει κλάση Ντόπερμαν αλλά ότι είναι μια κατάσταση του Σκύλος. Έτσι το Ντόπερμαν δεν είναι ένας Σκύλος αλλά τιμή ιδιότητας "Ράτσα" του Σκύλου, και ο Σκύλος είναι ένα Κατοικίδιο Ζώο και είναι ένα Ζώο.

Αν θέλουμε μπορούμε να έχουμε κλάση Ντόπερμαν ως υποκλάση του Σκύλου, αν θέλουμε να βάλουμε κάποιες ειδικές μεθόδους, ή να αλλάξουμε κάποιες μεθόδους των υπερκλάσεων όπως Σκύλος, Κατοικίδιο Ζώο, Ζώο. Πχ το όνομα μπορεί να είναι ιδιότητα του κατοικίδιου ζώου. Έτσι θα έχουμε ένα αντικείμενο τύπου Ντόπερμαν με όνομα "Θεμιστοκλής" που είναι ένας Σκύλος, που είναι ένα Κατοικίδιο Ζώο, που είναι ένα Ζώο.



taxata

Αγαπητέ bugman το σχόλιό μου ήταν ρητορικό 0 σε ευχαριστώ όμως για την προσθήκη των επεξηγήσεων
Τάσος_Χατζηπαπαδόπουλος
Κύριε δεν έχω internet
http://users.sch.gr/chatzipap/

ilias_s

Παράθεση από: bagelis στις 05 Μαρ 2020, 05:16:39 ΜΜ
πιθανότατα συμφωνούμε και δεν αξίζει να το συνεχίζουμε ίσως, δες όμως ότι ο pgrontas λέει το νόμισμα - ευρώ, κλάση αντικείμενο, ενώ ο George eco σε προηγούμενο ποστ λέει ότι είναι κλάση - υποκλάση.


Όπως παραθέτει και ο taxata στο παράδειγμά του... Είναι και λίγο θέμα "θέασης"!

Κάποιος μπορεί να υποθέσει ότι το Ντόπερμαν, είναι υποκλάση της κλάσης Σκύλος, και αντικείμενα (instances) του Ντόπερμαν είναι ο Θεμιστοκλής, ο Μπάμπης και η Ούρσουλα.

Κάποιος άλλος θα πει ότι το Ντόπερμαν είναι αντικείμενο (instance) της κλάσης Σκύλος και άλλα αντικείμενα είναι το Τεριέ, το Μπιγκλ κτλ κτλ.

Προσωπικά εγώ δεν έχω αμφιβολία...

Όταν η εκφώνηση μιλάει για έγκυρα ζεύγη κλάσης-υποκλάσης είναι προφανές, νομίζω, ότι μας ζητείται να ελέγξουμε την εγκυρότητα. Δεν διακρίνουμε τα ζεύγη σε κατηγορίες όπως κλάση-υποκλάση, κλάση-αντικείμενο ή κάτι άλλο. Αυτό που σας κάνει να έχετε δεύτερες σκέψεις νομίζω πως είναι ότι μπαίνετε στη διαδικασία να ερμηνεύσετε-εξετάσετε τα ζεύγη με κάθε δυνατό τρόπο.

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

George Eco

Αναλόγως του τι θέλουμε να κάνουμε το Ντόπερμαν μπορεί να εισαχθεί ως τιμή ΙΔΙΟΤΗΤΑΣ (ράτσα) σε στιμιότυπο (αντικείμενο) κι όχι να θεωρηθεί Class. Από την άλλη μπορεί ΞΕΚΑΘΑΡΑ να είναι subclass.
Είναι αυτό που λέτε. Αν δεν έχουμε context, δε γίνεται να μιλάμε για ΜΙΑ σωστή απάντηση σε αυτές τις ερωτήσεις.

Για παράδειγμα, όταν μιλάμε για Ευρώ μπορεί να είναι Class. Σε αυτή τη περίπτωση το δίευρο, το μονόευρω και τα λοιπά, υπάγονται σε αυτή.
Όμως αν όπως ανέφερα το Ευρώ είναι το μονόευρο;
Γενικά ατυχείς κι αρκετά ελλειπείς οι ασκήσεις όσον αφορά τη σαφήνεια.