Timonkaipumpa Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 Γίνεται αλλά πας να κάνεις πατάτα. Η όλη ιδέα εδώ είναι να χρησιμοποιήσεις πολυμορφισμό. Δηλαδή, θα πρέπει να υπάρχει μια class organism από την οποία θα κάνουν άμεσα ή έμμεσα derive όλες οι κλάσεις σου που αντιπροσωπεύουν οργανισμούς. Το οικοσύστημά σου θα έχει (has-a, aggregate) ένα vector<organism*> -- προσοχή, pointer από organism αλλιώς δε θα μπορέσεις να κάνεις πολυμορφισμό. BTW, και συγγνώμη για το άσχετο αλλά δε μπόρεσα να συγκρατηθώ: How many object-oriented programmers does it take to change a light bulb? None -- you just tell the bulb to change itself. Δεν νομίζω ότι ο vector από instances είναι ότι καλύτερο σε αυτό το project. Μπορεί το οικοσύστημα να αλλάζει, ναι σαφώς, αλλά οι "κύριες μονάδες χρήσης" της όλης οντολογίας είναι οι οργανισμοί. Τι εννοώ. Ένας οργανισμός θα αναπτυχθεί, εξελιχθεί, φάει και ό,τι άλλο βάσει των συνθηκών που επικρατούν στο οικοσύστημα που είναι. Εάν αλλάξει κάτι στο οικοσύστημα τότε όταν θα είναι να κάνει μία λειτουργία ο οργανισμός θα ρωτήσει το οικοσύστημα "τι τρέχει" και αναλόγως θα κάνει αυτά που ξέρει ότι θα πρέπει να κάνει βάσει των επιλογών που του προσφέρει το οικοσύστημα. Έτσι, προτείνω οι οργανισμοί να ανήκουν σε ένα οικοσύστημα, να γίνονται οι αλλαγές στο οικοσύστημα και, είτε με look up κάθε "τόσο" είτε όταν γίνει μία κλήση μεθόδου στον οργανισμό, ο οργανισμός να κοιτάει τι παίζει στο οικοσύστημα και αναλόγως να κάνει τις επιλογές του. Υ.Γ. Καλό το ανέκδοτο!
defacer Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 Δεν νομίζω ότι ο vector από instances είναι ότι καλύτερο σε αυτό το project. [...] Έτσι, προτείνω οι οργανισμοί να ανήκουν σε ένα οικοσύστημα, να γίνονται οι αλλαγές στο οικοσύστημα και, είτε με look up κάθε "τόσο" είτε όταν γίνει μία κλήση μεθόδου στον οργανισμό, ο οργανισμός να κοιτάει τι παίζει στο οικοσύστημα και αναλόγως να κάνει τις επιλογές του. Vector από pointers, όχι instances (δε θα γινόταν εξάλλου από instances και να διατηρείται πολυμορφική συμπεριφορά). Δεν είμαι σίγουρος τι ακριβώς περιγράφεις. Αυτό που έχω στο μυαλό μου δεν είναι καθόλου διαφορετικού από το main loop οποιουδήποτε παιχνιδιού ή άλλης παρόμοιας εφαρμογής: έχεις ένα collection από actors και κάποια "inputs του περιβάλλοντος", και κάθε όποτε θέλεις (turn-based? timeloop?) κάνεις iterate το collection, αλληλεπιδράς με κάθε actor (εδώ κολλάει ο πολυμορφισμός), ενημερώνεις το state σου και πάλι απ' την αρχή.
Timonkaipumpa Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 Vector από pointers, όχι instances (δε θα γινόταν εξάλλου από instances και να διατηρείται πολυμορφική συμπεριφορά). Δεν είμαι σίγουρος τι ακριβώς περιγράφεις. Αυτό που έχω στο μυαλό μου δεν είναι καθόλου διαφορετικού από το main loop οποιουδήποτε παιχνιδιού ή άλλης παρόμοιας εφαρμογής: έχεις ένα collection από actors και κάποια "inputs του περιβάλλοντος", και κάθε όποτε θέλεις (turn-based? timeloop?) κάνεις iterate το collection, αλληλεπιδράς με κάθε actor (εδώ κολλάει ο πολυμορφισμός), ενημερώνεις το state σου και πάλι απ' την αρχή. Εάν θα είναι pointers ή όχι είναι θέμα γλώσσας (pointer δεν υπάρχει στην Java, με την έννοια της C++). Αυτό εννοούσα instances. Προφανώς και θα είναι "αναφορά". Δεν διαφωνώ... Μόνο που σαν actor προτείνω να μην είναι το οικοσύστημα. Αυτό δεν σημαίνει ότι δεν θα μπορείς να αλλάξεις - τροποποιήσεις κάποιες παραμέτρους αλλά δεν θα είναι "παίκτης". Οι οργανισμοί θα είναι αυτοί. Έτσι, αντί το μοντέλο να στηθεί με aggregation, one to many - οικοσύστημα σε οργανισμούς, θα πρότεινα το aggregation από οργανισμό σε οικοσύστημα (και έτσι θα μπορεί κάποιος οργανισμός να ανήκει σε διαφορετικά συστήματα, π.χ. αμφίβιος, π.χ. ό,τι άλλο). Το ξέρω ότι είναι παράδοξο... αλλά στο συγκεκριμένο μου άρεσε
george406 Δημοσ. 19 Δεκεμβρίου 2011 Μέλος Δημοσ. 19 Δεκεμβρίου 2011 το εχω κανει ετσι οπωσ μου λετε εξαρχησ..θελω να το κανω με pointer απο organism απλωσ η αληθεια ειναι πωσ δεν τουσ καταλαβαινω καθολου και προσπαθουσα να τουσ αποφυγω(αν μποριται να μου δωσετε ενα καλο παραδειγμα :rolleyes: ) ..ξερω σας εχω πρηξει αλλα εχουμε κανει πολυ λιγο c++ και προσπαθω να δω τι παιζει
παπι Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 το εχω κανει ετσι οπωσ μου λετε εξαρχησ..θελω να το κανω με pointer απο organism απλωσ η αληθεια ειναι πωσ δεν τουσ καταλαβαινω καθολου και προσπαθουσα να τουσ αποφυγω(αν μποριται να μου δωσετε ενα καλο παραδειγμα :rolleyes: ) ..ξερω σας εχω πρηξει αλλα εχουμε κανει πολυ λιγο c++ και προσπαθω να δω τι παιζει με poiners > #include <iostream> #include <vector> class A { public: virtual void Foo() { std::cout<<"A\n"; } }; class B : public A { public: virtual void Foo() { std::cout<<"B\n"; } }; int main(int, char**) { std::vector<A*> vec; vec.push_back(new A); vec.push_back(new ; vec[0]->Foo(); vec[1]->Foo(); delete vec[0]; delete vec[1]; return 0; } με smart pointers > #include <iostream> #include <vector> class A { public: virtual void Foo() { std::cout<<"A\n"; } }; class B : public A { public: virtual void Foo() { std::cout<<"B\n"; } }; int main(int, char**) { std::vector<std::shared_ptr<A> > vec; vec.push_back(std::shared_ptr<A>(new A)); vec.push_back(std::shared_ptr<B>(new ); vec[0]->Foo(); vec[1]->Foo(); return 0; }
george406 Δημοσ. 19 Δεκεμβρίου 2011 Μέλος Δημοσ. 19 Δεκεμβρίου 2011 σευχαριστω πολυ παπι με βοηθησεσ πολυ :rolleyes:
defacer Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 το εχω κανει ετσι οπωσ μου λετε εξαρχησ..θελω να το κανω με pointer απο organism απλωσ η αληθεια ειναι πωσ δεν τουσ καταλαβαινω καθολου και προσπαθουσα να τουσ αποφυγω(αν μποριται να μου δωσετε ενα καλο παραδειγμα :rolleyes: ) ..ξερω σας εχω πρηξει αλλα εχουμε κανει πολυ λιγο c++ και προσπαθω να δω τι παιζει Αν θέλεις να αποφύγεις τους pointers, άλλαξε γλώσσα. Είναι σα να λες ότι θέλεις να οδηγήσεις αυτοκίνητο χωρίς αυτόματο κιβώτιο αποφεύγοντας το λεβιέ. Δε μπορώ να καταλάβω με την καμία, αν είναι έτσι όπως τα λες, πώς είναι δυνατόν να δίνουν τέτοιες ασκήσεις (γιατί βασικά η άσκηση είναι δύσκολη για επίπεδο "έχω κάνει 10-15 μαθήματα") χωρίς να έχουν διδάξει πρώτα τα εντελώς απαραίτητα. Όχι ότι αν τα είχαν διδάξει δηλαδή θα χαμπάριαζε η συντριπτική πλειοψηφία, αλλά τουλάχιστον στα χαρτιά θα ήταν εντάξει. Εάν θα είναι pointers ή όχι είναι θέμα γλώσσας (pointer δεν υπάρχει στην Java, με την έννοια της C++). Αυτό εννοούσα instances. Προφανώς και θα είναι "αναφορά". Δεν διαφωνώ... Μόνο που σαν actor προτείνω να μην είναι το οικοσύστημα. Αυτό δεν σημαίνει ότι δεν θα μπορείς να αλλάξεις - τροποποιήσεις κάποιες παραμέτρους αλλά δεν θα είναι "παίκτης". Οι οργανισμοί θα είναι αυτοί. Έτσι, αντί το μοντέλο να στηθεί με aggregation, one to many - οικοσύστημα σε οργανισμούς, θα πρότεινα το aggregation από οργανισμό σε οικοσύστημα (και έτσι θα μπορεί κάποιος οργανισμός να ανήκει σε διαφορετικά συστήματα, π.χ. αμφίβιος, π.χ. ό,τι άλλο). Το ξέρω ότι είναι παράδοξο... αλλά στο συγκεκριμένο μου άρεσε Got it για τα instances, απλά η ερώτηση είναι για C++ οπότε το μετέφρασα ανάλογα. Το ανάποδο aggregation (άσχετο: νομίζω πως αυτός ο όρος δεν είναι σωστός εδώ γιατί ο οργανισμός δεν ΕΧΕΙ οικοσύστημα, αλλά εξαρτάται από οικοσύστημα -- καλύτερα να το λέμε dependency) είναι μια πολύ ενδιαφέρουσα ιδέα (αν και εφόσον το οικοσύστημα μοντελοποιεί το περιβάλλον, δε νομίζω πως γίνεται κάποιος οργανισμός να ανήκει σε 2 ταυτόχρονα) αλλά είναι πολύ δυσκολότερο σαν υλοποίηση γιατί απαιτεί εμπειρία design, πράγμα που δεν το συζητάμε καν (εδώ αμάν κάνουμε να χρησιμοποιήσουμε pointers).
παπι Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 Δε μπορώ να καταλάβω με την καμία, αν είναι έτσι όπως τα λες, πώς είναι δυνατόν να δίνουν τέτοιες ασκήσεις (γιατί βασικά η άσκηση είναι δύσκολη για επίπεδο "έχω κάνει 10-15 μαθήματα") χωρίς να έχουν διδάξει πρώτα τα εντελώς απαραίτητα. Όχι ότι αν τα είχαν διδάξει δηλαδή θα χαμπάριαζε η συντριπτική πλειοψηφία, αλλά τουλάχιστον στα χαρτιά θα ήταν εντάξει. Ε καλα, c++ ειναι. Το να γραψεις κατι σε c style ειναι καπως απλο, το να γραψεις κατι απλο με c style αλλα με iostream... εκει χανεις τη μπαλα, αντε να εξηγησεις το cout<<"Hey" Νομιζω οτι θα ηταν καλυτερα να μαθαιναν oo με τιποτα java/c# , που ειναι c like και παν απολα δεν εχουν 213412312 συμβολα και περιπλοκο memory managment.
defacer Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 Ε καλα, c++ ειναι. Το να γραψεις κατι σε c style ειναι καπως απλο, το να γραψεις κατι απλο με c style αλλα με iostream... εκει χανεις τη μπαλα, αντε να εξηγησεις το cout<<"Hey" Νομιζω οτι θα ηταν καλυτερα να μαθαιναν oo με τιποτα java/c# , που ειναι c like και παν απολα δεν εχουν 213412312 συμβολα και περιπλοκο memory managment. Συμφωνώ. Σε σχολή πληροφορικής πρέπει IMO να διδάσκεται οπωσδήποτε C (procedural, pointers, memory management, close to the metal programming) και Java (OO, managed) γιατί είναι και οι 2 κάργα portable. H C++ είναι δύσκολο πράγμα γιατί έχει τόσες πολλές ιδιαιτερότητες που πρέπει να μάθεις, ώστε δε νομίζω πως γίνεται να διδάξεις σε άτομα χωρίς εμπειρία παράλληλα με τις έννοιες του OOP.
migf1 Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 OFFTOPIC: +1 κι από μένα για C και Java, τις θεωρώ ιδανικές βάσεις για οτιδήποτε περαιτέρω.
Timonkaipumpa Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 OFFTOPIC: +1 κι από μένα για C και Java, τις θεωρώ ιδανικές βάσεις για οτιδήποτε περαιτέρω. Βασικά.... όχι Java για OOP. Απορώ γιατί δεν διδάσκουν Smalltalk. Αρκετά πιο OO από Java και C#. Αφήνω απέξω την C++ γιατί μπορεί κανείς να κάνει τους μηχανισμούς της smalltalk (απαιτεί βέβαια κάποιο overhead αλλά δεν παύει να μπορεί). Επίσης, Objective C. C και Smalltalk παρέα! defacer Μπορεί ένας οργανισμός να ανήκει σε δύο οικοσυστήματα. Π.χ. κύτταρο. Ανήκει στο οικοσύστημα του αίματος, στον άνθρωπο αλλά και στο γενικότερο. Ακόμα, αμφίβιο. Ανήκει και στο υδάτινο οικοσύστημα αλλά και στο χερσαίο. Για αυτό, θεωρώ πως είναι πιο ΟΟ να σχεδιαστεί έτσι, ειδικά και εάν γραφτεί σε γλώσσα Smalltalk ή Objective C, όπου οι οργανισμοί θα στέλνουν μήνυμα στο οικοσύστημα και το οικοσύστημα στους οργανισμούς.
migf1 Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 Βασικά η Java συνδυάζει πολλά και χρήσιμα: στοχευμένο OOP (δεν πλατιάζει/αποπροσανατολίζει), crossplatform (τρέχει παντού) και επαγγελματικά περιζήτητη (πολλά χρόνια).
Timonkaipumpa Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 Αυτό δεν την κάνει τόσο καλή σε ΟΟ όπως η Smalltalk.
bokarinho Δημοσ. 19 Δεκεμβρίου 2011 Δημοσ. 19 Δεκεμβρίου 2011 Αν θέλεις να αποφύγεις τους pointers, άλλαξε γλώσσα. Είναι σα να λες ότι θέλεις να οδηγήσεις αυτοκίνητο χωρίς αυτόματο κιβώτιο αποφεύγοντας το λεβιέ. Δε μπορώ να καταλάβω με την καμία, αν είναι έτσι όπως τα λες, πώς είναι δυνατόν να δίνουν τέτοιες ασκήσεις (γιατί βασικά η άσκηση είναι δύσκολη για επίπεδο "έχω κάνει 10-15 μαθήματα") χωρίς να έχουν διδάξει πρώτα τα εντελώς απαραίτητα. Όχι ότι αν τα είχαν διδάξει δηλαδή θα χαμπάριαζε η συντριπτική πλειοψηφία, αλλά τουλάχιστον στα χαρτιά θα ήταν εντάξει. Got it για τα instances, απλά η ερώτηση είναι για C++ οπότε το μετέφρασα ανάλογα. Το ανάποδο aggregation (άσχετο: νομίζω πως αυτός ο όρος δεν είναι σωστός εδώ γιατί ο οργανισμός δεν ΕΧΕΙ οικοσύστημα, αλλά εξαρτάται από οικοσύστημα -- καλύτερα να το λέμε dependency) είναι μια πολύ ενδιαφέρουσα ιδέα (αν και εφόσον το οικοσύστημα μοντελοποιεί το περιβάλλον, δε νομίζω πως γίνεται κάποιος οργανισμός να ανήκει σε 2 ταυτόχρονα) αλλά είναι πολύ δυσκολότερο σαν υλοποίηση γιατί απαιτεί εμπειρία design, πράγμα που δεν το συζητάμε καν (εδώ αμάν κάνουμε να χρησιμοποιήσουμε pointers). Respect στον Defacer για την παρομοίωση.
george406 Δημοσ. 20 Δεκεμβρίου 2011 Μέλος Δημοσ. 20 Δεκεμβρίου 2011 γεια σασ παιδια..να ρωτησω κατι??για τον χρονο που θελω να περναει πια συναρτηση θα χρησιμοποιησω???συναρτηση<ctime>????
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα