Lanike71 Δημοσ. 23 Δεκεμβρίου 2011 Δημοσ. 23 Δεκεμβρίου 2011 Καλησπέρα παιδιά, Θα ήθελα τη βοήθειά σας σε κάποιες απορίες που έχω σχετικά με java. Έχοντας ήδη ένα διάγραμμα κλάσεων και σχέσεις μεταξύ οντοτήτων θα ήθελα να με βοηθήσετε να καταλάβω πώς υλοποιείται το εξής: Για παράδειγμα έχουμε μία οικογένεια που έχει πολλά άτομα(ένα-πολλά) και πάνε όλοι σούπερ-μάρκετ. Κάθε μέλος έχει δικαίωμα να έχει πολλά καρότσια(ένα-πολλά) Κάθε καρότσι μπορεί να έχει πολλά προιόντα μέσα(ένα-πολλά). Κάθε προιόν έχει τιμή μονάδας. Είναι προφανές ότι το "πολλά" θα είναι ένας πίνακας αντικειμένων και θα μπαίνει σαν πεδίο με αυτό που συσχετίζεται σαν "ένα",δηλ. η οικογένεια θα έχει πεδίο "άτομο". Αν έχω καταλάβει κάτι λάθος ως τώρα,πείτε μου. Ας υποθέσουμε ότι θέλουμε να δημιουργήσουμε μία μέθοδο,makeBuy(),ποιά θα είναι η αλυσίδα πράξεων που θα πρέπει να λάβουν χώρα;Ποιά αντικείμενα θα πρέπει να δημιουργηθούν αλυσιδωτά,δεδομένου ότι η makeBuy() είναι (λογικά) μέθοδος του "καροτσιού" ίσως. Συγνώμη αν είμαι λίγο ακαταλαβίστικος.
nexuss Δημοσ. 23 Δεκεμβρίου 2011 Δημοσ. 23 Δεκεμβρίου 2011 Θα ξεκινήσεις από το μεγαλύτερο επίπεδο, που στην προκειμένη περίπτωση είναι το Άτομο (ή η Οικόγενεια αν δεν κατάλαβα καλά, όμως δεν αλλάζει κάτι από τη γενική λογική). Επειδή η σχέση των πεδίων που έχεις είναι HAS-A, αρκεί να δημιουργείς τα κατάλληλα αντικείμενα σε κάθε κλάση όπως λες και εσύ, πχ στην κλάση Άτομο θα έχεις το πεδίο Καλάθι, στην κλάση Καλάθι θα έχεις το πεδίο Προϊόν κ.α. Όταν καλέσεις τη μέθοδο makeBuy() θα μπορείς να δεις τις συνολικές αγορές καλώντας σε κάθε Άτομο μια κατάλληλη μέθοδο πχ Melos.getCart(); η οποία θα σου επιστρέφει το καλάθι, το οποίο θα περιέχει τα προϊόντα, τα οποία έχουν κάποια τιμή. Οπότε αν θέλεις να δεις περισσότερες λεπτομέρειες πχ ποια είναι η τιμή του τάδε προϊόντος που αγόρασε το τάδε άτομο, αρκεί να καλέσεις melos.getCart().getProduct().getPrice()
nakayama Δημοσ. 23 Δεκεμβρίου 2011 Δημοσ. 23 Δεκεμβρίου 2011 (επεξεργασμένο) Βήμα 1 Δημιουργείς το interface purchase που θα έχει το προτότυπο της μεθόδου makeBuy. Βήμα 2 Υλοποιείς την συνάρτηση σε μια class Supermarket implements purchase Bήμα 3 Έχεις τον αγοραστή σε μια class Byer που κάνει public class Byer implements purchase { } Βήμα 4 Στο Supermarket public class Supermarket implements purchase { } Με άλλα λόγια το purchase είναι common interface και για το Byer και για το Supermarket Επεξ/σία 24 Δεκεμβρίου 2011 από nakayama
nexuss Δημοσ. 23 Δεκεμβρίου 2011 Δημοσ. 23 Δεκεμβρίου 2011 public class Byer extends Supermarket Δε στέκει αυτό γιατί ο Byer δεν έχει σχέση IS-A με το σουπερμάρκετ. Με λίγα λόγια ο αγοραστής δεν είναι σούπερ μάρκετ.
Lanike71 Δημοσ. 23 Δεκεμβρίου 2011 Μέλος Δημοσ. 23 Δεκεμβρίου 2011 Θα ξεκινήσεις από το μεγαλύτερο επίπεδο, που στην προκειμένη περίπτωση είναι το Άτομο (ή η Οικόγενεια αν δεν κατάλαβα καλά, όμως δεν αλλάζει κάτι από τη γενική λογική). Επειδή η σχέση των πεδίων που έχεις είναι HAS-A, αρκεί να δημιουργείς τα κατάλληλα αντικείμενα σε κάθε κλάση όπως λες και εσύ, πχ στην κλάση Άτομο θα έχεις το πεδίο Καλάθι, στην κλάση Καλάθι θα έχεις το πεδίο Προϊόν κ.α. Όταν καλέσεις τη μέθοδο makeBuy() θα μπορείς να δεις τις συνολικές αγορές καλώντας σε κάθε Άτομο μια κατάλληλη μέθοδο πχ Melos.getCart(); η οποία θα σου επιστρέφει το καλάθι, το οποίο θα περιέχει τα προϊόντα, τα οποία έχουν κάποια τιμή. Οπότε αν θέλεις να δεις περισσότερες λεπτομέρειες πχ ποια είναι η τιμή του τάδε προϊόντος που αγόρασε το τάδε άτομο, αρκεί να καλέσεις melos.getCart().getProduct().getPrice() Ευχαριστώ για την απάντηση. Ποιά είναι η λογική σύνταξη του constructor όμως όταν θέλουμε το εξής: Η μητέρα της Χ οικογένειας,στο καρότσι νο3 έχει καρότα.Πώς θα φτιαχτεί ο constructor;Μήπως θα πρέπει να υπάρχει μέθοδος που θα καλείται και θα φτιάχνει αντικείμενα;
nexuss Δημοσ. 23 Δεκεμβρίου 2011 Δημοσ. 23 Δεκεμβρίου 2011 Θα πρέπει να δεις κάθε κλάση τι πεδία θα περιέχει. Αυτό μπορείς να το κάνεις σκεπτόμενος απλά. Πχ Ξεκινώντας μπορείς να πεις τα εξής: Οικογένεια έχει Μητέρα (άρα η κλάση Οικογένεια θα έχει κάποιο πεδίο Μητέρα) Μητέρα έχει Καλάθι (άρα η κλάση Μητέρα έχει πεδίο Καλάθι ή έχει πεδίο μια List που αποτελείται από Καλάθια) Καλάθι έχει Προϊόν (άρα η κλάση Καλάθι έχει πεδίο Προϊόν ή έχει πεδίο μια List με Προϊόντα) Καρότο είναι Προϊόν (η κλάση Καρότο θα κάνει extend την κλάση Προϊόν) Ελπίζω να πήρες μια ιδέα για το πώς περίπου θα πρέπει να το κάνεις. Όπου βλέπεις σχέση "έχει" να φαντάζεσαι κάποιο πεδίο σε μια κλάση, ενώ όπου βλέπεις σχέση "είναι" να φαντάζεσαι μια κλάση/interface που κληρονομεί από κάποια άλλη κλάση/interface. Αν έχεις αυτό για αρχή υπόψη σου θα σου είναι πιο εύκολο μετά να καταλάβεις που και πώς θα πρέπει να αρχικοποιείς τα αντικείμενά σου. Αν δυσκολευτείς πουθενά, εδώ είμαστε...
Timonkaipumpa Δημοσ. 23 Δεκεμβρίου 2011 Δημοσ. 23 Δεκεμβρίου 2011 Βασικά, η οικογένεια έχει μέλη με συγκεκριμένα καθήκοντα - θέσεις - λειτουργίες. Η μητέρα, όμως, είναι άνθρωπος με συγκεκριμένη θέση στην οικογένεια. Το ίδιο και ο πατέρας, το παιδί κτλ. Δηλαδή: Η οικογένεια έχει μέλη. Ο πατέρας, η μητέρα και τα παιδιά είναι άνθρωποι. Η οικογένεια έχει πατέρα, μητέρα και παιδιά. Υ.Γ. Πιο γενικά, η οικογένεια είναι ομάδα. Η ομάδα έχει μέλη, χωρισμένα σε "tiers". Τα μέλη της οικογένειας έχουν δύο tiers. Ένα οι γονείς και ένα τα παιδιά.
nakayama Δημοσ. 24 Δεκεμβρίου 2011 Δημοσ. 24 Δεκεμβρίου 2011 Δε στέκει αυτό γιατί ο Byer δεν έχει σχέση IS-A με το σουπερμάρκετ. Με λίγα λόγια ο αγοραστής δεν είναι σούπερ μάρκετ. Μετά από usability test έβγαλα service pack. public class Byer implements purchase Το purchase είναι common interace και για τον Byer και για το Supermarket.
nexuss Δημοσ. 24 Δεκεμβρίου 2011 Δημοσ. 24 Δεκεμβρίου 2011 Μετά από usability test έβγαλα service pack. Zuper!!!! public class Byer implements purchase Το purchase είναι common interace και για τον Byer και για το Supermarket. Τώρα είναι κάπως καλύτερα...
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα