For your final project, you are free to write any program you wish, under a few constraints. First of all, your program should be a Java program, and I should be able to compile it and run it on our lab Linux systems. Second, I want you to focus your attention on the design of a good user interface. I'd much rather see a modest program with a well-designed user interface than a computationally ambitious program with a mediocre interface.
In class Monday, May 23, hand in a one-page description of your final project. Tell me what you plan to do, and give me a short development plan. This plan should consist of a list of testable stages of development--describe each stopping point and how you will test it.
Hand in the following (in a directory named "final") via HSP by 5:00PM Monday, June 6, 2005.
Source code
A text file called readme.txt containing:
Anything else you consider relevant, including Makefiles, use cases or diagrams (only if you created them for your own benefit), data files, etc.
User interface. Make your program pleasant and efficient to use. This is the focus of this project.
Your discussion of your design choices. Talk about your user interface design choices in your readme, justifying them where appropriate with ideas from Cooper and our discussions.
Correctness. If you implement a feature, make sure it works correctly. Think about how you're going to test your features before you start coding. You might even go so far as to write a collection of test cases and/or a unit testing plan before doing anything else.
Style and readability. Appropriate commenting, indentation, naming, use of symbolic constants, etc. Good choices of data structures and methods also enhance readability.
Modularity. I expect you to make good use of the data abstraction tools available in Java. Is there a relevant design pattern? Use it if you think it's a good choice.
Appropriate use of libraries. If you need a string manipulation or mathematical function, for example, check out the methods for String and Math. Make a point of knowing (or asking about) Java's standard libraries.
Documentation. Use javadoc to describe your methods and classes briefly and clearly.
Assertions. Enforce your pre-conditions with assertions.
Performance. This may not be relevant for this project, but if your program has nasty delays in it while you're dragging or typing, try to figure out why, and fix it.
Good memory management. Since Java has garbage collection, it's easy to ignore memory management. But if you are instantiating lots of new objects when you don't need to (say, inside a loop instead of outside), you're wasting both time and space.
Start early, have fun, and keep in touch.
Have a great summer and beyond.