Assignment 6

This and another future assignment comprise a new project, in which you will work with new types of interaction or new technologies of your choosing. We will discuss several of these in class.

The project is designed to be done in teams of two people, but you are also welcome to work individually or in a team of three, depending on the complexity and difficulty of your project. So the first step is to decide on your partner or team. Our Piazza site has a feature that can help you find a partner if you like.

For this project, you can choose the topic, the technology, and the language. For language, you can use Java, Javascript, or three.js. For mobile, you can use Javascript in a browser. You are also welcome to use Swift or Objective C for IOS or Java for Android or Python, but you may need to learn about them on your own.

Some possible project ideas are:

You should prepare:

Submit your written descriptions of the above, sketches or screenshots as appropriate, and the code or other material from your feasibility test. (If your sketch is on paper, please snap a picture and include that in your submission as a PDF. You can also scan your paper on the copier in the CS department office.)

Also give a very brief presentation of your project plans in class, for the group to discuss, critique, and provide feedback for completing the project.

Team Submission Procedure

One team member should provide the main submission for the team. Indicate both partners' full names and CS login names clearly in the readme file, along with a short statement saying how you divided up the work. Then, the other team member should provide a separate placeholder submission consisting only of a readme file. (Having this in the system gives us a place to enter grades in provide for both team members.)

Program Design and Practices

(The rest of this still applies from previous assignments -- to the extent that it makes sense in your chosen language or system)

Your program design should exploit the features of object-oriented programming (encapsulation of code and data, support for abstract data types, polymorphism/overloading, inheritance). In particular, object-oriented programming provides us a good way to handle the various data needed in callback routines. You should use objects to encapsulate each interactive widget with the routines and data you need to use it.

You should provide an object for each interactive widget or small group of widgets you create. That object should hold anything you need to remember about the widget from one callback to another, all the data pertinent only to the command for that widget or that you need to operate this control, (including, in most cases, a pointer to the map or other outside object to perform the actual action the user requested), and the widget's own listener callback routines.

If you have several widgets that share some behavior or properties, you should organize your objects into an appropriate inheritance hierarchy.

You will have other data that must be accessed by several widgets, particularly shared information about the state of the program or global information about the state of the user interface. Provide additional classes and objects for holding this kind of information.

Remember to trigger your drawing to repaint itself explicitly whenever one of your commands causes a change that should be reflected on the screen. And remember that the way to change the screen is first to change the data stored your classes and then to trigger the repaint.

You should follow these general Java programming practices:

And, finally, on your Java programs, for uniformity, please name your Java class that has your main program in it Main, in file