軟件設計-UML類圖詳解說明

一、 UML類圖思維導圖

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類圖

類的UML使用包含類名、屬性、方法名以及參數。使用帶分割線的長方形表示。

類圖

一、 類名 在第一部分 每個類都必須有一個名字,類名是一個字符串,根據java命名規範 類名首字母大寫
二、 屬性 在第二部分 屬性是指類的性質,即類的成員變量。一個類可以有任意多個屬性,也可以沒有屬性。

UML規定屬性的表示方式爲:

可見性 名稱:類型 [ = 缺省值 ]

  1. **可見性:**表示該屬性對於類外的元素而言是否可見,包括公有(public)、私有(private)和受保護(protected)三種,在類圖中分別用符號+、-和#表示。 +表示 public屬性, - 表示 private屬性, # 表示 protected屬性
  2. **名稱:**表示屬性名,用一個字符串表示。
  3. **類型:**表示屬性的數據類型,可以是基本數據類型,也可以是用戶自定義類型。
  4. **缺省值:**是一個可選項,即屬性的初始值。
三、 方法(操作) 在第三部分 操作是類的任意一個實例對象都可以使用的行爲,是類的成員方法。

UML規定操作的表示方式爲:

可見性 名稱(參數列表) [ : 返回類型]

  1. 可見性: 定義與屬性的可見性定義相同。
  2. 名稱: 即方法名,用一個字符串表示。
  3. 參數列表: 表示方法的參數,其語法與屬性的定義相似,參數個數是任意的,多個參數之間用逗號“,”隔開。
  4. 返回類型: 是一個可選項,表示方法的返回值類型,依賴於具體的編程語言,可以是基本數據類型,也可以是用戶自定義類型,還可以是空類型(void),如果是構造方法,則無返回類型。

由於在Java語言中允許出現內部類,因此可能會出現包含四個部分的類圖,如圖所示:

內部類

接口的UML比類多了一個圓圈和橫線 其他類似。

接口

現在我們來講類與類的四種種關係:泛化(Generalization)、實現(Realization)、依賴(Dependence)、關聯(Association),其中關聯又分爲關聯、聚合(Aggregation)、組合(Composition)。

表示關係的強弱:依賴 < 關聯 < 聚合 < 組合 < 泛化(繼承)

UML類圖關係線條:

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;
   }
}

到此,本篇文章真的結束了,若文章有不足或者錯誤的地方,歡迎指正,以防止給其他讀者錯誤引導。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章