在該類中,有2個成員變數x和y,類圖中,“-”表示變數或方法為private,“+”表示public,“#”則表示protected。該類定義了三個不同的建構函式,這是重載(overload)的例子。
接著該類設計了7個存取方法。getX()和getY()方法分別返回一點的x和y座標。SetX()和setY()方法根據參數xValue和yValue的值設定這些座標的值。兩個add()方法通過被訪問點的座標加上一個值來建立一個新的Point對象。New運算子建立類的新執行個體。它後面緊跟著初始化新產生執行個體的建構函式。toString()
方法返回類String的一個對象,該對象用一個有序對來描述一個點。
依據設計的類圖,其Java實現代碼為:
// Point.java
public class Point {
// Variable declarations
private int x;
private int y;
//Method declarations
public Point() {
x = 0;
y = 0;
}
public Point(int xValue, int yValue) {
x = xValue;
y = yValue;
}
public Point(Point p) {
x = p.getX();
y = p.getY();
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public void setX(int xValue) {
x = xValue;
}
public void setY(int yValue) {
y = yValue;
}
public Point add(Point p) {
return new Point(x+p.getX(), y+getY());
}
public Point add(int i,int j) {
return new Point(x+i,y+j);
}
public String toString() {
return new String("("+String.valueOf(x)+","+String.valueOf(y)+")");
}
}
二、CGrid類
CGrid類用於定義指定大小的字元網格。它提供基本方法集,通過加入到這些方法中的其它類來得到擴充。該類的類圖為:
CGrid類聲明3個變數:width、depth和grid[][]。width和depth 變數用於指定grid[][]的水平和垂直尺寸,grid[][]是儲存網格字元的字元數組的數組。
CGrid中的變數聲明為protected,這就規定了它們只能在聲明它們的包中和CGrid的任何子類中訪問。
CGrid類只有一個單一建構函式,它設定width和depth的值,分配grid[][]數組,然後調用blankGrid()以空格為grid[][]賦值。
CGrid有4種存取方法。blankGrid()方法只是簡單地用空白字元來調用
fillGrid()。fillGrid()方法把grid[][]的每個元素都設定為ch參數。GetCharFrom()方法用於找出網格中給定位置的字元。SetCharAt()用於把網格中一點設定成特定字元。
在GetCharFrom()和SetCharAt()方法中使用Point類來定義它們的參數,這是類與類之間關聯的例子,我們稍候討論。
根據以上類圖,CGrid類的原代碼為:
// CGrid.java
public class CGrid {
// Variable declarations
protected int width;
protected int depth;
protected char grid[][];
// Method declarations
public CGrid(int widthValue,int depthValue) {
width = widthValue;
depth = depthValue;
grid = new char[depth][width];
blankGrid();
}
public void blankGrid() {
fillGrid(' ');
}
public void fillGrid(char ch) {
for(int j=0; j<depth; ++j)
for(int i=0; i>width; ++i)
grid[j][i]= ch;
}
public void setCharAt(char ch,Point p){
grid[p.getY()][p.getX()] = ch;
}
public char getCharFrom(Point p) {
return grid[p.getY()][p.getX()];
}
}
三、CGObject類
CGObject類是抽象類別的例子,它通過abstract方法來限制其子類的行為。Abstract方法必須由非abstract子類實現。其類圖設計如下:
CGObject類用於定義在網格上顯示的對象的一般行為。它有兩個變數:location和drawCharacter。Location變數的類型是Point,用於在網格上指定一個對象所在的點。DrawCharacter變數用於畫對象的字元。
CGObject有三個方法,而沒有建構函式。因為abstract類沒有完整定義,所以它沒有建構函式,也沒有對象執行個體。
第一個方法addToGrid()不是abstract類型的。它以類PrintCGrid的對象作為參數,調用PrintCGrid類的addCGObject()方法,把this對象加到網格中。this關鍵字指當前對象。用addToGrid()方法調用CGObject類的子類的對象,這些對象加到類PrintCGrid的對象中。
CGObject的其它兩個方法都用abstract關鍵字聲明。這意味著,這兩個方法在能夠由CGObject類的非abstract子類使用前必須被覆蓋。覆蓋方法必須擁有與anstract方法相同的名字、參數和傳回值。Display()方法用於再網格上顯示類PrintCGrid的一個對象。Describe()方法用於顯示網格對象的描述。
CGObject類的代碼為:
// CGObject.java
public abstract class CGObject {
// Variable declarations
public Point location;
public char drawCharacter;
// Method declarations
public void addToGrid(PrintCGrid grid) {
grid.addCGObject(this);
}
public abstract void display(PrintCGrid grid);
public abstract void describe();
}
四、PrintCGrid類
PrintCGrid類是CGrid類的子類,它定義了允許把對象加到網格中的附加變數和方法。它也提供了顯示網格的方法。PrintCGrid類的類圖如所示: