由于uml(統(tǒng)一建模語言)在開發(fā)中經(jīng)常會(huì)用到,特別是在軟件開發(fā)中的OOAD階段,因此要理解和使用uml顯得尤為重要。在uml開始之前,咱先回顧一個(gè)OOAD、OOP的主要特征。
OOAD:根據(jù)面向?qū)ο蟮姆椒▽W(xué)來對(duì)軟件系統(tǒng)進(jìn)行分析和設(shè)計(jì)的過程。它包括OOA 分析階段和OOD設(shè)計(jì)階段。其中分析階段主要解決“What to do?”的問題,而設(shè)計(jì)階段主要解決“How to do?”的問題。具體來說就是:在OOA分析階段咱要做的主要工作就是建立對(duì)業(yè)務(wù)問題域的視圖(建立模型)、列出系統(tǒng)必須要完成的核心任務(wù)、列出針對(duì)此問題域的最佳解決方案;而在設(shè)計(jì)階段咱要做的主要工作是:如何解決具體的業(yè)務(wù)問題,引入咱工作需要哪些支持,設(shè)計(jì)系統(tǒng)的實(shí)現(xiàn)策略。通常OOAD的開發(fā)過程是這樣的:a)項(xiàng)目分解為幾個(gè)模塊;b)使用UML進(jìn)行建模;c)USDP(統(tǒng)一軟件開發(fā)過程)是一個(gè)迭代、遞增(需求、分析、設(shè)計(jì)、實(shí)現(xiàn)、測試等)式開發(fā)。
OOP的主要特征:封裝、繼承、多態(tài)、抽象、關(guān)聯(lián)、聚合、組合。
下面談?wù)勎覍?duì)這些特征的理解:
(1)封裝:“合理隱藏,合理暴露”。具體來說就是合理隱藏?cái)?shù)據(jù)和實(shí)現(xiàn),提供公共方法供咱調(diào)用。
(2)繼承:發(fā)生在子類和父類之間,通常在這兩個(gè)類型之間存在“is a”的關(guān)系,如:香蕉“is a”水果,香蕉為子類,水果為父類。通過繼承可實(shí)現(xiàn)代碼重用且繼承也是多態(tài)的基礎(chǔ)。
(3)多態(tài):“同一種類型的變量調(diào)用同一個(gè)方法表現(xiàn)出不同特征或行為”。舉例來說:呼吸breath()這個(gè)動(dòng)作,人使用肺來完成,而魚則使用鰓來完成。
(4)抽象:抽象是一種將方法聲明和具體實(shí)現(xiàn)分離的一個(gè)過程。通過抽象,咱只需關(guān)注其本質(zhì)特征(具體能做什么)而忽略掉一個(gè)對(duì)象(或?qū)嶓w)具體細(xì)節(jié)。
(5)關(guān)聯(lián):關(guān)聯(lián)實(shí)質(zhì)上是對(duì)象之間交互時(shí)的一種引用方式,當(dāng)一個(gè)對(duì)象A通過另一個(gè)對(duì)象B的引用去調(diào)用B對(duì)象的方法操作或服務(wù)時(shí),A和B便產(chǎn)生了關(guān)聯(lián)。比如說:咱(person)使用手機(jī)(phone)來打電話(即咱調(diào)用了手機(jī)的一個(gè)功能--打電話dial()),person和phone之間就存在了關(guān)聯(lián)關(guān)系。
(6)聚合:聚合是關(guān)聯(lián)關(guān)系中的一種,一個(gè)對(duì)象A作為另外一個(gè)對(duì)象B的屬性Field而存在,在外部對(duì)象(如汽車Car)被產(chǎn)生時(shí),可有咱指定與其關(guān)聯(lián)的內(nèi)部對(duì)象(輪胎Wheel)。什么意思呢?說直白點(diǎn)吧,一輛汽車CarA的輪胎壞了咱可以重新?lián)Q上新的輪胎WheelA,而輪胎WheelA/WheelC也可以卸下來供別的汽車CarB使用。可以看出聚合中的關(guān)聯(lián)關(guān)系并沒有那么強(qiáng)烈。
(7)組合:組合是關(guān)聯(lián)關(guān)系中最為強(qiáng)烈的一種。當(dāng)一個(gè)對(duì)象A包含另外一個(gè)對(duì)象B時(shí),外部對(duì)象A負(fù)責(zé)管理內(nèi)部對(duì)象B的生命周期。本質(zhì)上:內(nèi)部對(duì)象B的創(chuàng)建由外部對(duì)象A自己控制,就拿電腦與顯示器來說吧,外部對(duì)象(電腦)不存在時(shí),內(nèi)部對(duì)象(顯示器)也不能存在,這個(gè)應(yīng)該很好理解了吧~
內(nèi)聚與耦合
內(nèi)聚:度量一個(gè)類獨(dú)立完成某項(xiàng)工作的能力。耦合:度量系統(tǒng)內(nèi)或系統(tǒng)之間依賴關(guān)系的復(fù)雜度。咱一般的設(shè)計(jì)原則是:“高內(nèi)聚,低耦合”,也就是咱要增加內(nèi)聚,減少耦合。
下面開始咱們的uml之旅。
域模型
域模型也被稱為設(shè)計(jì)模型,它包含兩部分組成:一是具體狀態(tài)和行為的域?qū)ο?;二是域?qū)ο笾g的關(guān)系,它包括:關(guān)聯(lián)(上面已經(jīng)介紹了)、依賴(a對(duì)象依賴B類中的方法,并且構(gòu)造B類的實(shí)例)、聚集(整體和部分的關(guān)系:如手是人的組成部分)、一般化(繼承關(guān)系)。
uml定義:統(tǒng)一建模語言(Unified Modeling Language),它是一種圖形化的語言,可以幫助我們?cè)贠OAD階段標(biāo)識(shí)元素(用例、類、對(duì)象等)、構(gòu)建模塊(功能劃分)、分析過程并可通過文檔(概要說明、詳細(xì)說明)來說明系統(tǒng)中的重要細(xì)節(jié)。
uml圖形的分類:包括靜態(tài)模型(static model)、動(dòng)態(tài)模型(dynamic model)。靜態(tài)建模目的是創(chuàng)建并記錄一個(gè)系統(tǒng)的靜態(tài)特征(如:類包含的屬性和方法、用例中的參與者和用例以及用例之間的關(guān)系、對(duì)象之間的關(guān)系等)。靜態(tài)建模包括:用例圖、類圖、對(duì)象圖、組件圖、部署圖;而動(dòng)態(tài)建模包括:時(shí)序圖(也稱順序圖)、協(xié)作圖、狀態(tài)圖、活動(dòng)圖。
靜態(tài)建模中的用例圖:它是用來展示系統(tǒng)的核心功能及其交互的用戶或系統(tǒng)等。
===================== 用例圖========================
1. 用例:系統(tǒng)為參與者提供的功能,一般取名為帶有動(dòng)作性的詞語。
2. 用例之間的關(guān)系 --> 虛線 :
a) 包含關(guān)系:大功能包含《include》子功能。
b) 擴(kuò)展關(guān)系:將基用例中一段【相對(duì)獨(dú)立并且可選】的動(dòng)作,用擴(kuò)展《extends》用例加以封裝。 --虛線反向
c) 泛化關(guān)系:一般和特殊(抽象類/接口+實(shí)現(xiàn)類/子類)的關(guān)系。實(shí)線三角形箭頭反向。
下面用一張圖來說明:
總結(jié)
今天只是開了個(gè)頭,講了一下OOAD、OOP的幾個(gè)特征以及uml建模中的分類(靜態(tài)、動(dòng)態(tài)建模),最后一個(gè)靜態(tài)建模中的用例圖來開始了咱們的uml建模之旅。接下來會(huì)繼續(xù)講解uml中的剩下的幾個(gè)常用uml建模。
聯(lián)系客服