1. 程式人生 > >系統設計_1_關聯依賴組合聚合UML

系統設計_1_關聯依賴組合聚合UML

一.引

        撇開系統的總體設計,架構圖,模組圖等框架性設計,在具體到某一個功能點的流程設計/類設計/介面設計時,通過UML羅列類/介面及其關係可以更好地將設計轉化為程式碼。UML從多個角度描述系統內容,如用例圖從系統參與者的角度描述需求或功能點,部署圖從系統角度描述分佈與架構,時序圖從邏輯呼叫角度對功能點在不同模組/子系統間更好敘述,而類圖從類抽象設計方面描述功能的具體設計實現。下面重點講解類圖中常見設計點。

二.類間關係分析

        從面向物件角度,類與類間大體包括繼承(extends)/實現(realization)/關聯(association)/依賴(dependency)組合(composition)/聚合(aggregation)幾種關係。

  • 繼承(extends)和實現(realization)對應我們常見的父類/子類,類實現介面這種關係,如動物與魚,游泳行為與魚。
  • 關聯(association)和依賴(composition)對應類物件使用另一個類物件實現功能這種關係,如好友間傳送訊息使用封裝的xmpp通訊物件。
  • 組合(composition)和聚合(aggregation)對應類物件由其他類物件組成這種關係,如公司由不同部門組成,鳥群由鳥兒組成;

三.UML類圖

1.繼承(extends)

        幾個類物件一脈相承,可以歸納為一類具有共同屬性的物件。如貓,狗,鳥,魚等都歸納為動物,那麼動物(Animal)即為父類,貓(Cat),狗(Dog),鳥(Bird)和魚(Fish)是動物的子類。進一步擴充套件,貓又具有子類:波斯貓,龍貓等,狗具有子類:田園犬,阿拉斯加,金毛等。

         子類預設會繼承父類的protected.public成員。

        UML用下圖表示:


2.實現(realization)

        幾種類物件具有某種共同行為,如鳥/飛機/火箭/風箏都回飛, 魚/潛艇/海蛇/都回會游泳,通常是對某一動作行為的抽象。

        UML用下圖表示:


3.關聯(association)

        兩個類物件間具有某種緊密.強烈的關係,如學生和課程間的關係,學生會選擇某些課程作為在校期間的研究方向,而老師和學生間更像一種雙向關聯關係。

        關聯關係在類間以類成員屬性的方式存在,如學生關聯課程,則課程以成員屬性方式存在於學生類中。

        UML用下圖表示:


4.依賴(dependency)

        兩個類物件間具有某種臨時性.偶然的關係,如農夫砍柴需要砍刀,潛水運動員需要氧氣瓶。可以理解為某個類物件在做某件事情時需要其他類物件作為輔助工具。

        依賴關係通過以類成員方法的形參方式存在,如乘客過河方法,傳入一個船物件。

        UML用下圖表示:


5.組合(compositon)

        一個整體性的類物件由若干個其他類物件組成,是一種強烈的個體構成整體關係,contains a。個體類的生命週期隨整體類的生命週期變化,個體不能單獨存在或單獨存在無意義。

        個體物件以成員屬性的方式存在於整體物件中。如比較貼切的例子包括:鳥兒與翅膀,汽車與輪胎, 公司與部門, 滑鼠與按鍵/滾輪。

        UML用下圖表示:


6.聚合(aggregation)

         一個整體性的類物件由若干個其他類物件積聚,是一種鬆散的個體弱聯合關係, has a 。 個體類本身可以單獨存在,且生命週期由自己決定。

         個體物件也是以成員屬性的方式存在於整體物件中,只能通過語義區分。如:艦隊和艦隻,運輸車隊和卡車,公交車和乘客,魚群和魚。

         UML用下圖表示:


四.總結

        關聯,組合,聚合一般都是以類成員屬性的方式存在,有些在建構函式中初始化,有些只在需要時通過setter方法賦值。而依賴一般只在類的成員方法中以形式引數的方式存在,短暫的用完即棄。

        在系統開發設計時,優先定義好介面,抽象類,分離各實體類,功能類,在UML類圖幫助下可以迅速理清結構圖,完成整個系統的搭建測試。