国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

統一建模語言UML輕松入門之類和對象

2019-11-17 04:50:52
字體:
來源:轉載
供稿:網友

  同類相從,同聲相應,固天之理也。——《莊子·漁父》

  類是一種對本質相同事物的抽象,人類軟件開發技術的發展歷史,就是還事物以本源的歷史,開發技術、名詞越來越接近世界的真實,“面向對象”、“類”就是這樣的產物。

  3.1類圖

  在UML中,類圖顯示了一組類、接口、協作以及它們之間的關系。在UML的靜態機制中類圖是一個重點,它不但為設計人員所關心,更為實現人員所關注,建模工具也主要依據類圖來產生代碼(正向)工程。因此,類圖在UML的各種圖中占據了相當重要的地位。

  類

在類圖中類用矩形框來表示,它的屬性和操作分別列在分格中,若不需要表達具體信息時,分格可以省略。一個類可能出現在好幾個圖中。同一個類的屬性和操作只在一種圖中列出,在其他圖中可省略。圖3.1給出Student類和MFC中的CObject類。

統一建模語言UML輕松入門之類和對象(圖一)統一建模語言UML輕松入門之類和對象(圖二)
圖3.1類的表示

  類間關系

  在類圖中,除了需要描述單獨的類的名稱、屬性和操作外,我們還需要描述類之間的聯系,因為沒有類是單獨存在的,它們通常需要和別的類協作,創造比單獨工作更大的語義。在UML類圖中,關系用類框之間的連線來表示,連線上和連線端頭處的不同修飾符表示不同的關系。類之間的關系有繼續(泛化)、關聯、聚合和組合。

  (1)繼續:指的是一個類(稱為子類)繼續另外的一個類(稱為基類)的功能,并增加它自己的新功能的能力,繼續是類與類之間最常見的關系。類圖中繼續的表示方法是從子類拉出一條閉合的、單鍵頭(或三角形)的實線指向基類。例如,圖3.2給出了MFC中CObject類和菜單類CMenu的繼續關系。

統一建模語言UML輕松入門之類和對象(圖三)
圖3.2 類的繼續

  類的繼續在C++中呈現為:

  class B { }
  class A : public B{ }

  (2)關聯:指的是模型元素之間的一種語義聯系,是類之間的一種很弱的聯系。關聯可以有方向,可以是單向關聯,也可以是雙向關聯。可以給關聯加上關聯名來描述關聯的作用。關聯兩端的類也可以以某種角色參與關聯,角色可以具有多重性,表示可以有多少個對象參與關聯。可以通過關聯類進一步描述關聯的屬性、操作以及其他信息。關聯類通過一條虛線與關聯連接。對于關聯可以加上一些約束,以加強關聯的含義。
 
  關聯在C++中呈現為:

  class A{...}
  class B{ ...}
  A::Function1(B &b) //或A::Function1(B b) //或A::Function1(B *b)

  即一個類作為另一個類方法的參數。

  (3)聚合:指的是整體與部分的關系。通常在定義一個整體類后,再去分析這個整體類的組成結構。從而找出一些組成類,該整體類和組成類之間就形成了聚合關系。例如一個航母編隊包括海空母艦、驅護艦艇、艦載飛機及核動力攻擊潛艇等。需求描述中“包含”、“組成”、“分為…部分”等詞常意味著聚合關系。

統一建模語言UML輕松入門之類和對象(圖四)
圖3.3 類的聚合
QQread.com 推出各大專業服務器評測 linux服務器的安全性能 SUN服務器 HP服務器 DELL服務器 IBM服務器 聯想服務器 浪潮服務器 曙光服務器 同方服務器 華碩服務器 寶德服務器
  (4)組合:也表示類之間整體和部分的關系,但是組合關系中部分和整體具有統一的生存期。一旦整體對象不存在,部分對象也將不存在。部分對象與整體對象之間具有共生死的關系。

  聚合和組合的區別在于:聚合關系是“has-a”關系,組合關系是“contains-a”關系;聚合關系表示整體與部分的關系比較弱,而組合比較強;聚合關系中代表部分事物的對象與代表聚合事物的對象的生存期無關,一旦刪除了聚合對象不一定就刪除了代表部分事物的對象。組合中一旦刪除了組合對象,同時也就刪除了代表部分事物的對象。

  我們用淺顯的例子來說明聚合和組合的區別。“國破家亡”,國滅了,家自然也沒有了,“國”和“家”顯然也是組合關系。而相反的,計算機和它的外設之間就是聚合關系,因為它們之間的關系相對松散,計算機沒了,外設還可以獨立存在,還可以接在別的計算機上。在聚合關系中,部分可以獨立于聚合而存在,部分的所有權也可以由幾個聚合來共享,比如打印機就可以在辦公室內被廣大同事共用。

  在C++語言中,從實現的角度講,聚合可以表示為:

  class A {...}
  class B { A* a; .....}

  即類B包含類A的指針;

  而組合可表示為:

  class A{...}
  class B{ A a; ...}

  即類B包含類A的對象。

  準確的UML類圖中用空心和實心菱形對聚合和組合進行了區分。


統一建模語言UML輕松入門之類和對象(圖五) 統一建模語言UML輕松入門之類和對象(圖六)
圖3.4 聚合和組合

統一建模語言UML輕松入門之類和對象(圖七)
圖3.5 銀行治理系統類圖

  圖3.5給出了一個典型的銀行治理系統的類圖,基本上一看就懂:

  銀行類聚合了賬號庫(AccountSet)、客戶庫(EmployeeSet)和員工庫(EmployeeSet);

  賬號庫中包含了n個賬號(Account)、客戶庫中包含了n個客戶(Employee),員工庫包含了n個員工(Employee);

  員工類和客戶類都繼續自人(Person)類,而員工類中又有一種非凡的員工,即員工治理者類(EmployeeAdmin);

  賬號類和客戶類之間體現出一種關聯關系;

  單獨的元素PersonSex定義了枚舉類,其中包括Male和Female兩種性別。

  我們再給出一個類圖實例(圖3.6),它來源于軟件無線電SCA(軟件通訊架構)標準。軟件無線電技術是目前電信產品、軍用電臺中研究的大熱門,在其定義的SCA體系中,核心框架即以類圖的形式呈現,它定義了應用程序基本框架和標準控制服務接口。

  實際上,軟件無線電核心框架即由類以及類之間的繼續、關聯和聚合關系組成。

統一建模語言UML輕松入門之類和對象(圖八)
圖3.6 軟件無線電核心框架

  接下來,我們給出建立類圖的步驟:

  (1)研究分析問題領域確定系統需求;

  類的識別是一個需要大量技巧的工作,尋找類的一些技巧包括:名詞識別法;根據用例描述確定類;使用CRC分析法;根據邊界類、控制類、實體類的劃分來幫助分析系統中的類;參考設計模式確定類;對領域進行分析或利用已有領域分析結果得到類;利用RUP中如何在分析和設計中尋找類的步驟。

  (2)確定類,明確類的含義和職責、確定屬性和操作;

  (3)確定類之間的關系。

  3.2對象圖

  對象圖顯示某時刻對象和對象之間的關系,是類圖的變化,一個對象圖可看成一個類圖的示例(example),對象圖表示的是類的對象實例而不是真實的類。由于對象存在生命周期,因此對象圖只能在系統某一時間段存在。

  對象圖中并無新的表示法(除了對象名下要加下劃線以外),與類圖中的表示法一樣,可以認為,只有對象而無類的類圖就是一個“對象圖”。

統一建模語言UML輕松入門之類和對象(圖九)
圖3.7 對象圖

  在對象圖中,對象名可以有三種表示形式:

  (1)對象名:類名

  (2):類名

  (3)對象名

  圖3.7中的是第1種,即“對象名:類名”格式。

  實質上,對象圖幾乎很少被用到(它包含的信息量太小,僅僅用于呈現某一時刻對象的值,對軟件的設計幾乎沒有太大的幫助),使用遠沒有類圖廣泛。我們可以這樣類比類圖和對象圖之間的關系:

  “動詞+名詞”構成“動名詞”,例如動詞“愛”+名詞“國”構成動名詞“愛國”。

  我們可以看到,“動名詞”的信息量很大,很抽象,而作為動名詞的例子的“愛國”信息量很小,具體程度很高。

  動名詞 ―――――> 類圖

  愛國  ―――――> 對象圖

  把“動名詞”看作類圖,把“愛國”看作對象圖,很明顯,對象圖就是類圖的一個example而已。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵宝市| 曲阜市| 黎川县| 陆良县| 铁岭市| 邯郸市| 潞城市| 聂荣县| 丽江市| 巨鹿县| 保靖县| 庄河市| 莆田市| 靖江市| 克山县| 郸城县| 台中市| 台州市| 石河子市| 北票市| 贺州市| 肇源县| 南澳县| 清徐县| 永胜县| 多伦县| 灵台县| 克山县| 大连市| 安泽县| 清丰县| 安图县| 彰化县| 祥云县| 凤台县| 璧山县| 济南市| 绿春县| 绥滨县| 白城市| 大冶市|