天天看點

UML類圖學習

UML(Unified Modeling Language)統一模組化語言。包括以下幾個重要功能:

  • 可視化功能(Visualizing)
  • 說明功能(specifying)
  • 建造功能(Construting)
  • 建文檔功能(Documenting)

UML包括:

  • 使用案例圖(User case diagrams)
  • 類圖(Class diagrams)
  • 序列圖(Sequence diagrams)
  • 合作圖(Collaboration diagrams)
  • 活動圖(Activitiy diagrams)
  • 構件圖(Component diagrams)
  • 部署圖(Deployment diagrams)

其中使用案例圖,類圖,序列圖是最為重要的。

我對類圖進行總結:

     類圖:是顯示出類,接口以及它們之間的靜态結構和關系的圖。類圖的最基本元素就是類和接口。

如下圖所示:

第一層:類名,第二層是屬性層,包括public(+),protected(#),private(-)。第三層是方法層也包括public(+)方法,protected(#)方法,private(-)方法。根據類圖可以變成具體的java代碼,這裡就不寫了。

描述接口的類圖:

類圖中的關系:在類與類之間會有連線指明他們之間的關系。類和類、類和接口、接口和接口之間可以建立以下幾種關系:一般化關系,關聯關系,聚合關系合成關系,依賴關系,這幾種關系都是靜态的。

  • 一般化關系(Generalization):表示類與類的繼承關系,接口與接口的繼承關系或者類對接口的實作關系。

 如下圖所示:

     圖1-類與類的繼承關系(用實線白三角表示)                           圖2:類對接口的實作(用虛線白三角表示)

  • 關聯關系(Association):類與類之間的連接配接,它使一個類知道另一個類的屬性和方法。關聯可以是雙向的,也可以是單向的,單向的使用一個箭頭表示關聯方向,雙向的關聯可以有兩個箭頭或者沒有箭頭。如下圖:

            

相當于下面的java代碼:

class Driver{

  priavte Car car;//在Driver類中出現了一個類型為Car的執行個體變量

}

class Car{

每一個關聯都有一個名字,在上面的圖中關聯的名字為Drivers。

在每一個關聯的端點還可以有一個基數,表明一端的類可以有幾個執行個體。 比如唐僧和他的徒弟形成一個關聯關系,在這個關系裡面唐僧隻有一個,而徒弟卻有好幾個。如下圖:

一個關聯關系可以進一步确定為聚合關系或者合成關系。比如唐僧和他的徒弟的關系可以進一步确定為聚合關系。

  • 聚合關系(Aggregation):是關聯關系的一種,是強的關聯關系。聚合是整體和個體之間的關系。例如:汽車類和引擎類、輪胎類,以及其他零件類之間的關系便是整體和個體的關系

     一個汽車對象由一個引擎對象和四個輪胎對象組成的,如下圖:

          與關聯關系一樣,聚合關系也是通過執行個體變量來實作的:

     java代碼:Car類中應該有一個類型為Engine的屬性和一個類型為Tire的數組屬性。

     class Car{

    private Engine engine;

           private Tire[] tires;

      }

    關聯關系所涉及的兩個類是處于同一個層次上的,而在聚合類中兩個類是處于不平等的層次上的,一個代表整體,一個代表部分。

  • 合成關系(composition):是關聯關系的一種,是比聚合關系強的關系。他要求普通的聚合關系中代表整體的對象負責代表部分對象的生命周期,合成關系是不能共享的。看下面的圖:

       顯示了美猴王(MonkeyKing)和他的四肢(Limb)以及他使用的金箍棒(GoldRingedStaff)之間的關系。可以看出美猴王(MonkeyKing)和他的武器金箍棒(GoldRingedStaff)是聚合關系,美猴王和他的四條腿(Limb)是合成關系。因為美猴王的四肢完全由美猴王負責,并且不能共享,美猴王的生命周期關系到他的腿的生命周期,一旦美猴王挂了,他的腿也就活不成了。 但是金箍棒就比他的腿更不重要一些。

  • 依賴關系(dependency):也是類與類之間的關系,依賴總是單向的。依賴關系表示一個類依賴于另一個類的定義。例如,一個人(Person)類可以買車(Car)買房(House)。Person類依賴于Car類和House類。如圖:

與關聯關系不一樣,Person類中并沒有Car和House類的屬性。Car和House的執行個體以參數的方式存入buy()方法中去。

java代碼:

        class Person{

       public void buy(Car car){

      ......

     }

     public void buy(House house){

Face your past without regret. Handle your present with confidence.Prepare for future without fear. keep the faith and drop the fear.

面對過去無怨無悔,把握現在充滿信心,備戰未來無所畏懼。保持信念,克服恐懼!一點一滴的積累,一點一滴的沉澱,學技術需要不斷的積澱!

繼續閱讀