doug2006 Δημοσ. 17 Δεκεμβρίου 2016 Δημοσ. 17 Δεκεμβρίου 2016 (επεξεργασμένο) Κανεις να ξέρει πως λύνεται ο παρακάτω κώδικαςΣτα ερωτηματικά θέλει καποια γραμμή κώδικα κάποια μπορεί να ειναι κενάhttps://postimg.org/image/5oz8bygjt/ Επεξ/σία 17 Δεκεμβρίου 2016 από doug2006
Moderators Kercyn Δημοσ. 17 Δεκεμβρίου 2016 Moderators Δημοσ. 17 Δεκεμβρίου 2016 Κλασσική περίπτωση βλάβης.
DevFromHell Δημοσ. 18 Δεκεμβρίου 2016 Δημοσ. 18 Δεκεμβρίου 2016 Ακόμα δέν έχω προλάβει να διαβάσω Design Patterns - ξέρω μόνο αυτά που έχει το βιβλίο για την πιστοποίηση Java 8 - αλλά άν είχα να το λύσω θα κοιτούσα πρώτα εδώ: https://www.tutorialspoint.com/design_pattern/state_pattern.htm Δέν πρέπει να είναι δύσκολο πάντως..
doug2006 Δημοσ. 21 Δεκεμβρίου 2016 Μέλος Δημοσ. 21 Δεκεμβρίου 2016 Ευχαριστώ αλλά δε μπορώ να καταλάβω πως βγαίνει
kaliakman Δημοσ. 21 Δεκεμβρίου 2016 Δημοσ. 21 Δεκεμβρίου 2016 Ευχαριστώ αλλά δε μπορώ να καταλάβω πως βγαίνει https://sourcemaking.com/design_patterns/state
newIdentity Δημοσ. 22 Δεκεμβρίου 2016 Δημοσ. 22 Δεκεμβρίου 2016 Ευχαριστώ αλλά δε μπορώ να καταλάβω πως βγαίνει Τί δεν καταλαβαίνεις και ευχαριστείς δηλαδή? Σου έδωσαν τα παιδιά πάνω το UML διάγραμμα και άμα googlαρεις State pattern θα βρείς κανα κατομμύριο έτοιμα παραδείγματα.. Αμα δέν ασχοληθείς λίγο δέν πρόκειται να βγεί ποτέ.. Εχεις ένα interface State το οποίο γίνεται implementation από 2 κλάσεις: την On και την Off και το χρησιμοποιεί η κλάση Engine.. Στον κώδικά σου έχεις ένα άδειο interface State και στις κλάσεις σου On και Off τις void μεθόδους turnOn() και turnOff() με μοναδική παράμετρο ένα αντικείμενο τύπου Engine.. Ποιές θα είναι οι public abstract μέθοδοι στο interface State που υλοποιούν οι concrete κλάσεις On και Off??? Η κλάση Engine χρησιμοποιεί το interface State και για να το αλλάζει χρειάζεται ενα "pointer".. Κοίτα τη σειρά: private State state = new Off(); Εχεις ένα αντικείμενο state τύπου State το οποίο όποτε αλλάζει κατάσταση αλλάζει και η κατάσταση της Engine σου.. Αρχικά είναι σε κατάσταση off.. Έχεις ακούσει ποτέ σου καμιά Μηχανή να είναι σε αρχική κατάσταση null? Όχι.. Πώς θα αλλάξει κατάσταση ο "pointer" σου state? Μα φυσικά μέσω της void μεθόδου changeState().. Επομένως κάτι λείπει εκεί μέσα.. Αν η μέθοδος ήταν changeState(State state) θα έπρεπε να βάλεις this.state=state; γιατί η παράμετρος της μεθόδου έχει το ίδιο όνομα με το αντικείμενο που κάνεις αναφορά.. Για ποιό λόγο χρησιμοποιούμε το State pattern? Γιατί ο κώδικάς μας έχει πολυμορφική συμπεριφορά και έτσι είναι πιό δύσκολο να κάνουμε λάθος.. μπορούμε να προσθέσουμε όσες επιπλέον καταστάσεις θέλουμε.. δέν χρειάζεται να χρησιμοποιοήσουμε control flow statements.. και γενικά ο κώδικάς μας είναι πιό κατανοητός, ευκολοδιάβαστος και maintainable.. άλλο το δικό σου ασκησίδιο και άλλο να έχεις ένα project με εκατομμύρια γραμμές κώδικα.. Τί δεν καταλαβαίνεις και ευχαριστείς δηλαδή? Σου έδωσαν τα παιδιά πάνω το UML διάγραμμα και άμα googlαρεις State pattern θα βρείς κανα κατομμύριο έτοιμα παραδείγματα.. Αμα δέν ασχοληθείς λίγο δέν πρόκειται να βγεί ποτέ.. Εχεις ένα interface State το οποίο γίνεται implementation από 2 κλάσεις: την On και την Off και το χρησιμοποιεί η κλάση Engine.. Στον κώδικά σου έχεις ένα άδειο interface State και στις κλάσεις σου On και Off τις void μεθόδους turnOn() και turnOff() με μοναδική παράμετρο ένα αντικείμενο τύπου Engine.. Ποιές θα είναι οι public abstract μέθοδοι στο interface State που υλοποιούν οι concrete κλάσεις On και Off??? Η κλάση Engine χρησιμοποιεί το interface State και για να το αλλάζει χρειάζεται ενα "pointer".. Κοίτα τη σειρά: private State state = new Off(); Εχεις ένα αντικείμενο state τύπου State το οποίο όποτε αλλάζει κατάσταση αλλάζει και η κατάσταση της Engine σου.. Αρχικά είναι σε κατάσταση off.. Έχεις ακούσει ποτέ σου καμιά Μηχανή να είναι σε αρχική κατάσταση null? Όχι.. Πώς θα αλλάξει κατάσταση ο "pointer" σου state? Μα φυσικά μέσω της void μεθόδου changeState().. Επομένως κάτι λείπει εκεί μέσα.. Αν η μέθοδος ήταν changeState(State state) θα έπρεπε να βάλεις this.state=state; γιατί η παράμετρος της μεθόδου έχει το ίδιο όνομα με το αντικείμενο που κάνεις αναφορά.. Για ποιό λόγο χρησιμοποιούμε το State pattern? Γιατί ο κώδικάς μας έχει πολυμορφική συμπεριφορά και έτσι είναι πιό δύσκολο να κάνουμε λάθος.. μπορούμε να προσθέσουμε όσες επιπλέον καταστάσεις θέλουμε.. δέν χρειάζεται να χρησιμοποιοήσουμε control flow statements.. και γενικά ο κώδικάς μας είναι πιό κατανοητός, ευκολοδιάβαστος και maintainable.. άλλο το δικό σου ασκησίδιο και άλλο να έχεις ένα project με εκατομμύρια γραμμές κώδικα.. 1
Aztec Δημοσ. 22 Δεκεμβρίου 2016 Δημοσ. 22 Δεκεμβρίου 2016 Να συμπληρωσω γιατι μπορεί να μπερδευει οτι public class On { public void turnOn(Engine e) { -- DO NOTHING } } αυτό γιατι οταν το state είναι On ουσιαστικά το turnOn δεν αλλάζει state
DevFromHell Δημοσ. 22 Δεκεμβρίου 2016 Δημοσ. 22 Δεκεμβρίου 2016 Εμένα πάντως δέν μου άρεσε καθόλου το στυλάκι αυτού που απάντησε.. δηλαδή είπε το παιδί ότι δέν καταλαβαίνει και τον έπιασε απο τα μούτρα και στην ουσία δέν του εξήγησε και τίποτε.. καλά τον κάνανε ban οι administrators..
Aztec Δημοσ. 22 Δεκεμβρίου 2016 Δημοσ. 22 Δεκεμβρίου 2016 (επεξεργασμένο) public class Engine { private State state=new Off(); void changeState(State s) { this.state=s; } void turnOn() { state.turnOn(this); } void turnOff() { state.turnOff(this); } } public interface State { public void turnOn(Engine e); public void turnOff(Engine e); } public class On implements State { public void turnOn(Engine e){ System.out.println("Engine already turned on"); } public void turnOff(Engine e){ e.changeState(new Off()); System.out.println("Turnoff engine"); } } public class Off implements State{ public void turnOn(Engine e){ e.changeState(new On()); System.out.println("Turnon engine"); } public void turnOff(Engine e){ System.out.println("Engine already turned off"); } } Επεξ/σία 22 Δεκεμβρίου 2016 από Aztec 1
doug2006 Δημοσ. 23 Δεκεμβρίου 2016 Μέλος Δημοσ. 23 Δεκεμβρίου 2016 public class Engine { private State state=new Off(); void changeState(State s) { this.state=s; } void turnOn() { state.turnOn(this); } void turnOff() { state.turnOff(this); } } public interface State { public void turnOn(Engine e); public void turnOff(Engine e); } public class On implements State { public void turnOn(Engine e){ System.out.println("Engine already turned on"); } public void turnOff(Engine e){ e.changeState(new Off()); System.out.println("Turnoff engine"); } } public class Off implements State{ public void turnOn(Engine e){ e.changeState(new On()); System.out.println("Turnon engine"); } public void turnOff(Engine e){ System.out.println("Engine already turned off"); } } Ευχαριστώ μας τα ζητάει στις εξετάσεις μας χωρις να τα αναφέρει στην τάξη και δεν τα γνωρίζω γι αυτό τα ανέβασα έχω ακόμη μία άσκηση με iterator pattern στο ίδιο στύλ.
doug2006 Δημοσ. 23 Δεκεμβρίου 2016 Μέλος Δημοσ. 23 Δεκεμβρίου 2016 Αστειεύεσαι? Πόσταρε την να την φτιάξουμε.. https://postimg.org/image/4vy7gckx9/ τα δυο πρώτα δεν φαίνονται καλά είναι αν θυμάμαι καλά public interface Interator{ ? ? } public interface ICollector{ ? }
doug2006 Δημοσ. 25 Δεκεμβρίου 2016 Μέλος Δημοσ. 25 Δεκεμβρίου 2016 Δηλαδή άν διαβάσεις λίγο εδώ: https://www.tutorialspoint.com/design_pattern/iterator_pattern.htm ή εδώ: https://sourcemaking.com/design_patterns/iterator δέν μπορείς να το φτιάξεις? Αν είσαι οπτικοακουστικός τύπος δές εδώ: https://www.youtube.com/watch?v=VKIzUuMdmag Έχεις 2 interfaces το Container και το Iterator.. Το Iterator χρησιμοποιείται για να έχεις σειριακό access στα αντικείμενα διαφορετικών Collection χωρίς να σε νοιάζει ή να φανερώνεται το εσωτερικό σχήμα οργάνωσής τους.. Το Container χρησιμοποιείται για να σου επιστρέφει το Iterator και να μπορείς να διαχειριστείς τα διαφορετικά σου Collections.. Give it a go και άν είσαι τόσο άσχετος/η ξαναέλα εδώ να στο φτιάξουμε να μην κλαίς.. τα δουλεύω άλλα πάντα κάτι κάνω λάθος και ζήτησα βοήθεια γιατί η φιλοσοφία του καθηγητή είναι ότι αν κάνω έστω κ ένα λάθος σ κάποια γραμμή κόβει όλη την άσκηση :/
doug2006 Δημοσ. 25 Δεκεμβρίου 2016 Μέλος Δημοσ. 25 Δεκεμβρίου 2016 Δηλαδή άν διαβάσεις λίγο εδώ: https://www.tutorialspoint.com/design_pattern/iterator_pattern.htm ή εδώ: https://sourcemaking.com/design_patterns/iterator δέν μπορείς να το φτιάξεις? Αν είσαι οπτικοακουστικός τύπος δές εδώ: https://www.youtube.com/watch?v=VKIzUuMdmag Έχεις 2 interfaces το Container και το Iterator.. Το Iterator χρησιμοποιείται για να έχεις σειριακό access στα αντικείμενα διαφορετικών Collection χωρίς να σε νοιάζει ή να φανερώνεται το εσωτερικό σχήμα οργάνωσής τους.. Το Container χρησιμοποιείται για να σου επιστρέφει το Iterator και να μπορείς να διαχειριστείς τα διαφορετικά σου Collections.. Give it a go και άν είσαι τόσο άσχετος/η ξαναέλα εδώ να στο φτιάξουμε να μην κλαίς.. checkare μια please public interface Iterator { 1) public Integer getNext(); 2)public boolean hasNext(); } public interface ICollector{ 3)public Iterator getIterator(); } public class ListIterator 4) implements Iterator { private Mylist alist; private int index= 0; private int size=-1; //δεν είμαι σίγουρος για -1 φαίνεται public ListIterator(Mylist alist){ this.alist=alist; size=this.getsize(); } public Integer getNext(){ return alist.getItem(index++); } public boolean hasNex(){ return (index<size); } }//τελος class ListIterator public class Mylist 5) implements ICollector { private List<Integer> Integers=new ArrayList<Integer>; public Iterator getIterator(){ 6) return new ListIterator; } }
Aztec Δημοσ. 1 Ιανουαρίου 2017 Δημοσ. 1 Ιανουαρίου 2017 checkare μια please public interface Iterator { 1)public Integer getNext(); 2)public boolean hasNext(); } public interface ICollector{ 3)public Iterator getIterator(); } public class ListIterator 4) implements Iterator { private Mylist alist; private int index= 0; private int size=-1; //δεν είμαι σίγουρος για -1 φαίνεται 7)public ListIterator(Mylist alist){ this.alist=alist; size=this.getsize(); } public Integer getNext(){ return alist.getItem(index++); } public boolean hasNex(){ return (index<size); } }//τελος class ListIterator public class Mylist 5) implements ICollector { private List<Integer> Integers=new ArrayList<Integer>; public Iterator getIterator(){ 6) return new ListIterator; } } Δες λιγο τα 6 και 7 και κατάλαβε γιατι αυτα τα δύο δεν συνδυάζονται και άρα to 6 που έχεις βάλει είναι λάθος Τέλος δεν το έχεις γράψει ολοκληωμένο το προγραμμα και έχει λάθη αλλά οσον αφορά το ζητούμενο αυτο το θέμα εντόπισα
tsofras Δημοσ. 1 Ιανουαρίου 2017 Δημοσ. 1 Ιανουαρίου 2017 Άσχετα με το αν συνδυάζεται το 6 με το 7, όταν καλείς την getIterator με την υλοποίηση που έχεις κάνει απλά θα παίρνεις πίσω πάντα έναν κενό ListIterator. Και μία ερώτηση , άλλαξε η ερώτηση του τοπικ? και τι είναι αυτά τα 1,2,6,7 τα ερωτηματικά απο την εικόνα που έχεις κάνει attach? Δυσκολεύτηκα να καταλάβω τι θέλεις διαβάζοντας όλο το τοπικ
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα