本篇完成 CGPoint、CGBox、CGText 三個具體類的 UML 設計與 Java 實現,並串聯主程式 CDrawApp。
UML 關鍵點:繼承抽象類 CGObject,無新增屬性,僅實現抽象方法 display()、describe() 及建構子。
// Java 實現要點
public class CGPoint extends CGObject {
public CGPoint(Point loc, char ch) {
super(loc, ch); // 呼叫父類建構子(雖父類為 abstract,但可有建構子供子類調用)
}
@Override public void display(PrintCGrid grid) { /* 在網格繪製單字符 */ }
@Override public void describe() { System.out.println("Point at " + location); }
}
新增屬性:width、height(矩形寬高)。
public class CGBox extends CGObject {
private int width, height;
public CGBox(Point loc, char ch, int w, int h) {
super(loc, ch);
this.width = w; this.height = h;
}
@Override public void display(PrintCGrid grid) {
// 雙重迴圈在網格繪製矩形邊框/填充
}
@Override public void describe() { /* 輸出矩形資訊 */ }
}
新增屬性:String text。
public class CGText extends CGObject {
private String text;
public CGText(Point loc, char ch, String text) {
super(loc, ch); // ch 可作為游標符號
this.text = text;
}
@Override public void display(PrintCGrid grid) {
// 逐字符在網格水平繪製
}
@Override public void describe() { /* 輸出文字內容 */ }
}

CGObject(抽象,斜體類名)→ 三子類 CGPoint、CGBox、CGText(實線空心三角箭頭)。CGObject 含 Point location 關聯(虛線箭頭,多重性 1)。PrintCGrid 擁有 CGObject[] displayList(聚合關係,菱形空心,多重性 0..*)。CDrawApp 為啟動類,包含 main(),內部定義 CDraw 類封裝應用邏輯(菜單迴圈、用戶輸入處理、網格操作)。
UML 表示:外部類 CDrawApp 與內部類 CDraw 為「關聯」關係,外部類標記「十字交叉圓圈」,箭頭指向內部類。
public class CDrawApp {
public static void main(String[] args) {
new CDraw().run(); // 建立內部類實例並啟動
}
// 內部類(非 static,隱含外部類引用)
class CDraw {
private BorderedPrintCGrid grid; // 具體網格實現
public void run() { /* 主迴圈:顯示菜單、讀取輸入、執行對應操作 */ }
// ... 具體操作方法:addPoint(), addBox(), addText(), showGrid() ...
}
}

Point、CGrid、CGObject、PrintCGrid、BorderedPrintCGrid、CGPoint、CGBox、CGText、CDrawApp(含內部類))。java CDrawApp。本實戰展示: