首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

用 UML 描述 Java 類別

     編輯:Java 相關知識

前言

從 Java 程式設計師角度闡述 UML 與物件建模,深入淺出實用介紹。雖從歷史與基本理念探討 UML 很吸引人,但直接從 Java 程式碼開始,看 UML 如何描述 Java 類別,敘述中穿插歷史與理念知識。

UML 類別圖

Java 中用程式碼宣告兩個 public 類別,各置一檔,檔名為類別名 + .java:

public class Person{}
public class Organization{}

UML (Unified Modeling Language,統一建模語言) 是圖形化建模語言,用矩形表示類別,矩形內寫類別名,一個類別圖可放多個類別。用矩形表示類別是 UML 中 Unified 的作用。UML 第一版出現前,各專家有各自符號 (點、圓、圓角矩形),易混淆。Rational 三專家 (Grady Booch、James Raumbaugh、Ivar Jacobson) 達成共識「統一」符號,UML 誕生,符號之爭結束。圖 1 為上述兩類別 UML 類別圖。

若描述一系列類別內部結構及相互關係,UML 類別圖很有用。許多書籍用類別圖描述類別關係。

屬性與方法描述

空類別無實際意義。為 Person 類別加入實例變數與簡單方法 (程式碼簡化無註解)。圖 2 顯示 Person 類別 UML 圖,UML 用 "+" 和 "-" 分別表示 public 和 private 修飾符,僅顯示操作與屬性型別等特徵資訊,操作結果在冒號後宣告。

UML 類別圖不包含方法具體實現,檢視屬性與方法等基本資訊比直接看 Java 原始碼更方便。建立 UML 圖時常忽略或隱藏細節,以掌握類別整體結構。常只顯示屬性與操作名稱,簡單存取器方法 (getXXX/setXXX) 常不顯示。圖 3 為簡化後結果。

圖 3 清楚顯示 Person 主要屬性與方法。但單個類別 UML 圖用處不大。包含多個類別且描述關係的 UML 圖才具實用意義。UML 用連線表示類別關係,不同線型表不同關係,類別圖最常見為關聯關係。

關聯關係

前面 Person 屬性皆為基本型別。現考慮增加 Organization 實例引用:

public class Person {...
 private Organization employer;
 ...}

引用名 employer,意指 Organization 代表 Person 的雇主。圖 4 顯示 UML 描述此關係。

類別間連線表示 Person 對 Organization 有依賴關係。實線 (非虛線) 表示此依賴為關聯。關聯可顯示角色、多重性、關聯方向。圖 4 關聯顯示 Organization 角色為雇主,"0..1" 表示每個 Person 最多關聯一個 Organization (也可能 0 個,即引用可為 null)。開叉箭頭表示 Person 擁有 Organization 引用,而非反向。

多重性

多重性回答:一個關係中,每個類別各有多少物件參與?常見多重性如圖 5。

前面已見 0..1 多重性實例。"1" 表示引用不可為 null (通常在建構子初始化、set 方法禁止設 null)。"1..*" 和 "0..*" 較複雜,Java 可用集合類 (如 Vector) 保存多個引用實現。"1..*" 需確保 Vector 至少一項。某些關係多重性為精確範圍或數字 (如小孩最多兩生物學父母,多重性 "0..2"),Java 程式需帶約束確保實例數量。

UML 關聯加上多重性、角色、方向能描述大量資訊,遠比一堆 Java 原始碼簡潔直觀。雖未說明具體實現方式,但能充分說明關係意義與作用。圖 6 標註多重性與角色名稱的雇傭關係,表示一 Person 可為多 Organization 工作,一 Organization 可雇傭多 Person (雙向關聯)。

聚合與合成

關聯只是 UML 關係之一。其他兩種為聚合與合成,實為關聯不同變種。聚合表示一類別物件代表另一類別物件的一部分,稱「整體-部分」關係。用實線空心菱形箭頭表示,箭頭從 Part 指向 Whole (圖 7)。

Java 中聚合關係是什麼?看問誰。聚合有爭議,表達生命週期依賴關係。有人慣認聚合意味 Whole 負責建立與拆除 Part 物件;也有人定義較寬鬆。最好在合作者間達成共識避免混淆。合成為較強聚合,Part 物件任何時候只能從屬一個 Whole 物件,需 Java 程式碼確保唯一從屬關係。

類別圖細節層次

對於 Java 類別裡的物件引用,何時當作關聯、何時當作屬性?答案:在哪個層次交流資訊,UML 圖就該具體到哪個層次。有時即使簡單物件也最好畫出類別圖,將其他類別對其引用描述為關聯;有時需將物件引用表示為屬性,甚至從類別圖省略該引用,以突顯更重要的類別與關係。大多數 UML 工具提供隱藏細節機制。

獲得 UML 圖兩途徑:手工設計 (可由工具生成 Java 骨架程式碼)、工具分析 Java 原始碼 (甚至位元碼) 產生 UML 圖。優秀工具能繪圖時同步生成 Java 程式碼,編輯程式碼時同步更新 UML 圖 (如 TogetherSoft Together ControlCentre,本文圖即用此工具繪製,有免費版 Together Community Edition 可試用)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved