一、 UML類圖思維導圖
二、 詳細分析和介紹
下面就從上面的思維導圖開始,詳細的介紹UML類圖!
1、 什麼是UML,概念是什麼?
UML(Unified Modeling Language)中文統一建模語言,是一種開放的方法,用於說明、可視化、構建和編寫一個正在開發的、面向對象的、軟件密集系統的製品的開放方法。UML展現了一系列最佳工程實踐,這些最佳實踐在對大規模,複雜系統進行建模方面,特別是在軟件架構層次已經被驗證有效。 【維基百科】
統一建模語言(英語:Unified Modeling Language,縮寫 UML)是非專利的第三代建模和規約語言。UML是一種開放的方法,用於說明、可視化、構建和編寫一個正在開發的、面向對象的、軟件密集系統的製品的開放方法。【維基百科】
UML分爲UML模型和UML類圖。
區分UML模型和UML圖是非常重要的,UML圖,包括用例圖、協作圖、活動圖、序列圖、部署圖、構件圖、類圖、狀態圖,是模型中信息的圖形表達方式,但是UML模型獨立於UML圖存在。
2、爲什麼要用UML?類圖的作用
UML展現了一系列最佳工程實踐,這些最佳實踐在對大規模,複雜系統進行建模方面,特別是在軟件架構層次已經被驗證有效。
類圖的作用:
(1):在軟件工程中,類圖是一種靜態的結構圖,描述了系統的類的集合,類的屬性和類之間的關係,可以簡化了人們對系統的理解;
(2):類圖是系統分析和設計階段的重要產物,是系統編碼和測試的重要模型。
3、 類的UML的介紹和畫法?
我們用 PowerDesign 來構建 UML圖
類的UML使用包含類名、屬性、方法名以及參數。使用帶分割線的長方形表示。
一、 類名 在第一部分 每個類都必須有一個名字,類名是一個字符串,根據java命名規範 類名首字母大寫
二、 屬性 在第二部分 屬性是指類的性質,即類的成員變量。一個類可以有任意多個屬性,也可以沒有屬性。
UML規定屬性的表示方式爲:
可見性 名稱:類型 [ = 缺省值 ]
- **可見性:**表示該屬性對於類外的元素而言是否可見,包括公有(public)、私有(private)和受保護(protected)三種,在類圖中分別用符號+、-和#表示。 +表示 public屬性, - 表示 private屬性, # 表示 protected屬性
- **名稱:**表示屬性名,用一個字符串表示。
- **類型:**表示屬性的數據類型,可以是基本數據類型,也可以是用戶自定義類型。
- **缺省值:**是一個可選項,即屬性的初始值。
三、 方法(操作) 在第三部分 操作是類的任意一個實例對象都可以使用的行爲,是類的成員方法。
UML規定操作的表示方式爲:
可見性 名稱(參數列表) [ : 返回類型]
- 可見性: 定義與屬性的可見性定義相同。
- 名稱: 即方法名,用一個字符串表示。
- 參數列表: 表示方法的參數,其語法與屬性的定義相似,參數個數是任意的,多個參數之間用逗號“,”隔開。
- 返回類型: 是一個可選項,表示方法的返回值類型,依賴於具體的編程語言,可以是基本數據類型,也可以是用戶自定義類型,還可以是空類型(void),如果是構造方法,則無返回類型。
由於在Java語言中允許出現內部類,因此可能會出現包含四個部分的類圖,如圖所示:
接口的UML比類多了一個圓圈和橫線 其他類似。
現在我們來講類與類的四種種關係:泛化(Generalization)、實現(Realization)、依賴(Dependence)、關聯(Association),其中關聯又分爲關聯、聚合(Aggregation)、組合(Composition)。
表示關係的強弱:依賴 < 關聯 < 聚合 < 組合 < 泛化(繼承)
UML類圖關係線條:
(1). 泛化關係表示類與類之間的繼承關係,類和類,接口和接口都可以是繼承關係,父類稱爲基類或者超類,子類稱爲派生類。子類繼承父類實現父類的所有功能,並擁有父類沒有的功能!
UML圖:
代碼:
public class Persons {
private String cardNumber;
private String name;
protected int age;
/** @pdRoleInfo migr=no name=Mouth assc=組合_Composition mult=0..1 type=Composition */
public Mouth mouth;
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public int getAge() {
// TODO: implement
return age;
}
public void setAge(int age) {
this.age=age;
}
public String getCardNumber() {
return cardNumber;
}
public void setCardNumber(String cardNumber) {
this.cardNumber=cardNumber;
}
}
public class ChinesePeople extends Persons {
public String skinColor = "yellow";
public ShaxiPeople[] shaxiPeople;
public void useChopsticks() {
}
}
(2). 實現關係就是java中的一個類和接口之間的關係,接口中一般是沒有成員變量。所有操作都是抽象的,只有聲明沒有具體的實現。
UML圖:
代碼:
public interface Say {
static final String laguage = "English";
void sayHello(String laguage);
}
public class Human implements Say {
public String bipedalism;
/** @pdRoleInfo migr=no name=Persons assc=聚合_Aggregation mult=1..1 type=Aggregation */
public Persons persons;
public void useTools() {
}
public void sayHello(String laguage) {
}
}
(3). 依賴關係是類與類之間最弱的關係,A元素變化會影響B元素,反之不成立。說簡單點就是一個類使用了另一個類,這種關係具有臨時性特徵,一個類的改變由於另一類而受影響。
解釋
也就是 當類A當中使用了類B,其中類B是作爲類A的方法參數、方法中的局部變量、或者靜態方法調用。
UML圖:
代碼:
public class Water {
public String unformed;
public void evaporation() {
}
}
public class Mouth {
public String Tooth;
public void drinkWater(Water water) {
}
}
(4). 關聯關係表示一個類和另一類有聯繫,它使一個類知道另一個類的屬性和方法,被關聯的元素間通常可以被獨立的考慮。
單向關聯表現爲:類A當中使用了類B,其中類B是作爲類A的成員變量。
雙向關聯表現爲:類A當中使用了類B作爲成員變量;同時類B中也使用了類A作爲成員變量。
UML圖:
代碼:
public class ChinesePeople extends Persons {
public String skinColor = "yellow";
public void useChopsticks() {
}
}
public class ShaxiPeople {
public String chineseHamburger;
/** @pdRoleInfo migr=no name=ChinesePeople assc=關聯_Association mult=0..1 */
public ChinesePeople chinesePeople;
public void drumDance() {
// TODO: implement
}
}
1…1 表示另一個類的一個對象只與該類的一個對象有關係
0…* 表示另一個類的一個對象與該類的零個或多個對象有關係
1…* 表示另一個類的一個對象與該類的一個或多個對象有關係
0…1 表示另一個類的一個對象沒有或只與該類的一個對象有關係
(5). 聚合關係是整體和部分的關係,是一種強的關係,但是部分可以脫離整體而存在。是關聯關係的一種。
解釋
聚合關係是關聯關係的一種,耦合度強於關聯,他們的代碼表現是相同的,僅僅是在語義上有所區別:關聯關係的對象間是相互獨立的,而聚合關係的對象之間存在着包容關係,他們之間是“整體-個體”的相互關係。
UML圖:
代碼:
public class Human implements Say {
public String bipedalism;
/** @pdRoleInfo migr=no name=Persons assc=聚合_Aggregation mult=1..1 type=Aggregation */
public Persons persons;
public void useTools() {
}
public void sayHello(String laguage) {
}
}
public class Persons {
private String cardNumber;
private String name;
protected int age;
/** @pdRoleInfo migr=no name=Mouth assc=組合_Composition mult=0..1 type=Composition */
public Mouth mouth;
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public int getAge() {
// TODO: implement
return age;
}
public void setAge(int age) {
this.age=age;
}
public String getCardNumber() {
return cardNumber;
}
public void setCardNumber(String cardNumber) {
this.cardNumber=cardNumber;
}
}
(6). 組合關係是聚合關係的一種變種,便是了更強的組合關係,它要求整體的對象代表部分對象的生命週期。
解釋
相比於聚合,組合是一種耦合度更強的關聯關係。存在組合關係的類表示“整體-部分”的關聯關係,“整體”負責“部分”的生命週期,他們之間是共生共死的;並且“部分”單獨存在時沒有任何意義。
UML圖:
代碼:
public class Mouth {
public String Tooth;
public void drinkWater(Water water) {
}
}
public class Persons {
private String cardNumber;
private String name;
protected int age;
/** @pdRoleInfo migr=no name=Mouth assc=組合_Composition mult=0..1 type=Composition */
public Mouth mouth;
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public int getAge() {
// TODO: implement
return age;
}
public void setAge(int age) {
this.age=age;
}
public String getCardNumber() {
return cardNumber;
}
public void setCardNumber(String cardNumber) {
this.cardNumber=cardNumber;
}
}
到此,本篇文章真的結束了,若文章有不足或者錯誤的地方,歡迎指正,以防止給其他讀者錯誤引導。