1. Apply reverse engineering to extract models from code.
2. Correctly identify relationships between code elements and use a class diagram to express them.
3. Use a sequence diagram to capture the control flow of an execution scenario.
The file provided with this document contains 10 Java classes that implement a simulation of a simplified Monopoly game.
For part 1, you are required to produce a class diagram including all classes EXCEPT FOR Main and BoardLoader. The class diagram must contain all relationships between classes with the correct UML notation, including the type of arrowhead, line and multiplicity (when required). Getters and setters are not required to appear in the diagram. Do not include Java API classes (such as String and Random).
1. Most references in the code map to a relationship in UML, including variable instan- tiation, field declaration, parameter declaration and inheritance.
2. Remember that a class diagram is supposed to present a static view of the class struc- ture. It should be evident for anyone studying the diagram which class depends on which and in which direction the dependency goes.
3. The relationships found in the example application are association, generalization (in- heritance), dependency and composition. Make sure you understand what these rela- tionships mean before starting to build the diagram.
4. The package structure might give you a hint about the kind of relationship between some classes. Remember that in a composition, the composite object is responsible for creating its parts, but not every object instantiation inside a class implies a composition exists.
5. Use common sense when naming the relationships. If there is no explicit information in the code to name a relationship, you may use domain terminology, or keep stereotypical names, such as, uses, has a, etc.
6. Some assertions in the code may give you an idea of the multiplicity of certain rela- tionships.
For part 2, construct a sequence diagram that starts with the message (method call) simulate from the Main class to the MonopolyGame class. ONLY include objects of the following four classes in your diagram: MonopolyGame, Board, Dice and Square. Represent only a single iteration for any loops you encounter. Do not include calls to getters or Java API methods (such as System.out.println or methods called on a List object). Ignore conditional statements. It should be clear from your diagram what the sequence of events is and which messages are being passed between objects.