java-UML類圖

1.類圖做用

類圖是軟件工程的統一建模語言一種靜態結構圖,該圖描述了系統的類集合,類的屬性和類之間的關係。幫助人們簡化對系統的理解,它是系統分析和設計階段的重要產物,也是系統編碼和測試的重要模型依據。學習好類圖的繪製,是一位合格的軟件工程師應有的技能。html

2.類圖中的對象

1. 類(Class)
通常包含3個組成部分。 第一個是類名;第二個是屬性(attributes);第三個是該類提供的方法(類的性質能夠放在第四部分;若是類中含有內部類,則會出現第五個組成部分)。類名部分是不能省略的,其餘組成部分能夠省略。
類名書寫規範: 正體字說明類是可被實例化的,斜體字說明類爲抽象類。
屬性和方法書寫規範: 修飾符 [描述信息] 屬性、方法名稱 [參數] [:返回類型|類型]. 屬性和方法以前可附加的可見性修飾符: 加號(+)表示public;減號(-)表示private;#號表示protected;省略這些修飾符表示具備package(包)級別的可見性。java

若是屬性或方法具備下劃線,則說明它是靜態的。
描述信息使用 << 開頭和使用 >> 結尾。web

javabash

public class TaxCalculator  
{        
         private longtaxRate ;  
         private intsalary;  
         
         public TaxCalculator(long taxRate){  
            this.taxRate = taxRate ;  
         }  
        public long countTax(){  
            return taxRate*salary;  
         }  
         public int getSalary(){  
            return salary;  
         }  
         public void setSalary(int salary){  
            this.salary = salary;  
         }  
}   
複製代碼


2. 接口(Interface)
接口是一系列操做的集合,它指定了一個類所提供的服務。它直接對應於Java中的一個接口類型。

3 類圖中的六種關係

類圖中,類與類之間通常會有六種關係,他們分別是繼承(Generalization)、實現(Implements)、組合(Composition)、聚合(Aggressgation)、依賴(Dependency)、關聯(Association)學習

3.1 繼承(Generalization)

在有的書籍和資料中也叫作「泛化關係」,"通常化關係"。測試

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


在這裏Teacher和Student類分別是繼承了Person類,自動擁有了Person類的公共屬性和操做。同時他們分別擴展了本身獨有的操做teach和listen。 繼承關係用一個實線空箭頭的連線來表示,箭頭指向父類

3.2實現(Implements)

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

在這裏SuperMan類同樣繼承了Person類,由於超人還有一個特性是會飛,因此他還實現了一個Fly的接口。實現關係用一個虛線空心箭頭的連線來表示,箭頭指向接口。

3.3組合(Composition)

局部不必定要隨總體的銷燬而被銷燬,但總體要麼負責保持局部的存活狀態,要麼負責將其銷燬。局部不可與其餘總體共享。編碼

組合是聚合的一種特殊形式,暗示「局部」在「總體」內部的生存期職責。組合表示的是兩個對象之間一種強「擁有」的關係,若是B組合成爲A,那麼B是A的一個總體,B和A的生命週期是同樣的。例如是一種部分與總體的關係,部分與總體之間的生命週期是同樣的。組合關係用一個一個帶箭頭的連線表示,尾巴上有實心的菱形,箭頭指向被擁有的對象。上面的數字表示二者之間的數量關係。
javaspa

public class Person{  
    private Legs hands;  
}  
  
public class Hand{  
}   
複製代碼

在這裏,Hand和Person是組合關係,Hand是Person的部分,Person擁有Hand,並且Hand的生命週期依賴Person的生命週期。也就是說Person沒有了,Person的Hand也沒有了。在這裏表示一個Hand必定歸宿一個Person而一個Person可能有0個或者多個Hand。

3.4 聚合(Aggressgation)

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


這裏Classess是由Teacher和Student聚合而成,他們之間是一種擁有關係,可是Classes消亡,並不表明Teacher和Student的消亡, 他們的生命週期是不依賴的。這是和組合的重要區別。這幅圖裏面聚合關係上的數字表示一個Teacher能夠在0或者多個Classes中,而一個班級能夠由0到多個Teacher。Classes和Student之間聚合關係上的的數量表示的是一樣的含義。

3.5依賴(Dependency)

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

3.6 關聯(Association)

若是一個對象須要知道另外一個對象,則對象之間是一種關聯的關係。關聯能夠是單向的,即一個對象知道另外一個對象,而另外一個對象不知道該對象,也能夠是雙向的,即兩個對象相互知道。關聯式用一條實現表示,單向關聯帶一個箭頭,指向被知道的對象,雙向關聯無箭頭。例如學生須要瞭解考試對象的狀況,考試對象須要瞭解學生的狀況,這是一種雙向關聯關係。

轉自: www.cnblogs.com/javawebsoa/…
相關文章
相關標籤/搜索