OOD - Object Oriented Design, Part I

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.
Tic-Tac-Toe
Tic-Tac-Toe is a familiar 2-player game that has a 3 x 3 board.  There are two symbols used on the board,  X  and  O,  that represent the positions of the opponents.  Players alternately place a single symbol on the board until one or the other has a "Win" -- three X's or O's in a row, horizontally, vertically or diagonally; or a "Draw" (aka "a cat's game") exists with neither player having a Win.
From this description we can make the following observations:
T1)  	Tic-Tac-Toe is a game;
T2)  	The game has a 3 x 3 board;
T3)  	Each cell of the board may contain (has a):  empty, X, O;
T4)  	At any time the WinState of the board may be (has a):  Playing, Win-X, Win-O, Draw;
T5)  	There must be a mechanism (method) for asking for moves and recording them (i.e., a routine that "plays the game").
Implementation
Now we may design a class that implements our observations.  Note that the "is a" relationship  a class, and the "has a" relationship  data or function within the class.
Miniature Dungeons & Dragons
We can extend these notions to the game of Miniature Dungeons & Dragons -- a simple 1-player game that has a 4 x 5 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 game ends when the player finds the pot of gold.  The player's initial position is at the top-left of the board, coordinates (1,1).
From this description we can make the following observations:
M1)  	MiniDD is a game;
M2)  	The game has a 4 x 5 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, X (passed thru this cell), ? (current position);
M5)  	There must be mechanisms for asking for the player's 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;
Implementation
Again we may design classes that implements our observations -- remembering that the "is a" relationship  a class, and the "has a" relationship  data or function within the class.