UML類圖介紹及畫法

箭頭:

指向父類或接口。
指向依賴物。
指向子元素。

 

 

 

繼承、實現是三角型箭頭,其他都爲箭頭

組合、聚合都有一個菱形端,且都爲實線,其他都無菱形端

繼承是實線,實現是虛線

關聯是實線

依賴是虛線

 

        一般化關係/泛化/繼承

        實現

 

        關聯

        聚合

            組合/合成 

 

        依賴

 

傳統應用程序設計中所說的依賴一般指“類之間的關係”,那先讓我們複習一下類之間的關係:

     泛化:表示類與類之間的繼承關係、接口與接口之間的繼承關係;

     實現:表示類對接口的實現;

     依賴:當類與類之間有使用關係時就屬於依賴關係,不同於關聯關係,依賴不具有“擁有關係”,而是一種“相識關係”,只在某個特定地方(比如某個方法體內)纔有關係。

     關聯:表示類與類或類與接口之間的依賴關係,表現爲“擁有關係”;具體到代碼可以用實例變量來表示;

     聚合:屬於是關聯的特殊情況,體現部分-整體關係,是一種弱擁有關係;整體和部分可以有不一樣的生命週期;是一種弱關聯;

 

     組合:屬於是關聯的特殊情況,也體現了體現部分-整體關係,是一種強“擁有關係”;整體與部分有相同的生命週期,是一種強關聯;

 

