CS 902 Final Exam-Take Home Due Monday, December 15, 6:00 P.M. Rogers Hall 207, NO EXCEPTIONS! I suggest you budget your time so that the exam is essentially complete by Saturday, December 13. This way you have some extra time for emergencies like printers breaking or utopia crashing. Please discuss this assignment with your friends, colleagues, spouses, coworkers, animal companions and anyone else you find helpful. I strongly recommend you have at least one other person read and comment on your code. However, the work you hand in must be your own. Do as much as possible, in roughly this order. I do not expect that everyone will finish all of this. However, this is a competitive exam. The best solutions get A's, and then I work down from there. 1. Write a package of classes that model one-dimensional cellular automata as discussed in class. Allow as much flexibility as possible for the rules by which successive states of the automaton are calculated. 2. Provide a minimal character mode front-end for your classes. 3. Provide an applet based GUI as a front-end. No changes to the back-end should be required to support the front-end. In other words, the back end should not know or care which front-end is invoking it. 4. Provide an interface that allows the user to modify the applet's rules. 5. Provide an interface that allows the user to modify the applet's initial data. 6. Make the applet a JavaBean with an appropriate set of properties. 7. Create a PropertyEditor or customizer that allows designer to modify the rules followed by the automaton. 8. Not all automata reach a stable state. Provide support for a scrolling view of the data. 9. Assume you allow automata to continue for an infinite amount of time, recognize stable states and halt the automaton when such a state is reached. 10. Some automata cycle. Allow the program to recoginze a cycle and halt. You should hand in a written analysis of your program that specifically addresses the following issues: 1. Explain the design of your program, especially the backend-user-interface separation. 2. How do you define a rule? Is it part of an automaton? Is it a separate class? An interface? What is the most general rule your program supports? 3. Identify any design patterns you used. Explain why you chose them. 4. Are your automata finite or infinite? If finite, how do you handle edge conditions? If infinite, how do you handle memory allocation? 5. Did you notice anything interesting, intriguing or worthy of further investigation among the automata and classes of automata you explored? Would you like to postulate any hypotheses about the behavior of these types of automata? All source code should show sound object oriented design principles such as composition, delegation, separation of user interface from the data model, and use of appropriate design patterns. You must use the 1.1 delegation event model, not the 1.0 inheritance model based on handleEvent(). Code should be legible, well-commented, and well-documented. Java standard naming conventions for identifiers should be followed. Use no more than two spaces per indentation. Do not use tabs to indent unless your printer can make them small. Hand in printed source code, documentation and analysis, screenshots, and a URL where the applet itself as well as all source code and documentation can be found. Also hand in a labeled floppy disk containing a copy of the hierarchy from your web site. Use 8.3 names for the floppy disk files. Place all .class files in a JAR archive. I will first attempt to grade the applet from your web site, probably though not necessarily using HotJava 1.0 running on the X-terminals.