CS 257: Software Design

Final Project, Phase 1

If possible, please work with a partner. Groups of three are also fine. If you would prefer to work alone, that's OK. If you would like help finding a partner, send me an email.

For the final project, you will develop a GUI application using Java and JavaFX. The key areas of attention for this project will be:

Choosing a program

Almost any GUI program can be organized successfully around MVC. However, one of my main goals for this project is to give you a non-trivial experience with MVC. With that in mind (but also remembering the deadline of June 6), I want your program to have a Model that is at least complex enough to warrant at least two different kinds of View.

One way to start thinking about your idea's Model is to ask a couple questions: "What are the main things in my program that could be made into Java classes or interfaces, and then aggregated in my Model? Or alternatively, of what information does the current state of my program consist? The following examples illustrate that way of thinking.

Example: Desktop Utility With Server-Side Database

Consider a program for reading and posting to a simple on-line forum. What things is such a program concerned with? Users, posts, discussion threads, and ratings. There might be other things, but those are probably the heart of the program's model. They all might be stored in a database on the server, but on the client side they will each deserve a class of their own (User, Post, etc.). Then the client-side Model might consist of, say, the current User and a List<DiscussionThread> (which in turn might include a List<Post>).

What Views would this project need to show Model content? A View for a list of discussion threads, a View for a list of posts in a given thread, and perhaps a View for the contents of an individual post.

That's plenty of variety to give you a thorough opportunity to grapple with MVC's ins and outs.

This sort of program has the additional complexity of having both a Java client and a server side to provide access to the database, so make sure you're ready to deal with that. If you are, then some other possibilities include calendars, to-do lists, and similar utility applications.

Example: Arcade-Style Games

Many arcade games have a non-trivial game state. Tetris, for example, has a Model consisting of a list of pieces, a current score, an upcoming piece, a historical list of high scores, etc. Views include the main board, the picture of the upcoming piece, and so on.

An Asteroids Model might have a list of rocks, a spaceship, and a list of bullets, plus high scores, etc.

Example: Simulations

John Conway's Game of Life describes a simple system of rules modeling birth and death of cells in a 2D grid. Conway's rules generate beautiful and fascinating evolution of populations. The Game of Life was one of the earliest examples in the general category of cellular automata.

You might create a program that runs Game of Life simulations, but also collects running statistics on the simulation. For example, one View could show the population of cells, while another could show a graph over time of the population density.

There are lots of other cool things to do with simulations, cellular or otherwise. This predator-prey simulation, for example, allows the user to specify birth rates and death rates of two interacting species, and has both a view of the full current population and a graphical view of population levels.

Similarly, a program that generates Julia sets based on user-entered parameters, or that allows the user to explore the Mandelbrot set, could give you simultaneous views at more than one level of resolution.

Like Newtonian mechanics? You could simulate the gravitational interactions in a 3-body problem with user-specified initial masses, positions, and velocities. Again, one View would show the bodies in motion, while another could graph each body's speed or kinetic energy or the current distances between bodies or something else interesting.

Phase 1: brief project description

By 11:59PM Monday, May 23, submit to Moodle a PDF containing: