This semester you will be working in two person teams to develop a software application program. Each week your team will have one or more tasks to accomplish during the laboratory session, and attendance in the laboratory is mandatory. The laboratory instructor will provide guidance to help keep your project on track. Your team may need to meet for additional time outside of the assigned lab sessions, so be sure you chose a partner with a compatible schedule.
The project this semester is to develop an address book application. The address book should contain contact information about various individuals and groups. Your application should, at minimum, be able to store the name, nickname, address, telephone numbers (home, work, cell) and email addresses for each contact. You might also want to include information such as hobbies, interests, keywords, etc. Users should be able to create new contacts and edit the information for existing contacts.
Your application should allow the user to maintain various contact lists. One list should be the All Contacts list which includes everything. Additionally, there should be contact lists for Friends, Family, and Work. A contact can be on more than one list (maybe you have a friend from work), and if the information for a contact is modified, the changes should be reflected in all the lists which contain the contact.
Users should be able to browse contact lists, or search and sort lists according to various criteria.
Optionally, you may allow the user to create additional contact lists, or delete any of the standard lists (except All Contacts). If you are ambitious, you might let the user define "smart lists" that automatically contain just those contacts that meet some user specified criteria; for example, people whose hobbies include sailing.
Some other possibilities are to allow the user to send emails to contacts from within the address book application (fairly easy), or to IM a contact (difficult).
What other useful features can you think of?
The project description given above is intentionally left incomplete and open ended. Your first task is to decide what features you want to include in your address book application. Make a list of the features you would like to have in your application. You should be specific about exactly what the user will be able to do with the application.
If you are ambitious in defining your feature list, you will not be required to implement every feature you identify. You should prioritize the features and indicate which are essential and which are optional.
The next task for this week is to draw a class diagram of the concept classes in your application domain. The easiest way to identify the important concepts is to carefully consider the features you intend to implement. The concepts that you need to identify depend on your requirements. Some of the important concept classes should be obvious (e.g. AddressBook, Contact, ContactList), although you might name things differently. Are there any other classes you can identify? At this stage, do not include classes to represent user interface components such as windows or buttons.
For each class you have identified, you next need to determine the attributes. Once again, you should base your decisions on the features you intend to implement, and include just those attributes that are needed for your application. For example, it might be true that individuals have hair styles, but are hair styles relevant to the address book application?
For some classes, such as Contact, the attributes are probably obvious from your feature list. In other cases, you will have to think more carefully about the kind of state information that is relevant for your application. For example, if your requirements include the ability to sort ContactLists, each ContactList might need to store its current sort criteria.
At this point, it is not necessary to include type information or methods in your class diagram. This will be added later when you complete a more detailed design.
After you have identified the concept classes and their attributes, you should define the relationships between the various classes on your class diagram. What kind of association exists between Contacts and ContactLists? What is the relationship between ordinary ContactLists and SmartLists? What other associations can you identify? Add the proper notation to your class diagram to document these relationships.
The final task for this week is to design the user interface from the user's perspective. What kinds of windows, menus, buttons, etc. will the user interact with to use the various program features you plan to implement? Using pencil and paper, draw sketches of your user interface. You should probably consider several alternatives before reaching a final decision. Think this through carefully since a mistake at this stage may become very costly later on.
As you think through the details of the user interface, you may discover that your feature list has errors or omissions. Be sure to make any neccesary corrections.