在 UML 類圖中如何表示 C++ 派生類構造函數調用基類構造函數並初始化基類成員的情況?例如:
Teacher(string name, int age, string department, string teacherNumber)
: Person(name, age) // 基類初始化列表
{
// 派生類成員初始化
}
在類圖的操作區塊中,構造函數以類名命名,參數列表包含所有參數,基類初始化通常不直接在簽名中顯示。標準寫法:
+ Teacher(name: String, age: Integer, department: String, teacherNumber: String)
若需表達基類初始化邏輯,可附加註記:
note right of Teacher::Teacher
呼叫 Person(name, age) 初始化基類成員
初始化 department, teacherNumber
end note
更適合用循序圖展示物件建構時序:
participant "Client" as C
participant "Teacher" as T
participant "Person" as P
C -> T: new Teacher("張三", 30, "CS", "T001")
activate T
T -> P: Person("張三", 30)
activate P
P --> T: 基類初始化完成
deactivate P
T -> T: 初始化 department, teacherNumber
T --> C: 物件建構完成
deactivate T
+Teacher(name : string ,age : int ,department : string ,teacherNumber : string ):Person(name,age)
優點:嘗試表達基類初始化。
缺點:非標準 UML 語法;參數型別寫法不統一(string vs String);冒號後接基類調用易混淆為回傳型別。
+ Teacher(name: String, age: Integer, department: String, teacherNumber: String)
配合類圖中的泛化關係(實線空心三角箭頭指向 Person),閱讀者即可理解繼承結構。基類初始化屬於實作細節,置於代碼或循序圖更合適。