dark knight Δημοσ. 17 Ιουνίου 2012 Δημοσ. 17 Ιουνίου 2012 Γεια σας! Φτιάχνω ένα πρόγραμμα για τη σχολή μου σε Java και έχω ένα μικρό κόλλημα... έχω φτιάξει μία συνδεδεμένη λίστα που αποθηκεύει αντικείμενα Object με σκοπό να αποθηκεύσω μέσα αντικείμενα διαφόρων κλάσεων(μου σώζει πολύ χρόνο και κόπο να είναι όλα μαζί σε μία λίστα). Το πρόβλημά μου όμως είναι ότι δεν ξέρω μετά πως να αναζητήσω αντικείμενα των διαφόρων κλάσεων... (π.χ. για να βρω μέσα από την λίστα έναν καθηγητή, μέσα σε μία λίστα που αποθηκεύει και καθηγητές αλλά και μαθητές). Μπορεί κανείς να βοηθήσει;; Ευχαριστώ προκαταβολικά!
Technology fan Δημοσ. 17 Ιουνίου 2012 Δημοσ. 17 Ιουνίου 2012 Μπορεις να πάρεις ένα- ένα Object και να ελέγχεις με την instanceOf τι τύπου κλάση είναι και στη συνέχεια ανάλογα τον έλεγχο που θέλεις να κάνεις για την αντίστοιχη κλάση. Προσοχή όμως με την κληρονομικότητα έχει κάποια ιδιαιτερότητα... Δες εδώ παράδειγμα
defacer Δημοσ. 17 Ιουνίου 2012 Δημοσ. 17 Ιουνίου 2012 έχω φτιάξει μία συνδεδεμένη λίστα που αποθηκεύει αντικείμενα Object με σκοπό να αποθηκεύσω μέσα αντικείμενα διαφόρων κλάσεων(μου σώζει πολύ χρόνο και κόπο να είναι όλα μαζί σε μία λίστα). Όταν λες έφτιαξες ελπίζω να μην έγραψες δική σου από τη στιγμή που ήδη υπάρχει... Μπορεις να πάρεις ένα- ένα Object και να ελέγχεις με την instanceOf τι τύπου κλάση είναι και στη συνέχεια ανάλογα τον έλεγχο που θέλεις να κάνεις για την αντίστοιχη κλάση. Συγγνώμη αλλά αυτός είναι τελείως λάθος τρόπος να προσεγγίσεις το πρόβλημα. Δεν ξέρω τι ακριβώς έχει σκοπό να κάνει ο dark knight και ανησυχώ γιατί συνήθως το να έχεις μέσα σε μια list αντικείμενα πολλών τύπων είναι λάθος προσέγγιση και γιατί το "μου σώζει χρόνο και κόπο" είναι red flag για τέτοια πράγματα, αλλά μιλώντας ακαδημαϊκα: Μήπως έχει νόημα να διατηρείς μια ξεχωριστή λίστα με τους καθηγητές; Μπορείς να βάλεις μια virtual method στην base class των αντικειμένων που έχεις στη λίστα που καλώντας την να σου επιστρέφει μια τιμή από την οποία αναγνωρίζεις το είδος του αντικειμένου. Αν η καλύτερη base class που έχουν τα αντικείμενα στη λίστα είναι Object τότε έχεις πάρει λάθος δρόμο. Πιθανότατα η λίστα δεν είναι το σωστό structure για τη δουλειά που κάνεις. Αν αφού αναγνωρίσεις το είδος του αντικειμένου σκοπεύεις να κάνεις switch (ή ισοδύναμα σειρά if/elseif) τότε σίγουρα έχεις πάρει λάθος δρόμο.
dark knight Δημοσ. 17 Ιουνίου 2012 Μέλος Δημοσ. 17 Ιουνίου 2012 Έφτιαξα= copy paste από τις διαλέξεις του μαθήματος, αφού στην εκφώνηση της άσκησης δεν μας επιτρέπει να χρησιμοποιήσουμε λοιπές έτοιμες λίστες. defacer το μάθημα είναι εισαγωγικό, και όσο λάθος μπορεί να σου φαίνεται από ότι είδα σε απαντήσεις του καθηγητή στις συζητήσεις του site η λύση με instance of δεν είναι μόνο σωστή αλλά και προτεινόμενη. Που είναι το κακό να βάλω μετά την αναγνώριση switch;
defacer Δημοσ. 17 Ιουνίου 2012 Δημοσ. 17 Ιουνίου 2012 Το ότι η λύση είναι σωστή (όπως το αντιλαμβάνομαι εγώ: "καταλήγει στο σωστό αποτέλεσμα") δε σημαίνει τίποτα στον προγραμματισμό γιατί υπάρχουν άπειρες σωστές λύσεις. Δεν είναι όμως όλες το ίδιο επιθυμητές. Βεβαίως μετράει όσον αφορά το ότι πρέπει να είναι σωστή η λύση για να πάρεις βαθμό, αλλά και πάλι: υπάρχουν άπειρες. Το ότι η λύση είναι προτεινόμενη σημαίνει πως αν ο στόχος είναι να περάσετε το μάθημα ο καθηγητής σας μαθαίνει σωστά πράγματα, αν όμως είναι να μάθετε προγραμματισμό τότε σας μαθαίνει λάθος. Πολλές φορές είναι κάτι που το κάνουν εν γνώσει τους, αλλά όχι πάντα. Καθηγητής προγραμματισμού != προγραμματιστής. Πολύ μα πολύ μα πάρα πάρα πολύ σπάνια θα βρεις κάποιον που να είναι και τα 2 ταυτόχρονα. Δεν είναι εύκολο να σου δώσω να καταλάβεις γιατί το λεγόμενο "type switch" είναι λάθος επειδή δεν έχεις ακόμα αρκετή εμπειρία για να το "νιώσεις" και γιατί θα χρειαζόταν να γράψω πολλά κατεβατά για να αντισταθμίσω αυτό το γεγονός. Μπορείς όμως να διαβάσεις τις πρώτες απαντήσεις εδώ για να μπεις στο νόημα.
nplatis Δημοσ. 21 Ιουνίου 2012 Δημοσ. 21 Ιουνίου 2012 Αν και γενικά συμφωνώ με τον defacer, νομίζω χωρίς να ξέρουμε την εκφώνηση και τον σκοπό της άσκησης δεν μπορούμε να κρίνουμε αν «τους μαθαίνει λάθος». Μπορεί να είναι σκοπός της άσκησης η εξάσκηση με το instanceof ή το getClass(), και για το λόγο αυτό να βάζει τεχνητά εμπόδια ή περιορισμούς για μία τεχνικά πιο άρτια λύση. Ας μην ξεχνάμε ότι πρόκειται για εισαγωγικό μάθημα. Όντως, βέβαια, η χρήση της Object σε τέτοιες καταστάσεις μυρίζει ελλιπή σχεδιασμό (ή ναφθαλίνη...).
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα