Xthon Δημοσ. 17 Νοεμβρίου 2007 Δημοσ. 17 Νοεμβρίου 2007 Έχω μια απορία πάνω σε μια εργασία στον οντοκεντρικό προγραμματισμό Πρέπει να υλοποιήσω ένα πρόγγραμμα ηλεκτρονικού καταστήματος. Χοντρικά μιλώντας έχω μια κλάση Eshop στην οποία έχω την main και ένα Vector(userTable) με τους χρήστες(υπάρχει και κλάση User). Έχω και μια κλάση Admin για τον administrator. Θέλω ο admin να μπορεί να προσθέτει έναν user στο userCatalog που βρίσκεται στην Εshop. Το πρόβλημά μου είναι οτι για να χρησημοποιήσει ο Admin το userCatalog θα πρέπει να δημιουργηθεί αντικείμενο της Eshop μέσα στην Admin αλλα αυτό δεν έχει νόημα αφου το αντικείμενο αυτό δεν θα περιέχει τους ήδη αποθηκευμένους χρήστες. Καμιά ιδέα?? > public class UserCatalog{ Vector<User> userTable; public UserCatalog() { userTable = new Vector(); } public void addUser(User usr){ userTable.add(usr); } public User getUser (int index){ return userTable.elementAt(index); } ... } > public class Eshop{ UserCatalog userCatalog; public Eshop() { userCatalog = new UserCatalog(); } public static void main(String[] args) { ... Admin admin = new Admin(login,password); } } > public class admin{ addUser(User u){ User user1=new User(login1,password1); ???? //πως θα βάλω τον user1 στο userCatalog?? } ... }
alex2005 Δημοσ. 17 Νοεμβρίου 2007 Δημοσ. 17 Νοεμβρίου 2007 LOL οντοκεντρικός προγραμματισμός!Υπάρχουν άνθρωποι που το λένε έτσι?? Λοιπόν για να καταλάβω....έχεις μία τάξη Eshop που περιέχει UserCatalog το οποίο περιέχει όλους τους χρήστες του eshop. Και θέλεις να προσθέσεις έναν χρήστη.Οπότε η τάξη Εshop είναι άχρηστη και δεν χρειάζεται να κάνεις τίποτα. Οπότε αναρωτιέσαι πως θα αναφερθείς σε ένα αντικείμενο UserCatalog για να προσθέσεις έναν χρήστη.Το ερώτημα είναι αν ανά πάσα στιγμή μπορείς να βρεις το αντικείμενο Eshop στο οποίο προσθέτεις χρήστες κτλ.Αν δεν το έχεις κάνει τότε είναι λάθος η υλοποίησή σου. Πρέπει λοιπόν το αντικείμενο Eshop να μπορείς να το βρεις ανά πάσα στιγμή εννοώντας να βρίσκεται κάπου η μεταβλητή του που να μπορούν να το βλέπουν όλες οι τάξεις.Ή φυσικά να είναι static όλα τα δεδομένα της από την στιγμή που υποθέτω πως θέλεις μόνο ένα instance αυτή της τάξης όταν εκτελείται η εφαρμογή σου. Ελπίζω να ήμουν κατανοητός
Red_Phantom Δημοσ. 17 Νοεμβρίου 2007 Δημοσ. 17 Νοεμβρίου 2007 ΟΚ άμα έχεις συσχέτηση 1-1 δηλαδή 1 Admin χειρίζεται 1 UserCatalog public class admin{ private: UserCatalog* the_UserCatalog; public: UserCatalog* get_Catalog(); void set_Catalog(UserCatalog* catalog); } UserCatalog *admin::get_Catalog() { return the_UserCatalog; } void admin::set_Catalog(UserCatalog* catalog) { the_UserCatalog=catalog; } Οπότε μετά ξέρεις τι να κάνεις με την addUser() ... Κοίτα UML-Υλοποίηση UML για να βοηθηθείς
alex2005 Δημοσ. 17 Νοεμβρίου 2007 Δημοσ. 17 Νοεμβρίου 2007 Όχι ακριβώς φίλε φαντομά! Αν είναι για 1-1 συσχέτιση τότε το καλύτερο είναι να είναι public static UserCatalog.... Και πάλι λέω....μην μπερδεύετε τις γλώσσες!! Με κώδικα c++ μόνο σύγχυση θα φέρεις σε ένα thread για Java;) Το παιδί γράφει σε Java.
Red_Phantom Δημοσ. 17 Νοεμβρίου 2007 Δημοσ. 17 Νοεμβρίου 2007 Το ίδιο ειναι man. Σε java ---> public class admin{ private UserCatalog theUserCatalog get() set() } Etc υλοποιείται αυτο το "πράγμα" σε uml.
Red_Phantom Δημοσ. 17 Νοεμβρίου 2007 Δημοσ. 17 Νοεμβρίου 2007 Ή φυσικά να είναι static όλα τα δεδομένα της από την στιγμή που υποθέτω πως θέλεις μόνο ένα instance αυτή της τάξης όταν εκτελείται η εφαρμογή σου. Αυτό υλοποιείται με το πρότυπο σχεδίασης Singleton. Για να είσαι σωστος πρέπει να το υλοποιήσεις και αυτο.
Xthon Δημοσ. 17 Νοεμβρίου 2007 Μέλος Δημοσ. 17 Νοεμβρίου 2007 Καταρχάς σας ευχαριστώ για τις απαντήσεις σας και για την βοήθεια σας. Το userCatalog είναι ένα. Αλλα δεν είναι μόνο η κλάση Admin που πρέπει να έχει πρόσβαση σε αυτό. Πχ όταν ένας χρήστης κάνει log in πρέπει να ελέγχεται το UserCatalog προφανώς. Γιαυτό το userCatalog υποθέτω πρέπει να είναι στην κλάσση Eshop που έχω και την main. Επειδή δεν ξέρω καλά τι παίζει με το static αν το κάνω static ο μόνος περιορισμός είναι οτι θα έχω μόνο ένα instance?? Αν ναι τότε θα το κάνω έτσι. Οπότε αναρωτιέσαι πως θα αναφερθείς σε ένα αντικείμενο UserCatalog για να προσθέσεις έναν χρήστη.Το ερώτημα είναι αν ανά πάσα στιγμή μπορείς να βρεις το αντικείμενο Eshop στο οποίο προσθέτεις χρήστες κτλ.Αν δεν το έχεις κάνει τότε είναι λάθος η υλοποίησή σου. Πρέπει λοιπόν το αντικείμενο Eshop να μπορείς να το βρεις ανά πάσα στιγμή εννοώντας να βρίσκεται κάπου η μεταβλητή του που να μπορούν να το βλέπουν όλες οι τάξεις.Ή φυσικά να είναι static όλα τα δεδομένα της από την στιγμή που υποθέτω πως θέλεις μόνο ένα instance αυτή της τάξης όταν εκτελείται η εφαρμογή σου. Ελπίζω να ήμουν κατανοητός Πως θα κάνω το αντικείμενο Eshop να το βλέπουν όλες οι κλάσσεις??Αν κατάλαβα καλά πρέπει την κλάση Admin να έχω μια μεταβλητή Eshop. > public class Admin { Eshop E; public Admin(Eshop E){ this.E=E; } public addUser(user newUser){ E.addUser(); } } Αυτό ενοούσες??
alex2005 Δημοσ. 17 Νοεμβρίου 2007 Δημοσ. 17 Νοεμβρίου 2007 Το ίδιο ειναι man. Σε java ---> public class admin{ private UserCatalog theUserCatalog get() set() } Etc υλοποιείται αυτο το "πράγμα" σε uml. Καλά μία παρατήρηση έκανα...γνωρίζω πως είναι σχεδόν το ίδιο και σε c++ αλλά αφού μιλάμε για Java γιατί να μην παραθέτουμε κώδικα κατευθείαν σε Java. Never mind.... Καταρχάς σας ευχαριστώ για τις απαντήσεις σας και για την βοήθεια σας. Το userCatalog είναι ένα. Αλλα δεν είναι μόνο η κλάση Admin που πρέπει να έχει πρόσβαση σε αυτό. Πχ όταν ένας χρήστης κάνει log in πρέπει να ελέγχεται το UserCatalog προφανώς. Γιαυτό το userCatalog υποθέτω πρέπει να είναι στην κλάσση Eshop που έχω και την main. Επειδή δεν ξέρω καλά τι παίζει με το static αν το κάνω static ο μόνος περιορισμός είναι οτι θα έχω μόνο ένα instance?? Αν ναι τότε θα το κάνω έτσι. Πως θα κάνω το αντικείμενο Eshop να το βλέπουν όλες οι κλάσσεις??Αν κατάλαβα καλά πρέπει την κλάση Admin να έχω μια μεταβλητή Eshop. > public class Admin { Eshop E; public Admin(Eshop E){ this.E=E; } public addUser(user newUser){ E.addUser(); } } Αυτό ενοούσες?? Ναι κάπως έτσι μόνο που όπως είπα και πριν δεν έχει κάποιο νόημα να χρησιμοποιείς την τάξη EShop για να βάλεις κάτι σε ένα αντικείμενο της τάξης UserCalatog.Βάλε το κατευθείαν εκεί. Εdit: Τώρα το παρατήρησα έκανες ένα λαθάκι.είναι: Ε.getCatalog().addUser(user);
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.