Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

γεια σασ παιδια..θα ηθελα την βοηθεια σασ για ενα project...εχουμε την παρακατω ασκηση:

 

...η ερωτηση μου ειναι να κανω 3 αρχεια το ενα για κλασεισ το αλλο για τισ διαφορεσ λειτουργιεσ μασ και το αλλο main??και στισ κλασεισ να κανω για καθε οργανισμο ξεχωριστη κλαση?δεν θα βγουν παρα πολλεσ?

 

καθε βοηθεια παιδια δεκτη...!!!!project2012.pdf

Δημοσ.

Η ερώτηση που κάνεις είναι:

 

"Πώς να κάνω τον κώδικα έτσι ώστε να γράψω λιγότερο αλλά να μην χάσω βαθμό".

 

 

Η γνώμη μου είναι κάτσε δες πώς οργανώνεται το project σου καλύτερα ΕΝΝΟΙΟΛΟΓΙΚΑ, που είναι αρκετά ενδιαφέρον project για φοιτητή, και δημιούργησε ΠΡΩΤΑ ΑΠΟ ΟΛΑ το static class diagram. Αφού το κάνεις αυτό όλα τα άλλα θα ΕΙΝΑΙ ΠΑΙΧΝΙΔΑΚΙ.

 

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

 

 

Δεν είναι ανάγκη να κάνεις ξεχωριστό αρχείο για τις λειτουργίες μιας και αυτό παραβιάζει το OO. Οι λειτουργίες δεν είναι ξεκάρφωτες. Κάποιος τις κάνει. Φτιάξε το static class diagram και μετά θα είσαι παραπάνω από ΟΚ.

Δημοσ.

Να κάνεις ένα αρχείο .cpp και ένα .h για κάθε μία κλάση που έχεις. Αυτό που λες "διάφορες λειτουργίες" κοίταξε να το περιορίσεις όσο είναι δυνατόν, γιατί υπό ιδανικές συνθήκες θα έπρεπε να είναι άδειο (και όλες οι διάφορες λειτουργίες να βρίσκονται σε κατάλληλες κλάσεις), αυτό όμως είναι και θέμα εμπειρίας οπότε μη σκοτιστείς πολύ. Απλά να έχεις υπόψη ότι όσο πιο πολλά πράγματα μπαίνουν στις "διάφορες λειτουργίες" τόσο πιο "λάθος" πορεία έχεις πάρει.

 

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

 

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

 

>enum AnimalKind {
   Elephant,
   Sheep,
};

Animal* AnimalFactory::createAnimal(AnimalKind kind) {
   switch(kind) {
       case Elephant: return new Herbivore("Elephant", 100);
       case Sheep: return new Herbivore("Sheep", 20);
   }
}

 

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

Δημοσ.

Να κάνεις ένα αρχείο .cpp και ένα .h για κάθε μία κλάση που έχεις. Αυτό που λες "διάφορες λειτουργίες" κοίταξε να το περιορίσεις όσο είναι δυνατόν, γιατί υπό ιδανικές συνθήκες θα έπρεπε να είναι άδειο (και όλες οι διάφορες λειτουργίες να βρίσκονται σε κατάλληλες κλάσεις), αυτό όμως είναι και θέμα εμπειρίας οπότε μη σκοτιστείς πολύ. Απλά να έχεις υπόψη ότι όσο πιο πολλά πράγματα μπαίνουν στις "διάφορες λειτουργίες" τόσο πιο "λάθος" πορεία έχεις πάρει.

 

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

 

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

 

>enum AnimalKind {
   Elephant,
   Sheep,
};

Animal* AnimalFactory::createAnimal(AnimalKind kind) {
   switch(kind) {
       case Elephant: return new Herbivore("Elephant", 100);
       case Sheep: return new Herbivore("Sheep", 20);
   }
}

 

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

 

 

 

εχω κανει το διαγραμμα απλα ηθελα να αποφυγω τισ πολλεσ κλασεισ....σευχαριστω παρα πολυ γιαυτη τη σκεψη σ πιστευω οτι ειναι η πιο λειτουργικη...αν χριαστω κατι θα σασ ξαναστειλω:)

Δημοσ.

εχω κανει το διαγραμμα απλα ηθελα να αποφυγω τισ πολλεσ κλασεισ....σευχαριστω παρα πολυ γιαυτη τη σκεψη σ πιστευω οτι ειναι η πιο λειτουργικη...αν χριαστω κατι θα σασ ξαναστειλω:)

 

 

