mad-proffessor Δημοσ. 10 Σεπτεμβρίου 2016 Δημοσ. 10 Σεπτεμβρίου 2016 Χωρανε επιπεδα αφαιρεσης νομιζω π.χ αγρια, υπο εξαφανιση για τα ζωα, για τα φυτα φροντίδα.Τελος θελεις interfaces
defacer Δημοσ. 10 Σεπτεμβρίου 2016 Δημοσ. 10 Σεπτεμβρίου 2016 Συγγνώμη για το fork αλλά είπα να μην ανοίξω καινούριο θέμα μιας και είναι της ίδιας φύσεως. Παίζω με μια προσομοιώση περιβάλλοντος όπου υπάρχουν φυτά και ζώα. [...] Είμαι στην φάση της μοντελοποίησης και το θέμα μου είναι οτί σχεδόν όλες τις μεταβλητές στις Animal και Plant τις έχω protected μιας και σε κάθε διαφορετικό τύπο(algae,pine κτλ) τις θέτω γιατί διαφέρουν. But it just doesn't feel right. Εννοώ οτί το θέμα είναι να γίνεται όσο καλύτερο encapsulation μπορώ ωστέ να είναι maintainable ο κώδικας αλλά εδώ έχω *όλες* τις μεταβλητές να κατεβαίνουν 2 κλάσεις κάτω. The million dollar question is... τι ακριβώς απαιτήσεις έχει η προσωμοίωσή σου; Ποιοί είναι οι μηχανισμοί με τους οποίους τα φυτά/ζώα αλληλεπιδρούν με το περιβάλλον τους; Η μοντελοποίηση και η υλοποίησή της πάντα εξαρτώνται από αυτό. Θέλω να πω ότι σε αντίθεση με την εντύπωση που αφήνουν κάτι εργασίες/ασκήσεις για όσους μαθαίνουν τα βασικά, δεν πας αμέσως να πεις "α, φτιάχνω ένα ράλι οπότε a car is a vehicle, a car has an engine", ούτε κάνεις το ίδιο όταν θέλεις να φτιάξεις software διαχείρισης γκαράζ, ούτε όταν το θες για να προσομοιώσεις στρατηγικές διαχείρισης κυκλοφορίας σε μια πόλη. A car is a vehicle and has an engine είναι βέβαια μια μοντελοποίηση του πραγματικού κόσμου γύρω μας και θα χρησιμοποιηθεί σε πολλές περιπτώσεις, αλλά δεν είναι η ιδανική μοντελοποίηση για όλες τις περιπτώσεις. Αντίστοιχα και στην περίπτωσή σου για να καταλήξεις σε ένα καλό domain model πρέπει να λάβεις υπόψη όσο είναι δυνατόν τα χαρακτηριστικά του business domain, τα οποία δεν αναφέρεις καθόλου. Καταλαβαίνω τι λες πως doesn't feel right -- φαντάζομαι μια ικανή ιεραρχία κλάσεων όπου η κάθε μία κάνει παιχνίδια με Ν μεταβλητές με τις οποίες επίσης μπορεί να κάνει παιχνίδια οποιαδήποτε άλλη παραπάνω ή παρακάτω class, που είναι λίγο recipe for disaster. Όμως what is right εξαρτάται από το πώς θέλεις να τα χρησιμοποιήσεις όλα αυτά στην πράξη, και γι' αυτό χρειάζεται να ξεκινήσεις από υψηλότερο επίπεδο. Π.χ., έχεις μεταβλητές hungerCount, eatenFood, eatCount, isHungry (και ίσως κι άλλες?) οι οποίες κάπως σχετίζονται με το φαγητό. Ποιές είναι οι διαδικασίες που εκτελεί το ζώο και ποιά τα εξωτερικά χαρακτηριστικά του που έχουν σχέση με το φαγητό; Απο κει πρέπει να ξεκινήσεις. Εδώ έχεις περάσει αυτό το σημείο, έχεις ήδη αποφασίσει ότι αυτά τα πράγματα που λέω θα μοντελοποιηθούν με 4 μεταβλητές και έρχεσαι μετά από αυτό να κάνεις ερώτηση (ενδεχομένως πέφτοντας έτσι και στο XY problem). Κάνε πρώτα βήματα πίσω. That said σίγουρα θέλει βελτίωση η "brittle base class" σου που προσπαθεί να κάνει πάρα πολλά. Γιατί έχει μεταβλητές σχετικές με hibernation? Όλα τα ζώα πέφτουν σε χειμερία νάρκη; Προφανώς όχι. Θα μπορούσες να έχεις subclasses Hibernating και NotHibernating, αλλά καταλαβαίνεις φαντάζομαι πως αν βγάλεις αυτή τη διάσταση της συμπεριφοράς των ζώων σε subclass τότε θα αρχίσει να υπάρχει πρόβλημα με τις άλλες διαστάσεις που έχεις βγάλει σε subclass (Herbivore, Carnivore), γιατί θα χρειάζεσαι HibernatingHerbivore κλπ and we can all see where this is going. Συμπέρασμα: οι subclasses δεν είναι ικανοποιητικός τρόπος μοντελοποίησης αυτών των διαστάσεων (ας τις πω traits), παρ εκτός ίσως αν μία από αυτές είναι σούπερ σημαντικότερη σε σχέση με όλες τις άλλες και βολεύει, οπότε μπορούμε ίσως να της κάνουμε την τιμή να είναι η μόνη που θα γίνει με subclasses. Κλείνοντας, φαίνεται σίγουρα ότι κάποια πράγματα είναι στραβά αλλά όπως είπα δεν υπάρχει αρκετή πληροφορία για να κατευθυνθούμε στο σωστότερο. 2
kaliakman Δημοσ. 10 Σεπτεμβρίου 2016 Δημοσ. 10 Σεπτεμβρίου 2016 [...] Λοιπόν, Το περιβάλλον αποτελείται από ένα grid που το κάθε tile μπορεί να είναι νερό/λόφος/πεδιάδα. Το κάθε φύτο τοποθετείται σε συγκριμένο τύπο εδάφους αλλά μπορεί να ρίξει καρπούς/αναπαραχθεί και σε άλλους(Όπως ορίζονται από την εκφώνηση). Τα ζώα χωρίζονται σε χορτοφάγα και σαρκοφάγα,μπορούν να είναι ανήλικα είτε ενήλικα(Εξηγώ παρακάτω πως γίνεται ενήλικο)τα χορτοφάγα απλά τρώνε και μπορούν να μεγαλώσουν ενώ τα χορτοφάγα υπάρχει περίπτωση να μαλώσει με άλλο για να βγει χαμένος που θα φαγωθεί(Για αυτό τα attack και defence). Τα ζώα μπορούν να φάνε,να κουνηθούν και να μεγαλώσουν και να ανεβούν τα χαρακτηριστικά τους μέχρι να γίνουν ενήλικα με ρυθμό που διαφέρει από ζώο σε ζώο.(Όταν αυτό γίνεται,δες παρακάτω). Δεν μπορούν όλα τα ζώα να κουνηθούν με τον ίδιο τρόπο(πχ canClimb). Το περιβάλλον, τώρα, "ζει" για ορισμένο από τον χρήστη αριθμό ημερών και ξεκινάει από την 1η ημέρα και σε προκαθορίσμενη εποχή του χρόνου. Αναλόγως την εποχή αλλάζουν οι ιδιότητες των στοιχείων του περιβάλλοντος πχ το χειμώνα πέφτουν σε χειμερία νάρκη τα ζώα που μπορούν,το φθινόπωρο δεν μπορούν να αναπτυχθούν τα φυτά κτλ. Έχει μπόλικες άλλες λεπτομέρεις όπως πχ οτί τα σαρκοφάγα πρέπει να μην έχουν φάει 8 μέρες για να επιτεθούν σε άλλο σαρκοφάγο αλλά δεν νομίζω πως χρειάζεται να αναφερθούν γιατί δεν καθορίζουν την μοντελοποίηση αλλά λεπτομέρειες της. btw thanks for the help
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα