OOD - Object Oriented Design, Part II

In OOD we focus on modeling the objects in a problem, the behavior of these objects as they interact, and the data that they must contain.  In Java/C++ we implement behavior as methods (member functions) and data as public and private variables.
Two of the most important relationships that are modeled using OOD are "is a" and "has a."  We have been representing the "has a" relationship using class data and methods (functions) -- public or private.  And, we have represented the "is a" relationship using the idea that the object can be represented by a class.  But, more generally speaking, we can say that one object "is an" example (a specialization) of another.  This leads directly to the idea of inheritance.  For instance, my car is a Ford; a Ford is a car; a car is a land transport vehicle; and a land transport vehicle is a vehicle.  In each case, we have some additional information (data and behavior) which specializes the thing at head from the thing from which it inherits.  Running in the other direction, it's clear that not all vehicles are "land transport vehicles" -- consider a boat; not all land transport vehicles are cars -- consider a bicycle; not all cars are Fords (obviously); and not all Fords belong to me (even more obviously).  So, at each step of the way we gain additional information about the thing (object) at hand -- and inherit both data and behavior from the "base class" from which the object is derived (and which is implemented as a "derived class.")
Miniature Dungeons & Dragons, Part II
We can apply these notions to an extended game of Miniature Dungeons & Dragons -- a simple 2-player game that is played on a 4 x 6 board.  The game starts with a pot of gold randomly positioned on the board.  The gold is hidden from the player.  The player's job is to find the gold by moving across the board, one cell at a time.  The player may move in any of the 4 compass directions:  N, S, E, W.  The computer plays the part of the opponent.  The rules for the computer are the same as those for the human, except that the computer moves randomly in any of the 4 compass directions.  The game ends when either player finds the pot of gold.  The human's initial position is at the top-left of the board, coordinates (1,1).  The computer's initial position is at the bottom-right of the board, coordinates (4,6).
From this description we can make the following observations:
M1)  	MiniDD is a game;
M2)  	The game has a 4 x 6 board;
M3)  	The board has a (hidden) pot of gold randomly placed on it;
M4)  	Each cell of the board may contain (has a):  empty, or a symbol representing one or the other player's current position, or the fact that one or the other player has passed through this cell;
M5)  	There must be mechanisms for asking for getting a player's next move, recording it, asking if the gold has been found, validating a proposed move, etc., (i.e., a way to "play the game");
M6)  	There must be a mechanism for displaying the current state of the game.
G1)  	Gold is a pot of gold;
G2)  	A pot of gold has 1 pair of coordinates;
G3)  	A pot of gold has a way to tell you if it is located at a particular coordinate pair.
P1)  	A Player has a current position;
P2)  	A Player has a "passed thru this cell" symbol and a "current position" symbol.
H1)  	A Human is a Player;
H2)  	A human has a "passed thru this cell" symbol and a "current position" symbol;
H3)  	A human has a mechanism for asking for the human player's move, recording it
C1)  	A Computer is a Player;
C2)  	A computer has a "passed thru this cell" symbol and a "current position" symbol;
C3)  	A computer has a mechanism for moving randomly over the board.