Χωρίς το διάγραμμα θα καταλήξεις να έχεις περισσότερες κλάσεις από όσες πρέπει και πολλές "άλλες λειτουργίες" χωρίς να θυμάσαι για ποιο λόγο έκανες το κάθε τι.

 

 

Εάν θες την γνώμη μου, ΜΗΝ σπαταλήσεις πολύ χρόνο στο να γράψεις κώδικα. Σπατάλησε ΠΟΛΥ χρόνο στο να ΣΚΕΦΤΕΙΣ τα κοινά που έχει κάθε τι, τις οντότητές σου και τις μεταξύ τους σχέσεις, ΚΑΙ ΣΤΟ ΔΙΑΓΡΑΜΜΑ (για την ακρίβεια δεν είναι δική μου γνώμη... είναι του μπαμπάκα, ενός από τους "μπαμπάκες", της UML... και ΔΟΥΛΕΥΕΙ.. ΣΟΥ ΛΥΝΕΙ ΤΑ ΧΕΡΙΑ). Εάν είναι δυνατό, στο διάγραμμα ΓΡΑΨΕ και τις μεθόδους ΚΑΙ ΤΑ ΟΡΙΣΜΑΤΑ. Εννοείτε και τα attributes κάθε κλάσης (και τον qualifier τους, private και public).

 

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

 

Φυσικά και οι ερωτήσεις για το πώς σχετίζονται οι οντότητες είναι, για εμένα, αρκετά πιο ωραίες από το πώς θα υλοποιηθεί οτιδήποτε :P

Δημοσ.

γεια σασ!!!!!!λοιπον ακουστε τι εχω κανει μεχρι στιγμησ να μου πειτε και σεισ....εχω φτιαξει μια κυρια κλαση η οποια ειναι το οικοσυστημα μασ και εχω ωσ μεταβλητεσ την ηλικια μου ,το μεγεθοσ και τον βαθμο αναπτυξησ.μετα εχω δημιουργησει δυο υποκλασεισ τουσ πλαγκτον και μη πλαγτον που κληπονομουν τα στοιχεια του οικοσυστηματοσ και μετα εχω δημιουργησει καποιεσ υποκλασεισ αυτων που θα ειναι και για καθε οργανισμο.πχ για καρχαρια,σαρδελα κτλ.και εχω ξεκινησει να βαζω τυχαια καποιουσ αριθμουσ χρησιμοποιωντασ την srand.το πλοβλημα μ ομωσ ειναι πωσ επειδη φυσικα θα χρησιμοποιησω vector πινακα πωσ μπορω να ξεχωριζω καθε φορα τα αντικειμενα μ που θα βαζω μεσα σαυτοον????πρεπει να φτιαξω πολλουσ vector???σιγουρα δεν ειναι λογικο!!!θελω τα φωτα σασ!ελπιζω να καταλαβατε την απορια μ...

Δημοσ.

Εξαρταται ποιες ιδιοτητες θελεις.

 

Εχεις το παρακατω οικοσυστημα <- πλακτον <- καρχαριας (αν καταλαβα καλα)

Αν θες τις ιδιοτητες που εχει το οικοσυστημα τοτε ο vector θα ειναι οικοσυστημα και θα παιρνει οικοσυστημα,πλακτον,καρχαριας

Αν θες τις ιδιοτητες που εχει το πλακτον τοτε ο vector θα ειναι πλακτον και θα παιρνει πλακτον,καρχαριας

Κλπ

Δημοσ.

Είναι λάθος!

 

Το πλαγκτόν ΔΕΝ ΕΙΝΑΙ οικοσύστημα. Σκέψου λίγο πριν. Αυτό που είπα, νομίζω ότι, θα μπορούσες να το σκεφτείς μόνος σου.

 

Το οικοσύστημα ΕΧΕΙ πλαγκτόν. Aggregation και μάλιστα "σκούρο" στο VS.

 

 

Μην κολλάς στο πώς θα το κάνεις. ΣΚΕΨΟΥ πρώτα ΤΙ ΣΧΕΣΕΙΣ ΥΠΑΡΧΟΥΝ μεταξύ τους. Σκέψου όμως και όχι να τα περιμένεις έτοιμα.

 

Επίσης, γράφε πιο προσεγμένα. Αν μη τι άλλο, είναι δείγμα ευγένειας προς τους αναγνώστες σου.

Δημοσ.

ψιλομπερδευτηκα :huh:

 

Τι ακριβος θες να κανεις; Να εχεις εναν vector με οικοσυστηματα,καρχαριες,πλακτον και μετα;

 

Είναι λάθος!

 

Γιατι; Το οικοσυτημα κατα καποιο τροπο ειναι ενας οργανισμος happy.gif ζει και πεθαινει

Δημοσ.

Ωραία άσκηση. Θα έχει ενδιαφέρον αν το φτιάξεις και με gui

Όπως σου είπε κι ο Timonkaipumpa το σημαντικότερο σ'αυτή την άσκηση είναι να καταλάβεις και να ξεχωρίσεις τις οντότητες και τις σχέσεις. Για τις διάφορες οντότητες που σου έρχονται στο μυαλό εφάρμοσε τον εξής κανόνα

"is a" - "has a"

Έστω ότι δύο οντότητες σχετίζονται. Σχετίζονται με "is a" ή "has a" ;

 

Παράδειγμα:

 

House is a Building

η κλάση House επεκτείνει την κλάση Building, παίρνοντας τα γενικά χαρακτηριστικά ενός κτιρίου και προσθέτει τα ειδικότερα ενός σπιτιού όπως για παράδειγμα τα υπνοδωμάτια.

 

House has a Bedroom

στην κλάση House ανήκει ένα καινούριο instance Bedroom με ότι "λειτουργίες" περιλαμβάνει αυτό όπως για παράδειγμα αριθμός ατόμων που κοιμούνται στο συγκεκριμένο δωμάτιο.

Δημοσ.

Γιατι; Το οικοσυτημα κατα καποιο τροπο ειναι ενας οργανισμος happy.gif ζει και πεθαινει

 

 

Με τα καλά του OOP, εάν το πας τόσο γενικά τότε θα πρέπει να φτιαχτεί μία κλάση Organismos όπου να είναι τόσο γενική που να έχει τις όμοιες ιδιότητες των οργανισμών με την έννοια του πλαγκτόν και την έννοια του οικοσυστήματος. Θα μπορούσε αλλά εξαρτάται από την εφαρμογή. Σε αυτή εδώ δεν νομίζω ότι θα είχε νόημα. Σε μία γενικότερη μελέτη των οργανισμών, ναι θα είχε. Π.χ., ο άνθρωπος είναι οργανισμός αλλά έχει και άλλους οργανισμούς.

Δημοσ.

μια ερωτηση που μπορει να ειναι τελειωσ λαθοσ αλλα δεν το βρισκω πουθενα και το βιβλιο δεν λεει κατι..γινεται να χρησιμοποιησω vector μεσα σε vector??

Δημοσ.

μια ερωτηση που μπορει να ειναι τελειωσ λαθοσ αλλα δεν το βρισκω πουθενα και το βιβλιο δεν λεει κατι..γινεται να χρησιμοποιησω vector μεσα σε vector??

 

αμε

 

btw γιατι δεν δοκιμαζεις πριν ρωτησεις;

Δημοσ.

μια ερωτηση που μπορει να ειναι τελειωσ λαθοσ αλλα δεν το βρισκω πουθενα και το βιβλιο δεν λεει κατι..γινεται να χρησιμοποιησω vector μεσα σε vector??

 

Γίνεται αλλά πας να κάνεις πατάτα.

 

Η όλη ιδέα εδώ είναι να χρησιμοποιήσεις πολυμορφισμό. Δηλαδή, θα πρέπει να υπάρχει μια class organism από την οποία θα κάνουν άμεσα ή έμμεσα derive όλες οι κλάσεις σου που αντιπροσωπεύουν οργανισμούς.

 

Το οικοσύστημά σου θα έχει (has-a, aggregate) ένα vector<organism*> -- προσοχή, pointer από organism αλλιώς δε θα μπορέσεις να κάνεις πολυμορφισμό.

 

BTW, και συγγνώμη για το άσχετο αλλά δε μπόρεσα να συγκρατηθώ: :-D

How many object-oriented programmers does it take to change a light bulb?

 

 

None -- you just tell the bulb to change itself.

 

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...