The goal of this assignment is to gain experience planning and sketching the design for a set of classes supporting a certain application.
Just as is typical in the real world, the application requirements are a bit vague and you should anticipate requirements will change during the life of your software.
Problem
Your company is working on the next generation of text entry interfaces for mobile devices (e.g. phones and tablet computers).
Right now, you are focused on a text entry interface based around tapping buttons on an onscreen touchscreen keyboard.
You are tasked with designing the classes necessary to enable you to quickly develop and test different possible keyboards.
This includes not only how the keyboard looks, but also how the underlying algorithms work that convert the user's taps into text output.
You are concerned only with the classes handling the keyboard-related parts of the application.
Other teams will use your API to build other parts of the software such as the correction algorithms, visual display, etc.
Details:
Keys on the keyboard are rectangular regions on the screen.
Keys may represent an actual character of text, or may be some other type of control key (e.g. shift).
The user may have the device oriented in any of four directions. The user may change orientation while using the application.
A "tap" on the device is represented by a sequence of touch events from finger down to finger up. Each event consists of the (x, y) location of the event and the timestamp of the event.
Other teams need to know what your keyboard thinks about a given tap:
Given a tap, determine the nearest key to the tap.
Given a tap, determine all adjacent keys to the tap.
Given a tap, determine a probability distribution over all keys on the keyboard.
Other teams need to know details relevant for displaying visual feedback about a tap (e.g. displaying a glowing rectangle with character label that fades away slowly after a tap).
Sketch
Create a sketch of the classes needed to support the application.
No particular sketch conventions are required for this first draft- communicate your design visually however you think best.
But you will have to explain your sketch to the rest of the class.
It can be hand written (keep it legible!) and probably should fit on a single piece of paper.
Things you probably want to represent in your sketch:
Name of each class.
What does each class know (i.e. instance variables)?
What can each class do (i.e. public methods)?
What classes are concrete implementation versus interfaces?
Inheritance structure (if any).
Submission.
We will be discussing everyone's sketch during the next class.
Please come prepared with a copy of your sketch for everyone (you can use the copier in the department office).
Late days cannot be applied to this assignment.