Assignment 2 - Object Oriented Design
The second assignment is about object oriented design. There is no programming in the assignment and you will hand in at least one class diagram, one sequence diagram and one object diagram. These diagrams describe your intended design. This assignment links into assignment 3 where you will be presented with a design to the same problem, including working java-code and automatic test cases. You can view the starting point of the third assignment as a suggested solution to this assignment. Therefore, the details of the third assignment will not be released until after the deadline for the second assignment.
The final step to pass assignment 2 is to write a report. This report should reflect on the differences between your intended design, and the design in the suggested solution. More about this later.
Hint: As you are to write a reflective report to pass this assignment it is a good idea to make some notes about your own thinking during your work. Simply note what you are doing and WHY, it can greatly help when you reflect on your design at a later stage.
While the goal is to create a design on paper as an exercise note that this is quite hard and the end goal is not that it should be perfect, rather that you should train on thinking in terms of classes and objects and how they collaborate. There is always changes to the design when the design meets the code (reality) but you will be better prepared for these changes if you have thought about the design a bit before diving into the code. As mentioned part of this assignment is also to reflect on your own design compared to a -working- design.
You are encouraged to commit and push the changes you make regularly to your master branch. When you are done with the assignment you create a merge request to the release branch. A teacher/tutor will take a look and approve the merge request, or point out missing items. When your merge request has been approved you have passed the first step of the assignment. You now need to do Assignment 3 and after that you create your reflection report.
The Monopoly Game
You are to produce a design for a simple monopoly game. If you are not familiar with the game of monopoly can find plenty of overviews online and you will probably get a basic understanding of the game. Remember that we will only use a subset of the game in the assignment, and part of the problem when designing can actually be to keep a limited scope and not do too much (i.e. make an overly complicated design for some imagined future case). Try to limit your design to the task as described below and do not think about future features that could be nice to have.
The board will consist of a number of tiles. Tiles can be of different types as described below, and different rules apply when a player stops on or passes over a tile. The tiles are arranged in a circular way. That is, players move from one tile to the next forward (or backward), and when reaching the last tile they start over at the first tile.
The tile types are:
• Start tile: There is only one start tile. This is the tile where each player starts. When passing over the start tile a player should get 200 additional credits. Not that this does not apply the first time, i.e at the game start.
• Free tile: Nothing happens on a free tile.
• Property Tile: Property tiles have a street name and a cost. The following rules apply to when a player stops at a property tile. If it is not owned by a player, it can be bought by the player at the start of the next round (i.e. you buy properties before moving) if the player has enough funds. If another player owns the property you pay rent to that player with the amount of 300 credits.
A player moves over the board by rolling two six-sided dice. The player moves the number of tiles equal to the sum of the dice values. If the dice values show the same values, the player will first move the number of steps shown, and then roll both dice again and move. This continues as long as the player dice show the same values. Note that if the player ends up on a free property tile the player can buy this property before rolling the dice again. If the player ends up on another players property rent must be payed before moving on.
Starting the Game
Each player enters their names and then gets 1000 credits. The players start at the Start Tile. The game begins when the last player has been added and then no further players can join.
Playing the Game
Starting with the first player, the player can either buy a property (if currently stopped on a free property tile) and finally roll the dice and move. Movement is always the last thing a player does and it is then the next players turn.
Ending the Game
The game ends after 10 rounds or when one player has become bankrupt (i.e. has zero or less credits). The winner of the game is the player with the most credits.
The User Interface
The user interface should be a simple console interface. The game board should be visualized with the tiles and where the players are positioned. All game actions should be reported (i.e. how much a player moves, if credits are added or removed from a player, if a property is bought or if the player pays rent, etc.)
The user interface should be encapsulated in it's own class and any input or output should be handled in this class. I.e. no system.out.print or system.in.read in any other part of the game.
In a future version it is expected that there will be a computer player. The design should be prepared for this upcoming feature.
Create a class diagram that shows the structure of the classes with the appropriate relations. The goal is to end up at a design level class diagram, but it is a good idea to create an analysis level diagram first. Feel free to add this analysis level diagram to your submission. Classes should of course be named, have relevant attributes (fields) and operations (methods). You should use relations between the classes such as generalization/specialization (inheritance), realziation, association or dependency, if appropriate and needed.
Object and Sequence diagram
To test your design you can try to see how it would work (i.e. how should the objects communicate to perform the task at hand) in particular situation. We call such a situation a scenario. Below is one scenario and you should create one object diagram and one sequence diagram for it using your classes.
The object diagram should show what objects and their links before the steps of the scenario is executed (the initial state). I.e. what does the system look like at this particular moment in time.
The sequence diagram show how the objects are used to perform the steps of the scenario, typically by using the objects from the object diagram. However new objects can also be introduced as the sequence diagram shows the dynamic execution of the system and objects can for example be created.
Considering the user interface it is not a central part of the current scenario. If you think there are messages that need to be sent to/from the user interface, an object of this type is likely needed. However, this is very much up to how you have designed your game.
Note that to be able to send a message between two objects there need to be some relation between them in the class diagram (association or dependency). If you find that your structure (class diagram) is lacking when modeling the scenarios, you should of course try to improve the structure. Feel free to add more scenarios that cover other situations.
Player moves scenario
The player named -Boris- is currently at a property with street name -Downing Street-. Downing Steet is the tile before the Start tile (i.e. it is the last tile on the board). After the start tile comes another property tile (-Seven Sisters Road-), after that we have another property tile (-Abbey Road-). The dice currently have the face value 6 and 2.
1. It is now Boris turn and he is offered the dice.
2. Boris rolls the dice and gets the values 1 and 2.
3. Boris moves from Downing Street, to the Start tile.
4. Boris moves from the start tile to Seven Sisters Road. As Boris has moved over the start tile, he receives 200 credits.
5. Boris moves from Seven Sisters Road to to -Abbey Road-. Boris stops at this tile. As the tile is free Boris is offered to buy this property at the start of his next round.
Handing In the Model
You should create one class diagram, one object diagram and one sequence diagram as per the instructions above. The formats for these should be common image formats like png or jpeg. You should also create a markdown formatted file called intended.md, in this file you should present your images and possibly notes that is needed to be able to interpret them correctly. You should follow standard UML notation in the diagrams.
Assignment 2 Report
The final step of the assignment is to reflect on your intended design and compare it with the working design presented on the image.
You work on the report in the master branch and issue a merge request when done to the release branch. Your report should be structured as a markdown formatted file called report.md Feel free to use the intended design images if needed. You should reflect on the following:
• Are there any classes missing in your design, why/why not?
• Did you have any extra classes in your design, why/why not?
• Are there differences in naming the classes?
• Are there differences in the relations between the classes?
• Did you connect the objects using dependency/association or did you use idconnections?
• Did you manage to divide the complexity/behaviour into different classes or do you have one central class having most of the code?
• What differences are there for the object diagram?
• What differences are there for the sequence diagram?
• Do you think you made a good job in your initial design, why/why not?
• What is the most important thing you learned by designing first?
The report should be available in report.md. The text should be argumentative/reasoning/flowing, i.e it is more than just answering the questions above. Feel free to use references to litterature to support your arguments.