UML 是一種分析設計語言,也就是一種建模語言。
UML其結構主要包括以下幾個部分:
類圖(Class Diagram)主要用來描述不同的類以及它們之間的關係。
類圖的三段式結構為:
類名 |
---|
類的屬性 |
類的操作 |
類圖範例:
對應的Java範例程式碼:
觀察後發現,範例類圖和範例程式碼的差別不大,無非是型別寫在變數後面而已。
UML規定類屬性的表示方式為:
UML規定類操作的表示方式為:
注意:如果是構造方法,則無返回型別。
其中:可見性
表示該屬性對於類外的元素而言是否可見,包括:
+
表示;-
表示;#
表示;*
表示;一共九種關聯關係,他們的符號可以記不住,這個沒關係,用到再回來查。但是,他們各個圖間的關係概念得分辨明晰,不要有含混不明的地方。
例如,顧客(Customer)購買商品(Product)並擁有商品,反之,賣出的商品總有某個顧客與之相關聯。因此,Customer類和Product類之間具有雙向關聯關係,如下圖。
public class Customer {
private Product[] products;
}
public class Product {
private Customer customer;
}
public class Customer {
private Address address;
}
public class Address {}
public class Node {
private Node node;
}
這個應該是最複雜的,需要好好看看;
用一個數位或一個數位範圍表示, 這裡的數位範圍一遍指符號,下面有說明表格。
符號說明:
例如:一個介面(Form)可以擁有零個或多個按鈕(Button),但是一個按鈕只能屬於一個介面,因此,一個Form類的物件可以與零個或多個Button類的物件相關聯,但一個Button類的物件只能與一個Form類的物件關聯,如下圖:
對應的Java程式碼:
public class Form {
private Button[] buttons; //定義一個集合物件
}
public class Button {}
注意: 類之間的多重性有時會直接在關係連線上用一個數位表示,其實這種是不嚴謹的表示法,
多重性描述的是關係連線的兩端,自然要將兩端的範圍都描述清楚,只寫一個數位,會讓人不清楚是頭還是尾,引起混亂!
在程式碼實現聚合關係時,成員物件
通常作為構造方法
、Setter\Getter方法
或業務方法的引數
注入到整體物件中,對應的Java程式碼片段如下:
public class Car {
private Engine engine;
//構造注入
public Car(Engine engine) {
this.engine = engine;
}
//設值注入
public void setEngine(Engine engine) {
this.engine = engine;
}
}
public class Engine {
// ...
}
例如:人的頭(Head)與嘴巴(Mouth),嘴巴是頭的組成部分之一,而且如果頭沒了,嘴巴也就沒了,因此頭和嘴巴是組合關係。
public class Head {
private Mouth mouth;
public Head() {
this.mouth = new Mouth(); //範例化成員類
}
}
public class Mouth {
// ...
}
在UML中,依賴關係用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。
對應的Java程式碼:
public class Driver {
public void drive(Car car){
car.move();
}
}
public class Car {
public void move(){
// ...
}
}
在UML中,泛化關係用帶空心三角形的直線來表示。
對應的Java程式碼:
//父類別
public class Person (
protected String name;
protected int age;
public void move( ) {
// ...
}
public void say( ) {
// ...
}
}
//子類
public class Student extends Person {
private String teacherNo;
public void study( ) {
// ...
}
}
//子類
public class Teacher extends Person {
private String teacherNo;
public void teach() {
// ...
}
}
在UML中,類與介面之間的實現關係用帶空心三角形的虛線來表示。
對應的Java程式碼
public interface Vehicle {
public void move()
}
public class Ship implements Vehicle {
public void move(){
// ...
}
}
public class Car implements Vehicle {
public void move() {
// ...
}
}