(2)類別圖型 - 類別節點


「類別圖型、Class Diagrams」使用圖型的表示法來顯示軟體系統中類別的內容,還有類別和類別之間的關聯,它呈現的是一個靜態的類別架構。

「類別節點、Class Node」是用來表示一個Java類別的基本單位,它可以用來表示Java程式語言中三種基本單位:類別(class)、抽象類別(abstract class)和介面(interface)。

樣式

使用類別節點表示類別的時候,可以根據你想要表現的詳細程度,以不同的樣式來呈現這個類別,以下列的類別節點來說,它顯示類別節點的三個區格:

一個詳細表現的類別節點分成上、中、下三個區格(compartments),分別代表「類別名稱」、「屬性宣告」和「方法宣告」,有了這個詳細的類別節點以候,就可以宣告出下列的類別:

public class Calculator {
    private static final char NO_OP = '\0';
    private static final char PLUS = '+';
    private static final char SUBTRACT = '-';
    private static final char MULTIPLY = '*';
    private static final char DIVIDE = '/';
    private float  number1 = 0.0F;
    private char   operator = NO_OP;

    public String opEquals(String number) {…}
    public String opAdd(String number) {…}
    public String opSubtract(String number) {…}
    public String opMultiply(String number) {…}
    public String opDivide(String number) {…}
    private float performOperation(float number2) {…}
    protected static float parseNumber(String number) {…}
}

但是如果你要顯示比較多的類別,又不想讓整個類別圖型太複雜時,可以省略「屬性宣告」和「方法宣告」區格,這樣的表示方式並不代表這個類別沒有屬性和方法的宣告:

上列的圖型呈現了三個類別的宣告:

public class Calculator {…}

public class CalculatorScreen extends SwingScreen {…}

public class CalculatorGUI {…}

類別名稱區格除了類別名稱外,還可以填入附加的資訊,用來表示類別的特性或是額外的說明。例如抽象類別:

上列用來表示抽象類別的類別節點是目前比較建議的作法,舊有的方式是將類別名稱使用「斜體字」來表示抽象類別,不過因為斜體字與一般字體比較不容易分辨,建議使用上一種作法:

有時候可能會希望在類別節點上顯示一些額外的資訊,例如作者或原始檔名,你可以使用下列的方式來表示:

以上列圖中的訊息來說,真正對程式設計師有用的並不多,除了最後一個「public」,與表示抽象類別時一樣,你如果省略值的指定,表示值為預設的「true」,所以「public=true」告訴你這個類別的存取範圍要宣告為「public」外,其它的部份大概也只能放到註解裡而已。

如果要表示某一個類別節點是一個介面的話,就會使用到「Stereotypes」:

UML制定了許多「Stereotypes」,它指的是在「<<」和「>>」裡填入特定的標示,來表示特殊的意義。想要單純的以圖型和線條來呈現一個軟體系統是不夠的,所以就產生了「Stereotypes」,包含「物件限制語言、Object Constraint Language」,一般會簡稱為「OCL」,也是另外一種用來加強圖型資訊的規格。

上列用來表示介面的「\<\>」是Stereotypes的一種。另外也可以使用Stereotypes來表示某個類別特殊的角色,下列的圖型是一般常見的「MVC Design Pattern」,是一種關於使用者操作介面的設計模式:

不論是類別、抽象類別或是介面,都可以省略「屬性宣告」和「方法宣告」區格,讓你把軟體系統中比較多的類別節點顯示出來,更完整的呈現出軟體系統架構。下列的圖形是一個模擬計算機的類別架構,不過都省略了「屬性宣告」和「方法宣告」區格:

在各種樣式當中,「介面」有一種比較特殊的表示方式,這是為了讓比較大型的類別圖型,可以增加可讀性的一種作法:

屬性區格

在屬性區格中可以完整的告訴你關於屬性宣告的資訊,在區格裡使用下列的語法來宣告屬性:

  • 存取範圍:
  • 屬性名稱:使用Java程式語言中合法的識別字。
  • 數量和順序性:

    • 數字:確定的數量
    • *:零到多個
    • 0..*:零到多個
    • 0..1:零到一個
    • 1..*:一到多個
    • n..m:最少n個,最多m個

      當屬性的數量是一個以上的時候,你可以使用順序性的宣告來表示這個屬性的值是否需要排序,使用下列兩個關鍵字:

    • Unordered:不需要排序

    • Ordered:需要排序
  • 型態:屬性的資料型態,使用八種基本資料型態或類別名稱。
  • 初始值:可選擇性的宣告,為屬性宣告一個合法的初始值。

以下列的類別節點來說明關於屬性宣告的資訊:

屬性區格在屬性的定義,把屬性的名稱放在型態之前,中間使用冒號「:」隔開,這樣的前後順序與Java的語法是相反的。下列是Java宣告屬性敘述與屬性區格中屬性定義的對照:

下列是屬性數量和順序性宣告的範例:

除了屬性的定義外,你可能也想表示某些屬性的特性,例如某些屬性是主要的鍵值。想要表示這些額外的特性,同樣是使用「Stereotypes」:

UML中並沒有關於「final」屬性的表示方法,你可以依照Java的命名慣例來判斷是否要加上「final」的宣告,它們的屬性名稱應該都是大寫,字與字之間使用底線連接。

方法區格

在方法區格中可以完整的告訴你關於方法宣告的資訊,在區格裡使用下列的語法來宣告方法:

在宣告方法的語法中:

  • 存取範圍:
  • 方法名稱:使用Java程式語言中合法的識別字。
  • 參數:可選擇性的宣告,是一個使用逗號分隔的清單,使用下列的語法來宣告方法的參數:
    • 種類:可選擇性的宣告,在Java實作上通常會省略,但是如果特別加上「in」的宣告,就要把這個參數宣告為「final」。
    • 參數名稱:使用Java程式語言中合法的識別字。
    • 參數型態:參數的資料型態,使用八種基本資料型態或類別名稱。
  • 回傳型態:方法回傳值的資料型態,使用八種基本資料型態或類別名稱。

以下列的類別節點來說明關於方法宣告的資訊:

方法區格在參數的定義,把名稱放在型態之前,中間使用冒號「:」隔開,這樣的前後順序與Java的語法是相反的。下列是Java宣告方法敘述與方法區格中方法定義的對照:

與屬性區格一樣,你也可以使用「Stereotypes」來標示某些方法的特性:

在上面兩個範例中都沒有提到「抽象方法、Abstract methods」,一個只有宣告沒有實作的方法。在方法區格中使用斜體字來表示抽象方法:

#uml #java







你可能感興趣的文章

React-[入門篇]- JSX聲明式語法

React-[入門篇]- JSX聲明式語法

Numpy 常用語法

Numpy 常用語法

陪你讀論文 - Part-Aware Data Augmentation for 3D Object Detection in Point Cloud

陪你讀論文 - Part-Aware Data Augmentation for 3D Object Detection in Point Cloud






留言討論