天天看點

再回首UML之上篇

        uml,統一模組化語言,是一種用來對真實世界物體進行模組化的标準标記,這個模組化的過程是開發面向對象設計方法的第一步,uml不是一種方法學,不需要任何正式的工作産品。

  uml提供多種類型的模型描述圖,當在某種給定的方法學中使用這些圖時,她使得開發中的應用程式更容易别我們所了解,uml的内涵遠不隻是這些模型描述圖,但是對于我們來說,這些圖對這門語言及其用法背後的基本原理提供了很好的介紹,通過把标準的uml圖放進工作産品中,熟練uml的人員就更加容易加入項目并迅速進入角色。在uml這個大家族中用例圖,類圖,時序圖是我們最常用的。米老師常說,學習是一個不斷循環往複的過程,随着第一次文檔圖的驗收,各位師傅的講解,這些圖在我心目中重新定義,而我對她的認識也在一步一步的加深,再一次回首用例圖,類圖和時序圖。

 首先, 我們來看一下用例圖。用例圖由于參與者(actor),用例(user case),關系,系統邊界以及箭頭組成,需要特别注意的是他們之間的關系,也就是泛化(generalization),其中泛化從某種程度上可以分為擴充(extend)和包含(include)。擴充(extend)是對基用例的擴充,基用例是一個完整的用例,即使沒有子用例的參與,也可以完成一個完整的功能,extend的基用例中将存在一個擴充點,隻有當擴充點被激活時,子用例才能被執行。我們以為機房收費系統為例,看看擴充是如何被應用的。

再回首UML之上篇

  在機房收費系統中,一般使用者和操作員均有導出excel這個功能,從上圖中我們可以看出來操作員和一般使用者擴充了導出表格這個功能,導出表格是一般使用者和操作員在某些情況下觸發産生的,導出表格并不是一般使用者和操作員所必須存在的部分,一般使用者和操作員可以單獨存在,一般使用者和操作員知道有導出表格這個功能的存在,但是導出表格這個功能不知道一般使用者和操作員的存在,因為導出表格不知到底是誰擴充了她,一般使用者和操作員是對導出表格在一些基本功能上具體的擴充。簡單的來說,就是a extend b表示b是a在系統某些情況下觸發産生的,b不是a中必須存在的部分,b可以單獨存在,b知道a的存在,但是a不知道b的存在,因為a不知道是誰擴充了她,b是對a在一些基本功能上具體的擴充,需要注意的是,箭頭從子用例指向基用例。我們再來了解一下include,仍然以機房收費系統為例,如下圖:

再回首UML之上篇

 include為包含關系,當兩個或多個用例中公用一組相同的動作,這是可以将這組相同的動作抽出來作為一個獨立的子用例,供多個基用例共享,因為子用例被抽出,基用例并非一個完整的用例,是以include關系中基用例必須和子用例一起使用才夠完整,子用例也必然被執行。從上圖中我們了解到,學生查詢資訊包含了學生查詢餘額,檢視上機記錄,檢視充值記錄以及上機狀态查詢,這些查詢都是學生查詢資訊整個過程中不可或缺的一部分,注意畫法,箭頭從基用例指向子用例。用例圖的基礎理論知識就先介紹到這裡,接下來,以機房收費系統為例,我修改過的用例圖:

再回首UML之上篇

 介紹完用例圖,我們在來看看我們的類圖,對于類圖,我們要十厘清楚明白的知道,類圖中的四種關系,關聯,依賴,泛化,實作,其中關聯包括聚合群組合。首先,我們來看一下關聯中的聚合,聚合,從她的字面上的意思就是大家夥聚到一起沒有特别強的限制力,強調的是整體與部分之間的關系,下面我們來看一張聚合的圖:

再回首UML之上篇

我們來看看在代碼中是怎麼樣實作的呢?

         大雁和大雁群她們之間的關系就屬于聚合關系,大雁進行遷徙的時候,一隻大雁屬于一個大雁群,一個雁群可以有很多大雁,大雁離開了雁群還是大雁,雁群離開了其中某一隻大雁,照樣還有其他的大雁,大雁可以脫離雁群獨立存在。接下來,關聯中的組合關系,從她的字面上,我們很容易了解,大家夥組裝在一起,具有很強的限制力,下面我們來看一張組合的圖:

再回首UML之上篇

我們再來看看組合在代碼中又是如何實作的呢:

繼續閱讀