View this PageEdit this Page (locked)Attachments to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide
Hotspots: Admin Pages | Turn-in Site |
Current Links: Cases Final Project Summer 2007

Donated By Intel Milestone 2

Goal:

Improve the work done for milestone 1 such that the system can handle inconsistencies in the relationships, and automatically mirrors relationships specified by the user (If a person is set as a child of another person, then the parent relationship going the other way must also be made). The system also had to allow the user to check the tree for inconsistant relationship links, and querying the tree for all people matching various fields.

Purpose:

To continue developing knowledge of smalltalk, while making the Genealogy System easier to use.

Design:

We started with the first milestone Paul created, because the code was pretty well abstracted, and there was already a morphic interface to use for the later milestones (the GUI was not needed for this individual milestone however). All we had to add to our design were objects and methods to handle performing queries and relationship checking. Additional code had to be added throughout all methods that created relationship links in order to properly mirror relationship data. At this early point, our UML looked like this:

External Image

Implementation:

Time spent on this milestone was not excessive as it only involved expanding on exiting code. We added a class variable to the Person class, which provided an OrderedCollection of all people created for the Genealogy Map. The Query object was then able to scan this class variable for information, rather than having to rely completely on recursive functions through the tree. The mirroring code was not too terrible, but it was easy to miss specific situations. We didn't hammer out all possibilities until milestone 4, after losing a few points for a couple situations the mirroring code was not able to handle properly.

After writing our code for this milestone, the user could do things like this:
aPerson check. - This would recursively go through the person's family
 tree, and report all inconsistencies and errors.

Query givenName: 'Joe'. - This would find every person whose given 
 name is 'Joe'.  The Query object has different methods for each type
 of search, and a general search for querying everything.

The output for a query at this point was just a list (The GUI was not yet a part of the project).
The output for a check would look like this:

External Image

Conclusion:

After hammering out the design, this milestone did not take too long. The Check and Query functionality worked quite well, and the mirroring ability of our milestone was only lacking in a couple areas that were fixed while working on later milestones.

For more information about what this milestone involved, take a look at the Fall2002 M2 page.

Here is the source for just this milestone, if you would rather exclude the later milestone code in the final .st on our main case page.

M2.st

Link to this Page