CS 204: Software Design
Due 5:00PM Monday, 15 March 2010
You may work with a partner for this assignment.
Goals
For your final project, I want you to write a program that is complex
enough to exercise some of the important ideas from this class, simple enough
to complete by March 15, and interesting enough for you that you might
want to keep working on it after the term.
On the complexity front, I would like your program to either incorporate
one or more design patterns from our Design Patterns textbook, or give
you practice in GUI design and development, or both. To help you strike the right
balance, I have asked you to propose final project possibilities so I can
give you feedback before you get started.
You may use either Java or Python for this project.
While you design and develop your code, please pay attention to:
- Well-designed function/method interfaces.
- Clean separation of concerns via the appropriate
use of classes, inheritance, etc.
- Good style: naming, comments, layout, etc.
- Thorough error handling, including both exceptions and
assertions where appropriate.
- Extensibility. Think about the three or four features
you would add to the program next if you kept working on it
after the term. Would it be easy and natural to add those items,
or would the program require a complete rewrite?
- Unit testing and incremental development.
- UI design principles (which we'll talk about more over
the next few days). In brief: how can you make the use
of your program pleasant for your user rather than convenient
for the programmer? (Both is great, but when in doubt, make
things nice for the user.)
What to hand in
- On March 1 in class, give me a piece of paper (or two, if you
must) with (1) a brief description of your project from the
user's point of view (i.e. what will the user's interaction with
the program consist of, and what results will the program produce
for the user), (2) diagrams or textual descriptions of your core
class and functional interfaces, (3) a list of any expected data
files, and (4) anything else you consider important for me to know.
I will provide feedback on paper by March 3.
- On March 15 by 5:00PM, submit a folder entitled "final" via
the Courses system. This folder should include all your source
code, any relevant data, and documentation (ideally a readme.txt file)
describing the status of the program (e.g. what works and what doesn't)
as well as how to run it.
Project ideas
Having trouble coming up with something? Here are a few ideas.
Games
- Text adventures.
- 2D arcade like Tetris or solitaire or Donkey Kong or...
- Word games like Boggle, TextTwist, etc.
- ...
Viewers of data (typically data that changes over time and
is available on the network.
- Stock market,.
- Weather.
- News feeds.
- Sports scores.
- Multi-viewed viewers of static data that's rich enough
can be OK too. For example, there are tons of ways to slice
a season's worth (or many season's worth) of baseball statistics.
Utilities
- text editor
- A programmer's calculator
- A graphing calculator
- ...