1. 類(Class

一般包含3個組成部分。第一個是類名;第二個是屬性(attributes);第三個是該類提供的方法(類的性質可以放在第四部分;如果類中含有內部類,則會出現第五個組成部分)。類名部分是不能省略的,其他組成部分可以省略。

 

類名書寫規範:正體字說明類是可被實例化的,斜體字說明類爲抽象類。

 

屬性和方法書寫規範:修飾符 [描述信息屬性、方法名稱 [參數] [:返回類型|類型]

 

屬性和方法之前可附加的可見性修飾符:

 

加號(+)表示public;減號(-)表示private#號表示protected;省略這些修飾符表示具有package(包)級別的可見性。

      如果屬性或方法具有下劃線,則說明它是靜態的。

         描述信息使用 << 開頭和使用 >> 結尾。

         類的性質是由一個屬性、一個賦值方法和一個取值方法組成。書寫方式和方法類似。

1

 

Java代碼  收藏代碼
  1. public class TaxCalculator  
  2. {        
  3.          private longtaxRate ;  
  4.          private intsalary;  
  5.   
  6.          public TaxCalculator(long taxRate)  
  7.          {  
  8.                    this.taxRate = taxRate ;  
  9.          }  
  10.   
  11.         public long countTax()  
  12.          {  
  13.                   return taxRate*salary;  
  14.          }  
  15.   
  16.          public int getSalary()  
  17.          {  
  18.                    return salary;  
  19.          }  
  20.   
  21.          public void setSalary(int salary)  
  22.          {  
  23.                    this.salary = salary;  
  24.          }  
  25.   
  26. }   
  

TaxCalculator

-taxRate:long

+TaxCalculator(a:long)

+countTax():long

salary:long

 

       
2. 
包(Package

 

包是一種常規用途的組合機制。UML中的一個包直接對應於Java中的一個包。在Java中,一個包可能含有其他包、類或者同時含有這兩者。進行建模時,通常使用邏輯性的包,用於對模型進行組織;使用物理性的包,用於轉換成系統中的Java包。每個包的名稱對這個包進行了惟一性的標識。:

 



 

3. 接口(Interface)

 

接口是一系列操作的集合,它指定了一個類所提供的服務。它直接對應於Java中的一個接口類型。接口的表示有大概兩種方式。具體畫法見下例:

 

例:

 

Java代碼  收藏代碼
  1. public interface TaxCalculator  
  2. {  
  3.          public long countTax();  
  4.   
  5.          public int getSalary();  
  6.   
  7.          public void setSalary(int salary);  
  8.   
  9. }   
  

畫法一:

 



 

 

      畫法二 :    

 

Interface

TaxCalculator

+countTax():long

+getSalary():int

+setSalary()

 
 

4. 關係

 

常見的關係有:

一般化關係(繼承)、

實現關係(接口實現)、

聚合關係、

合成關係、

依賴關係。

請注意不同關係在圖中連線表示的不同。

 

4.1一般化關係(Generalization

 

在有的書籍和資料中也叫做泛化關係

 

       一般化關係表示類與類、接口與接口之間的繼承關係。關係中的箭頭由子類指向父類。在Java中,用extends關鍵字來直接表示這種關係。

 

Java代碼  收藏代碼
  1. public abstract class Employee{  
  2.   
  3. }  
  4.   
  5. public class Programmer extends Employee{  
  6.   
  7. }   
 繼承: 

 



 

 

4.2實現(Realization

 

實例關係指定兩個實體之間的一個合同。換言之,一個實體定義一個合同,而另一個實體保證履行該合同。關係中的箭頭由實現接口的類指向被實現的接口。在Java中,實現關係可直接用implements關鍵字來表示。

 

Java代碼  收藏代碼
  1. public interface CollegePerson{  
  2.   
  3. }  
  4.   
  5. public class Professor implements CollegePerson{  
  6.   
  7. }  
 接口實現:

 

表示方法一:(在Rose2003 下實現如下,連接線沒有箭頭,因爲方向顯而易見)



 

 

表示方法二: 



 

 

 

 

4.3關聯(Association

 

表示類與類之間的連接。它使一個類的可見屬性和方法被另一個類使用。關聯可以是雙向或者單向的。雙向的關聯箭頭是可選的,單向的箭頭指向遍歷或者查詢的方向。在Java中,關聯使用實例變量來實現。在關聯關係中可以使用附加的基數來說明類之間對應的個數。

 

基數

含義

0..1

零個或者一個實例

0..*或者*

沒有限制,任意

1

有且只能一個實例

1..*

至少有一個實例

 

常見的基數

 

例:以權限中的用戶組、用戶角色爲例,一個用戶角色可以屬於一個或者多個用戶組,一個用戶組則可以包含多個用戶角色。如果用戶組採用下面的方法來獲得用戶角色的權限

Java代碼  收藏代碼
  1. public class UserGroup{  
  2.   
  3. private UserRole uRole ;  
  4.   
  5.           ......  
  6.   
  7. }  
  8.   
  9. public class UserRole{  
  10.   
  11. }   
 

 

則表現在圖中爲:(注意箭頭的畫法)



 

 


注意:一個關聯關係往往是聚合關係或者是合成關係。

 

4.4聚合(Aggregation

 

聚合是關聯的一種形式,代表兩個類之間的整體/局部關係。聚合暗示着整體在概念上處於比局部更高的一個級別,而關聯暗示兩個類在概念上位於相同的級別。在Java中,聚合也是使用實例變量來實現的。
關聯和聚合的區別純粹是概念上的,在Java語法上分辨不出來的。聚合還暗示着實例圖中不存在迴路。換言之,只能是一種單向關係。

 

例:汽車與輪胎的關係可以很好的說問題。

 

Java代碼  收藏代碼
  1. public class Car{  
  2.   
  3.          private Tyres tyres;  
  4. }  
  5.   
  6. public class Tyres{  
  7.   
  8. }   
 聚合:

 



 

 

 

4.5合成、組合(Composition

 

合成是聚合的一種特殊形式,暗示局部整體內部的生存期職責。合成關係是不能共享的。所以,雖然局部不一定要隨整體的銷燬而被銷燬,但整體要麼負責保持局部的存活狀態,要麼負責將其銷燬。局部不可與其他整體共享。但是,整體可將所有權轉交給另一個對象,後者隨即將承擔生存期職責。

 

       例:人和他的腿就是一個好的例子。

 

Java代碼  收藏代碼
  1. public class Man{  
  2.   
  3.          private Legs legs;  
  4.   
  5. }  
  6.   
  7. public class Legs{  
  8.   
  9. }   
 合成:

 



 

 

 

4.6依賴(Dependency

 

依賴也是類與類之間的連接,並且依賴總是單向的。實體之間一個使用關 系暗示一個實體的規範發生變化後,可能影響依賴於它的其他實例。更具體地說,它可轉換爲對不在實例作用域內的一個類或對象的任何類型的引用。其中包括一個 局部變量,對通過方法調用而獲得的一個對象的引用(如下例所示),或者對一個類的靜態方法的引用(同時不存在那個類的一個實例)。也可利用依賴來表示包和包之間的關係。由於包中含有類,所以你可根據那些包中的各個類之間的關係,表示出包和包的關係。

 

例:給一個僱員計算薪水的時候,要使用計算器的例子

 

Java代碼  收藏代碼
  1. public class Employee{  
  2.   
  3.          public void calcSalary(Calculator cSalary)  
  4.          {  
  5.   
  6.          }  
  7. }   
 依賴:



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