CS 204: Software Design
Due 5:00PM Monday, 22 November 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 November 22, and interesting enough for you that you might
want to keep working on it after the term.
Your program should have the following properties:
- A GUI that serves beginners very well (easy to learn) and
intermediates reasonably well (not a pain to use once you get started).
- Internal structure that implements at least one design pattern
among those we have studied (or others you find in the textbook).
- 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 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?
You may use either Java or Python for this project.
What to hand in
On Friday, November 12 in class, give me a short project plan
(no more than 3 or 4 pages), including:
- 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)
- UML diagrams or textual descriptions of your core
classes and functional interfaces
- a brief explanation of the design pattern(s) your program
will make use of
- a list of any expected data files or network data sources
- anything else you consider important for me to know
about your project.
I will provide feedback on by November 15.
- By 5:00PM November 22, 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 Minesweeper or...
- Word games like Boggle, TextTwist, etc.
- ...
Viewers of data (typically data that changes over time and
is available on the network.
- Stock market.
- 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
or data from the US census.
Utilities
- text editor
- A programmer's calculator
- A graphing calculator
- ...