




已閱讀5頁,還剩154頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1,面向?qū)ο蟮脑O(shè)計與技術(shù),楊文川 北京郵電大學(xué) 2007年2月,(OOD提高篇),2,第三部分 分析(Analysis),面向?qū)ο蟮脑O(shè)計與技術(shù),3,第六講 分析工作流,面向?qū)ο蟮脑O(shè)計與技術(shù),4,6.1分析工作流,分析開始于初始階段結(jié)尾,是細(xì)化階段的焦點。,需求,分析,設(shè)計,實現(xiàn),測試,初步迭代,I1 I2,In In+1,Im Im+1,初始,細(xì)化,構(gòu)造,移交,管理,配置,5,6.2 分析的目標(biāo),分析目標(biāo)是產(chǎn)生分析模型 該模型關(guān)注系統(tǒng)需要做什么,但把系統(tǒng)如何做的細(xì)節(jié)留給設(shè)計工作流。,6,與需求、設(shè)計的關(guān)系,分析工作與需求捕獲在很大程度上重疊。 實際上,這兩種活動常常相輔相成為了澄清和找出任何遺漏或歪曲的需求,常常需要在需求之上作一些分析。 分析和設(shè)計的邊界非常模糊,在一定程度上,個體分析師根據(jù)一些經(jīng)驗在他們認(rèn)為恰當(dāng)?shù)牡胤椒纸纭?一般認(rèn)為分析主要負(fù)責(zé)理清“作什么”,設(shè)計負(fù)責(zé)“如何作”。,7,6.3分析工作細(xì)節(jié)流,8,6.4分析制品元模型,分析主要制品:分析類和用例實現(xiàn),9,6.5 經(jīng)驗法則,中等系統(tǒng)的分析模型中大約有50-100個類。 捕獲大的場面。 總是使用業(yè)務(wù)語言。 僅包含建模問題域詞匯的類。 對盡可能多的利益相關(guān)人有用。 不作出實現(xiàn)的決定。 講述有關(guān)期望系統(tǒng)的故事。 關(guān)注類的關(guān)聯(lián)最小化耦合。 在存在自然抽象層次的地方使用繼承。 保持簡單,10,小結(jié),本講介紹分析工作流 分析模型捕獲期望系統(tǒng)的基本需求和特征,是戰(zhàn)略性的。 開始于初始階段的結(jié)尾開始,貫穿整個細(xì)化階段。 分析活動制品是分析類和用例實現(xiàn) 分析工作流包含構(gòu)架,用例,類和包的分析 注意分析模型的若干經(jīng)驗法則,保持簡單,11,12,第七講 類和對象,面向?qū)ο蟮脑O(shè)計與技術(shù),13,7.1 類,“共享相同屬性、操作、方法、關(guān)系或者行為的一組對象的描述符” RumbaughUML參考手冊 類是具有相同特征的一組對象的描述符 分類人類通常的思維方法 分類所依據(jù)的原則抽象 忽略事物的非本質(zhì)特征,只注意那些與當(dāng)前目標(biāo)有關(guān)的本質(zhì)特征,從而找出事物的共性,把具有共同性質(zhì)的事物劃分為一類,得出一個抽象的概念。,14,類的特點,抽象 封裝 多態(tài) 繼承,15,7.2 對象,“具有良好定義的,封裝了狀態(tài)和行為的邊界的具體實體,類的實例” RumbaughUML參考手冊 一般意義上的對象: 是現(xiàn)實世界中一個實際存在的事物、構(gòu)成世界的一個獨立單位 可以是有形的(如一輛汽車),也可是無形的(比如一項計劃)。 具有靜態(tài)特征:可以用某種數(shù)據(jù)來描述;動態(tài)特征:對象所表現(xiàn)的行為或具有的功能,16,對象的消息傳遞,17,7.3 類和對象,類和對象是“建模元素之間的聯(lián)系” ,定義為instantiate關(guān)系 Rumbaugh UML參考手冊,18,7.4UML類符號,名稱分欄采用CamelCase格式 屬性分欄可視性/多重性 操作分欄名稱/參數(shù)/返回值,19,例子,20,7.5UML對象符號,單獨的類名稱表明具有一個匿名對象或者那個類的實例 例如:Account 單獨的對象名稱標(biāo)識一個特定對象,但沒有標(biāo)識它是屬于哪個類 例如jimsAccount 對象名稱后接類名稱,中間以冒號分隔。是類的一個實例 例如jimsAccount:Account,21,例子,22,7.6可視性(UML語義),public: 可訪問該類的任何元素,可訪問該類帶有公共可視性的任何特征 private: 只有該類的操作才能訪問,該類帶有私有可視性的特征 protected : 只有該類及其子類的操作才能訪問,該類有保護(hù)可觀性特征 package : 可訪問與該類處在相同包中的或者是在嵌套子包中的元素,可訪問該類帶有包可視性的任何特征,23,7.7范圍,對象具有由它們的類所定義的屬性的副本,因此不同對象能夠具有不同屬性值。 類范圍特征為類的所有對象提供了一組全局特征。,24,類范圍和實例范圍的操作和屬性,25,7.8對象構(gòu)造和析構(gòu),類范圍屬性和操作的典型用法 構(gòu)造函數(shù)新對象初始化的特殊類范圍方法。 析構(gòu)函數(shù)當(dāng)銷毀對象時,起清理作用方法 以C+為例子: 構(gòu)造操作的名字與類相同,可以有多個 析構(gòu)操作在類名前加,只有一個,26,小結(jié),類定義了一組對象的特征(屬性、操作、方法、關(guān)系和行為)。對象是一個類的實例,是數(shù)據(jù)和函數(shù)的內(nèi)聚單元。 類有封裝、抽象、多態(tài),繼承等特性 對象和類名稱具有CamelCase格式。對象名稱以小寫字母打頭,類名稱以大寫字母打頭,對象名稱和類名稱之間以冒號隔開。 類有名稱,屬性,操作分欄,可視性和多重性。 實例范圍的屬性和操作運作在特定對象上,類范圍屬性和操作運作在對象的整個類上。 類的構(gòu)造函數(shù)在創(chuàng)建新對象時初始化對象,析構(gòu)函數(shù)在銷毀對象時,起清理作用,27,28,第八講 尋找分析類,面向?qū)ο蟮脑O(shè)計與技術(shù),29,8.1 分析用例,分析用例產(chǎn)生分析類和用例實現(xiàn),30,8.2 什么是分析類,分析類是這樣的類: 它代表問題域中的簡潔抽象,問題域是首先產(chǎn)生軟件系統(tǒng)需求的域。 使用清晰的和無歧義的方法映射到某個真實世界業(yè)務(wù)概念 注意 分析模型中的所有類都是分析類,而不是從設(shè)計考慮而產(chǎn)生的類。 當(dāng)進(jìn)行詳細(xì)設(shè)計時,可能發(fā)現(xiàn)一個分析類被精化為一個或多個設(shè)計類。,31,8.3 分析類剖析,分析類展示“高級層次”的屬性集合,為設(shè)計類捕獲候選屬性, 避免實現(xiàn)細(xì)節(jié)。 分析類的最小形式由以下部分組成: 名稱這是強(qiáng)制的。 屬性只有候選屬性的重要子集在此時建模 操作僅是類職責(zé)的高級層次的陳述 可視性通常不顯示。 構(gòu)造型增強(qiáng)模型時才顯示。 標(biāo)記值增強(qiáng)模型時才顯示。,32,例子,分析類的思想是:盡力捕獲抽象的本質(zhì),忽略實現(xiàn)細(xì)節(jié),33,8.4產(chǎn)生良好分析類的方法,名稱反映目的。 是建模問題域的一個特定元素的簡潔的抽象。 清晰地映射到問題域中的可識別的特征。 具有小的、良好定義的職責(zé)集合。 高內(nèi)聚。 低耦合。,34,8.5分析類經(jīng)驗法則,每個類大約3-5個職責(zé)類應(yīng)該盡可能保持簡單 不存在獨立的類類相互協(xié)作以使用戶受益 當(dāng)心很多非常小的類整合成更大的類。 當(dāng)心少數(shù)非常龐大的類分解成小的類。 當(dāng)心“偽類”偽類其實是一般的過程函數(shù) 當(dāng)心萬能類分解成內(nèi)聚的子集 避免深度繼承樹繼承僅用在存在直接產(chǎn)生于問題域的、清晰的、顯而易見的繼承層次的場合。,35,8.6尋找分析類,“不存在找出恰當(dāng)分析類的簡單算法,如果這樣的算法存在,那么意味著存在沒有錯誤的方法來設(shè)計OO軟件”。 Meyer,Object Oriented Software Construction 我們將采用導(dǎo)致良好答案的已嘗試和已測試的技術(shù),包括分析文本和采訪用戶領(lǐng)域?qū)<?36,8.6.1使用名詞/動詞分析,名詞/動詞分析是分析文本嘗試找出類、屬性和職責(zé)的的方法?;旧?,文本中名詞和名詞短語暗示類或類的屬性,動詞和動詞短語暗示職責(zé)或者類的操作。 分析方法步驟: 盡可能多地收集相關(guān)信息。 在收集文檔之后,簡單分析其中的名詞、動詞 把詞語加入到項目詞匯表中,澄清不理解的術(shù)語 把屬性和職責(zé)分配給類。 產(chǎn)生初步類模型,通過進(jìn)一步分析來精化它。,37,文檔來源,合適的信息來源是: 補充需求規(guī)格說明(如果有)。 用例。 項目詞匯表。 任何其他信息源(構(gòu)架、遠(yuǎn)景文檔等)。,38,8.6.2使用CRC分析尋找類,CRC(Class Responsibility Cooperate) 類 職責(zé) 協(xié)作方,39,便簽,使用最有力的分析工具便箋: OO分析師、利益相關(guān)人和領(lǐng)域?qū)<沂占畔?把所有的想法記錄下來而不爭論 嘗試識別可能一起工作的類 OO分析師和領(lǐng)域?qū)<曳治鲂畔?特定便箋需要成為類 其他便箋可成為類的屬性。 精化類,40,8.6.3其他方法尋找類,物理客體 文檔 外部世界已知的接口 概念實體,41,8.7創(chuàng)建初步分析模型,將分析結(jié)果整合成單一UML模型 做法是: 比較所有的三種信息來源 整合出分析類、屬性和職責(zé),并輸入CASE工具。 協(xié)作方代表類間的關(guān)系 按照標(biāo)準(zhǔn)命名約定改進(jìn)類、屬性和職責(zé)命名。 輸出一組分析類和初步分析模型,42,小結(jié),在本章描述了什么是分析類 UP活動“分析用例”輸出分析類和用例實現(xiàn)。 分析類表示問題域中簡潔、良好定義的抽象,問題域是產(chǎn)生軟件系統(tǒng)需求的域。 分析類應(yīng)該以清晰的、無歧義的方式映射到真實世界業(yè)務(wù)概念。 分析類包括一組高級候選屬性和一組高級操作。 怎樣產(chǎn)生好的分析類以及如何避免產(chǎn)生壞的分析類 如何使用名詞/動詞分析、CRC腦力風(fēng)暴以及檢查分析類的其他來源來找出分析類。 如何構(gòu)建初步分析模型。,43,44,第九講 關(guān)系,面向?qū)ο蟮脑O(shè)計與技術(shù),45,9.1關(guān)系,關(guān)系是建模元素之間的語義(有意義)聯(lián)系,是UML把物件聯(lián)系到一起的方法。 關(guān)系包括:鏈接、關(guān)聯(lián)、泛化和繼承 我們先講述鏈接和關(guān)聯(lián): 對象間的聯(lián)系被稱為鏈接 類間的聯(lián)系被稱為關(guān)聯(lián) 對象間鏈接實際上是它們類間關(guān)聯(lián)的實例,46,9.2鏈接,鏈接是兩個對象之間的語義聯(lián)系,它允許消息從一個對象發(fā)送到另一個對象。 OO執(zhí)行系統(tǒng)包含很多來來往往的對象和連接這些對象的鏈接。 一旦接收到消息,對象將調(diào)用相應(yīng)的方法。 鏈接包括單向鏈接(箭頭)和雙向鏈接(直線)。 不同的OO語言以不同的方法實現(xiàn)鏈接,對象圖及路徑,48,9.3關(guān)聯(lián),關(guān)聯(lián)是類間的關(guān)系,鏈接依賴于關(guān)聯(lián) 如果對象間存在鏈接,其類間必定存在關(guān)聯(lián) 可用instantiate構(gòu)造型化依賴,49,9.3.1關(guān)聯(lián)語法,關(guān)聯(lián)可以具有: 關(guān)聯(lián)名稱。 角色名稱。 多重性。 導(dǎo)航性。,例子,51,9.4.2多重性,多重性約束在任意時刻涉及特定關(guān)系的類對象數(shù)目 多重約束在模型中編碼關(guān)鍵業(yè)務(wù)規(guī)則。 這些規(guī)則被“深埋”在模型的細(xì)節(jié)之中。稱做“平凡化(trivialization)”。 多重性被說明為用逗號分隔的區(qū)間,每個區(qū)間具有以下形式: minimummaximum,52,例子,53,自反關(guān)聯(lián),表示該類的對象具有到該類的其他對象的鏈接,54,9.4.3層次和網(wǎng)絡(luò),層次具有一個根對象,其他節(jié)點的直接上方恰有一個對象 網(wǎng)絡(luò)中不存在根對象,節(jié)點間沒有優(yōu)先關(guān)系,形成了復(fù)雜的節(jié)點網(wǎng)絡(luò),55,例子,56,9.4.4導(dǎo)航,導(dǎo)航性表明可從源類的任何對象到目標(biāo)類的一個或多個對象(根據(jù)多重性確定的)遍歷。 導(dǎo)航性的意義是“消息僅能夠在箭頭的方向上傳遞”。 使用導(dǎo)航性是最小化類間耦合一種良好做法。 注意: 即使關(guān)系在特定方向上不能導(dǎo)航,仍可能在該方向上遍歷關(guān)系。然而,遍歷的計算成本可能非常高。,57,例子,導(dǎo)航性暗示源對象承載了到目標(biāo)對象的引用。源對象可以使用該對象引用發(fā)送消息到目標(biāo)對象。,58,9.4.5關(guān)聯(lián)和屬性,在類關(guān)聯(lián)和類屬性之間存在緊密聯(lián)系。 源類和目標(biāo)類之間的關(guān)聯(lián)意味著源類的對象能夠承載到目標(biāo)類對象的對象引用。 等價于源類具有目標(biāo)類的一個偽屬性。源類的對象能夠使用這個偽屬性引用目標(biāo)類的對象,59,例子,上述模型產(chǎn)生的Java代碼: public class House private Address address; ,60,9.4.6關(guān)聯(lián)類,當(dāng)類間具有多對多關(guān)系時,可能存在一些屬性不容易地放入任何一個類中 UML允許你使用關(guān)聯(lián)類來建模這種情況 關(guān)聯(lián)類既是關(guān)聯(lián)又是類, 關(guān)聯(lián)類能夠具有屬性、操作和其他關(guān)聯(lián)。 關(guān)聯(lián)類的實例是具有屬性和操作的鏈接。 當(dāng)每個鏈接具有唯一標(biāo)識時,才使用關(guān)聯(lián)類,61,例子,62,9.4.7受限關(guān)聯(lián),受限關(guān)聯(lián)通過指定目標(biāo)集合的唯一對象(或一組對象)把多對多關(guān)聯(lián)削減為多對一關(guān)聯(lián)。 它是常用的建模元素,演示了關(guān)系如何從集合中查找或?qū)Ш教囟▽ο蟆?受限關(guān)聯(lián)是使用唯一鍵從整個集合中選定特殊對象的方法。 限定符通常提及目標(biāo)類的屬性,以及可理解的一些其他表達(dá)式。,63,例子,64,9.5什么是依賴,“依賴是兩個元素之間的關(guān)系,對一個元素(提供者)的改變可能影響或提供信息給其他元素(客戶)” RumbaughUML參考手冊 依賴發(fā)生在類間,包和包,對象和類之間,也可以出現(xiàn)在操作和類之間。 四種基本依賴類型。 Usage(使用) Abstraction(抽象) Permission(授權(quán)) Binding(綁定),65,9.5.1使用依賴,use依賴是類間最普遍的依賴,下列任何一種情況產(chǎn)生這個依賴。 (1)類A的操作需要類B的參數(shù)。 (2)類A的操作返回類B的值。 (3)類A的操作在實現(xiàn)中使用類B的對象,但不是作為屬性來使用的。,66,其他類型使用依賴,call這是操作之間的依賴,客戶操作調(diào)用提供者操作。 parameter這是操作和類之間的依賴。提供者是客戶操作上的參數(shù)或返回值。 send客戶把提供者(它必須是信號)發(fā)送到非指定的目標(biāo)。用于在客戶和目標(biāo)之間傳輸數(shù)據(jù)。 instantiate客戶是提供者的實例。,67,9.5.2抽象依賴,抽象依賴建模依賴于在不同抽象層次上的物件。 trace依賴演示元素間的一般聯(lián)系,其中提供者和客戶處在開發(fā)中的不同位置。 refine是相同模型中元素之間的依賴,用于優(yōu)化性能。 derive顯示地表示一個物件能夠以某種方式從其他物件派生而來。,68,例子,69,9.5.3授權(quán)依賴,授權(quán)依賴表達(dá)一個物件訪問另一個物件的能力。 access是包間依賴。包用在UML中來分組物件。 import是與access概念相似的依賴,但提供者的命名空間被整合到客戶的命名空間中。 friend允許在非常緊密相關(guān)的兩個類間,客戶類訪問提供者私有成員。,70,小結(jié),在本章介紹了關(guān)系,關(guān)系是物件之間的語義聯(lián)系,包括以下內(nèi)容。 對象之間的聯(lián)系被稱為鏈接。對象圖展現(xiàn)特定時刻的對象以及它們之間的鏈接。 路徑是連接UML建模元素的連線: 關(guān)聯(lián)是類間的語義聯(lián)系,導(dǎo)航性表明能夠在箭頭的方向上遍歷關(guān)系,多重性表明在任意時刻關(guān)系所能夠涉及的對象數(shù)目。 關(guān)聯(lián)類既是關(guān)聯(lián)又是類,受限關(guān)聯(lián)使用限定符從目標(biāo)集中選擇唯一對象 依賴是兩個元素之間的關(guān)系,包括使用依賴,抽象依賴,授權(quán)依賴,71,72,第十講 繼承和多態(tài),面向?qū)ο蟮脑O(shè)計與技術(shù),73,10.1 繼承和多態(tài),繼承inherit 子類繼承父類的特征 多態(tài)polymorph 子類對同一動作的不同反應(yīng),74,10.2泛化,泛化是一般物件和特殊物件之間的關(guān)系 泛化表示兩個元素之間最高層次的依賴,適用于所有的類元以及建模元素,如關(guān)聯(lián)、狀態(tài)、事件和協(xié)作。 分析類的詳細(xì)屬性和操作時,兩種方法獲得類間的層次通過特化過程或者泛化過程。 OO分析傾向于同時使用特化和泛化,盡管如此,以我們的經(jīng)驗,鍛煉我們自身在分析過程中盡早地知道更加一般的情況是明智的。,例子,特化: 在分析中先識別一般概念Shape,然后根據(jù)Shape的特殊類型特化它。 泛化:先在分析中識別特殊概念Square、Circle和Triangle,然后注意到它們都具有某些公共特征,把這些公共特征抽取出來成為一般的超類。,76,10.3類繼承,當(dāng)類組織成泛化層次后,類間隱式地具有繼承關(guān)系,子類繼承了其超類的所有特征。 這些繼承特征包括: 屬性 操作 關(guān)系 約束 子類同樣能夠添加新特征以及覆蓋超類的操作。,77,10.3.1覆蓋,為覆蓋超類操作,子類必須提供與想要重載超類操作具有完全相同簽名的操作,即具有相同的操作名稱、返回類型以及按照順序列出的所有參數(shù)類型。,78,例子,79,10.3.2抽象操作和類,在子類中延遲操作實現(xiàn)。 可以說明缺乏實現(xiàn)的操作,使它成為抽象操作。 被稱做抽象類,不能實例化這樣的類 使用抽象類和抽象操作有兩大優(yōu)點。 在抽象超類中定義一組抽象操作,具體子類必須實現(xiàn)。 可替換性原則,為操縱父類而書寫的代碼可被子類替代。,80,例子,81,10.3.3抽象層次,泛化層次定義了從頂部最一般的到底部最特殊的一組抽象層次。 應(yīng)該總是盡力維護(hù)泛化層次中每個層次上統(tǒng)一的抽象層次。,82,10.4多態(tài),多態(tài)的意思是同一操作具有多種實現(xiàn)。 多態(tài)允許你設(shè)計能夠更加容易適應(yīng)變化的簡單系統(tǒng),因為它允許你以相同的方式對待不同的對象。 實際上使多態(tài)成為OO的一個基本方面是它允許你給不同類的對象發(fā)送相同消息,對象能夠作出正確的響應(yīng)。 封裝、繼承和多態(tài)是OO的“三根支柱”。,83,例子,84,小結(jié),本講描述類繼承和多態(tài) 泛化是一般物件和特殊物件之間的關(guān)系 類繼承發(fā)生在存在泛化關(guān)系的類之間。 子類可以添加新特征,覆蓋已繼承的操作: 多態(tài)就是“多種形態(tài)”。它允許你使用抽象類來設(shè)計系統(tǒng),然后在運行時替換成具體的子類,使得系統(tǒng)非常靈活和容易擴(kuò)展。,85,86,第十一講 分析包,面向?qū)ο蟮脑O(shè)計與技術(shù),87,11.1什么是包,包是把包元素和圖組織到組中的通用機(jī)制。每個包具有它自身的名字空間,它用于: 分組語義上相關(guān)的元素。 定義模型中“語義邊界”。 提供配置管理單元。 在設(shè)計中,提供并行工作的單元。 提供封裝的名字空間,其中所有名稱必須唯一。,88,11.2分析包,UML包的語法非常直接,包圖標(biāo)是文件夾。 分析包可以包含: 用例。 分析類。 用例實現(xiàn)。,89,例子,90,11.3包依賴,包通過依賴彼此相關(guān)。 包定義了封裝的名字空間。它的真正意義是包創(chuàng)建了邊界,其中所有元素名稱必須唯一。 同時,它也意味著,一個名字空間中的元素引用另一個名字空間的元素,必須說明所需的元素名稱以及通過嵌套名字空間導(dǎo)航到可以找到所需元素的名字空間的方法。這就是元素的路徑名。,四種不同類型包依賴的語義,92,11.4傳遞性,傳遞性是用于關(guān)系的術(shù)語,這意味著,如果物件A和物件B間存在關(guān)系,物件B和物件C間存在關(guān)系,那么物件只和物件C間隱式地存在關(guān)系。 注意 access包關(guān)系與import包關(guān)系沒有傳遞性,這允許你主動管理和控制模型中的耦合和內(nèi)聚,不能訪問或?qū)肴魏螙|西,除非顯式地訪問和導(dǎo)入。,93,例子,包A中的元素可以看到包B中的元素。 包B中的元素可以看到包C中的元素。 包A中的元素不能看到包C中的元素。,94,11.5嵌套包,包可以在任何深度被嵌套到另一個包中。 嵌套包能夠看見它的外層包的所有公共元素。外層包不能看見嵌套包的任何元素。 注意:如果存在太多嵌套層次,模型變得難以理解和定位。,95,兩種嵌套表示方法,96,11.6包泛化,在包泛化中,特殊子包繼承了父包的所有公共元素和保護(hù)元素。子包可以添加新元素以及通過提供相同名稱實現(xiàn)覆蓋父包中的元素。 就像類繼承一樣,包繼承必須適用可替換性原則。,97,例子,98,11.7包構(gòu)造型,UML為特定目的提供一些標(biāo)準(zhǔn)構(gòu)造型以裁剪包的語義,如下表所示,99,11.8架構(gòu)分析,在構(gòu)架分析中,所有分析類被組織成一組內(nèi)聚的分析包,進(jìn)一步組織成分區(qū)和層。 構(gòu)架分析的一個目的是盡力最小化系統(tǒng)中耦合的數(shù)量。有三種方法可以做到: 最小化分析包間的依賴。 最小化每個分析包中的公共元素和保護(hù)元素的數(shù)目。 最大化每個分析包中的私有元素的數(shù)目。,100,削減耦合,削減耦合是構(gòu)架分析中最重要的考慮之一,因為表示出高度耦合的系統(tǒng)是復(fù)雜的和難以構(gòu)造和維護(hù)的。你應(yīng)該總是盡力保持必須的最小耦合。 隨著模型深入到設(shè)計模型時,層的數(shù)目將增加。然而,在分析中,你可以只把包組織成為特定應(yīng)用和一般應(yīng)用兩層。特定應(yīng)用層包含對特定應(yīng)用來說完全特殊的功能。,101,11.8.1尋找分析包,通過識別具有很強(qiáng)語義聯(lián)系的建模元素的分組找出分析包。 分析包必須反映元素真實的語義分組,靜態(tài)模型是包的最有用來源,包括: 類圖中類的內(nèi)聚集群。 繼承層次。,102,良好包結(jié)構(gòu)的關(guān)鍵,包內(nèi)高內(nèi)聚,包間低耦合。 包應(yīng)該包含一組緊密相關(guān)的類。 類通過繼承最緊密相關(guān),組合次之,然后是聚合,最后是依賴。 應(yīng)該最小化包的公共和保護(hù)成員以及包間的依賴,做法是: 在包間移動類。 添加包。 刪除包。,103,11.8.2包循環(huán)依賴,盡量避免分析包模型中的循環(huán)依賴。 如果包A以某種方式依賴包B,并且包B以某種方式依賴包A,就存在非常強(qiáng)有力的證據(jù)來合并這兩個包,這是消除循環(huán)依賴非常有效的方法。 但是經(jīng)常起作用的、更好的方法是努力分解公共元素成為第三個包已重新計算依賴關(guān)系以消除循環(huán)依賴。,104,例子,確定具有相互依賴的類通常應(yīng)該處在相同包中,105,小結(jié),本講介紹分析包,包是UML的分組機(jī)制,服務(wù)于很多目標(biāo),提供了封裝的名字空間。 每個建模元素恰屬于一個包,分析包可以包含用例,分析類,用例實現(xiàn)。 包元素可以具有可視性,用于控制包間耦合。 包間的依賴關(guān)系表示客戶包以某種方式依賴提供者包的公共元素。 包泛化與類泛化非常相似。 構(gòu)架分析是把分析類的內(nèi)聚集合分區(qū)為分析包。 首先要尋找分析包,精化包模型以最大化包內(nèi)的內(nèi)聚和最小化包間的依賴,106,107,第十二講 用例實現(xiàn),面向?qū)ο蟮脑O(shè)計與技術(shù),108,12.1 用例實現(xiàn),先前幾章中學(xué)習(xí)了如何產(chǎn)生“分析用例”活動的分析類制品,這個活動產(chǎn)生的第二個制品是用例實現(xiàn)。 分析類建模系統(tǒng)的靜態(tài)結(jié)構(gòu),用例實現(xiàn)表示分析類的實例如何交互以實現(xiàn)系統(tǒng)的功能。這是系統(tǒng)的動態(tài)視圖部分。,109,12.2 UP活動:分析用例,110,12.3什么是用例實現(xiàn),找出分析類之后,分析的關(guān)鍵是找出用例實現(xiàn)。 用例實現(xiàn)由一組類所組成,這些類實現(xiàn)了用例中所說明的行為。 需要創(chuàng)建用例實現(xiàn)以演示這些類和這些類的對象是如何交互以實現(xiàn)由系統(tǒng)所說明的行為。 這樣,你把用例(它是功能性需求的規(guī)格說明)轉(zhuǎn)換成類圖和交互圖(它是系統(tǒng)高級層次的規(guī)格說明)。,111,例子,盡管UML提供了用于用例實現(xiàn)的記號,但極少被顯式地建模。設(shè)計者僅添加恰當(dāng)?shù)脑氐紺ASE工具中確保用例實現(xiàn)隱式出現(xiàn)。,112,12.4用例實現(xiàn)元素,用例實現(xiàn)包括: 分析類圖 表示交互以實現(xiàn)用例的分析類 交互圖 表示實現(xiàn)用例的特定實例之間的協(xié)作和交互,是運行系統(tǒng)的“快照” 特殊需求 用例實現(xiàn)過程可以為用例揭示新的特殊需求,它們必須被捕獲 用例精化 在實現(xiàn)過程可以發(fā)現(xiàn)新的信息這意味著必須更新原始用例,113,12.5交互圖,UML交互圖建模實現(xiàn)用例或者部分實現(xiàn)用例的對象間的協(xié)作和交互,包括協(xié)作圖和順序圖。 協(xié)作圖強(qiáng)調(diào)對象間的結(jié)構(gòu)關(guān)系,在分析中非常有用,尤其對于創(chuàng)建對象間協(xié)作的草圖。 順序圖強(qiáng)調(diào)對象發(fā)送消息的時序。用戶能夠比協(xié)作圖更好地理解順序圖,因為它們更加容易閱讀。 協(xié)作圖和順序圖是相同底層UML模型的兩種不同視圖,有兩種形式。 描述符形式這描述了類元實例在系統(tǒng)中所扮演的角色之間的協(xié)作和交互。 實例形式這描述了實際類元實例之間的協(xié)作和交互。,114,12.6協(xié)作和交互,協(xié)作描述實例間關(guān)系以及在那些關(guān)系中實例所扮演的角色的靜態(tài)集合。 交互描述實例間的動態(tài)交互。它描述實例間傳遞的消息。在實例能夠交互、傳遞消息之前,它們必須具有關(guān)系因此,交互僅能出現(xiàn)在協(xié)作的語境中。 角色是事物表現(xiàn)或被使用的方式。除了實例和鏈接,交互圖可以具有類元角色(它定義類元實例被使用的方式)和關(guān)聯(lián)角色(它定義關(guān)聯(lián)(鏈接)實例被使用的方式)。,115,12.7協(xié)作圖,協(xié)作圖關(guān)注對象交互的結(jié)構(gòu)方面,有兩種形式: 描述符形式: 通過說明實例所扮演的角色(類元角色),提供協(xié)作非常普遍的視角。同時,它也說明這些角色之間的關(guān)系。 實例形式: 實例形式協(xié)作圖要具體得多。它表示實際類元實例(通常是對象)以及這些實例之間的鏈接。實例形式協(xié)作圖是最有用和最廣泛使用的。,116,12.7.1描述符形式的協(xié)作圖,描述符形式協(xié)作圖表示由類元的末指定實例(通常是類)所扮演的角色和末指定實例的關(guān)聯(lián)(鏈接)所扮演的角色。 它不顯示特定實例或鏈接。如果你想要以非常通用的方式建模協(xié)作,它非常有用。,117,例子,斜線必須總是前綴于角色名稱之前,冒號必須總是前綴子類元名稱之前。角色名稱和類元名稱都是可選的,但是其中之一必須出現(xiàn)。,118,12.7.2實例形式的協(xié)作圖,實例形式的協(xié)作圖表示類元實例之間的協(xié)作。這些實例由鏈接聯(lián)系起來。 實例形式協(xié)作圖顯示在特定時刻協(xié)作的特定實例。它們就像OO運行系統(tǒng)的快照,119,例子,斜線總是前綴子類元角色名稱之前,冒號總是前綴子類元名稱之前。這個名稱的所有部分都是可選的。但其中之一必須出現(xiàn)。,12.7.3對象交互,為了有效地使用描述符形式或者實例形式的協(xié)作圖作為用例實現(xiàn)的組成部分,需要顯示特別是系統(tǒng)中的對象是如何實現(xiàn)用例所說明的行為。 通過給協(xié)作圖添加交互可以做到。,例子,122,12.7.4多重對象,多重對象代表一組對象,它提供在協(xié)作圖中表示對象集合的方法。發(fā)送到多重對象的消息被傳遞給整個集合,而不是任何個體對象。 在分析中假設(shè)多重對象能發(fā)送以下消息: find(uniqueIdentifier)給定參數(shù)唯一標(biāo)識符,返回特定對象。 includes(anObject)如果多重對象包含對象anobject,返回true。 count()返回多重對象中對象的數(shù)目。,例子,124,12.7.5迭代,通過在順序編號前綴迭代符(*)和一個可選的迭代表達(dá)式可以表示迭代 下面是一些通用表達(dá)式。,例子,126,12.7.6分支和自委托,分支是能夠在消息前簡單地添加條件建模分支,當(dāng)條件計算為真時才發(fā)送消息 自委托發(fā)生在對象調(diào)用自身時。 在協(xié)作圖中清晰地表示分支非常困難,條件似乎擴(kuò)散到整幅圖并且圖很快就會變得復(fù)雜。,例子,128,12.7.7并發(fā)性活動對象,用協(xié)作圖容易建模并發(fā)?;驹瓌t是每個控制線程或并發(fā)送程被建模為活動對象。對象封裝了它本身的控制線程。 活動對象并發(fā)執(zhí)行,每個活動對象同時具有控制焦點?;顒訉ο罄L制出來就像通常的對象,但是帶有粗邊框。如果需要,特性關(guān)鍵字active也可以被包含到對象方框中。,例子,130,12.7.8對象狀態(tài),“對象生命期中的條件和狀況,在此期間,它滿足某種條件、執(zhí)行某種活動或者等待某種事件”。 RumbaughUML參考手冊 狀態(tài)是一個顯著的對象條件,依賴于對象屬性值、對象到其他對象的鏈接或正在執(zhí)行的活動。 消息常常引起對象經(jīng)歷從一個狀態(tài)到另一個狀態(tài)的遷移。,131,例子,通過使用實例形式協(xié)作圖表示對象為了響應(yīng)消息如何在狀態(tài)間經(jīng)歷遷移。對象狀態(tài)可以顯示在對象名稱后,用方括號括起來。,132,12.8順序圖,順序圖表示以時間序列安排的對象交互。它與協(xié)作圖是同構(gòu)的,它包括相同的元素,加上兩個額外元素對象生命線和控制焦點。 在協(xié)作圖中,順序編號的嵌套表示控制焦點,但在順序圖中,我們能夠更加清晰更加顯式地顯示控制流,控制流也被稱做激活。 順序圖的時間順序是從頂部到底部的,從左到右是實例。,133,例子,134,12.8.1迭代,通過把重復(fù)的一組消息封套在方框中并且把迭代表達(dá)式放置在該方框下方,可以顯示順序圖上的迭代,135,12.8.2分支和自委托,順序圖表現(xiàn)分支比協(xié)作圖更加清晰,12.8.3并發(fā)性活動對象,137,12.8.4對象狀態(tài)和約束,使用順序圖能夠顯示對象如何隨著時間推移改變狀態(tài),也可標(biāo)記時間軸上的特定點,以表達(dá)定時約束。,138,小結(jié),本講介紹用例實現(xiàn),這是分析過程的基礎(chǔ)部分。 用例實現(xiàn)顯示分析類的實例是如何交互以實現(xiàn)由用例所說明的功能需求。 交互圖可以有描述符形式或?qū)嵗问健?有兩種同構(gòu)的交互圖:協(xié)作圖,順序圖。 順序圖強(qiáng)調(diào)實例間的交互。 交互圖描述實例間的交互 如何描述迭代,分支,并發(fā) 在對象生命線上的恰當(dāng)位置使用狀態(tài)圖標(biāo)表示對象狀態(tài)和約束,139,140,第十三講 活動圖,面向?qū)ο蟮脑O(shè)計與技術(shù),141,13.1什么是活動圖,活動圖是“OO流程圖”。它們使你能把過程建模為活動以及在活動之間遷移的集合。 活動圖實際上是狀態(tài)圖的特殊形式,其中每個狀態(tài)具有入口動作,它說明當(dāng)進(jìn)入該狀態(tài)時發(fā)生的某個過程或者函數(shù)。 活動圖能夠附加到任何建模元素以建模那個元素的行為?;顒訄D典型被附加到: 用例。 類。 接口。 組件。 節(jié)點。 協(xié)作。 操作和方法。,142,13.2 活動圖,使用活動圖建模業(yè)務(wù)過程和工作流非常有利。 好的活動圖的本質(zhì)是關(guān)注讀者與系統(tǒng)動態(tài)行為的一個特定方面的通信。同樣,它必須處在正確的抽象層次與目標(biāo)觀眾通信。 活動圖必須包含通信所需的最少信息。使用對象狀態(tài)和對象流等來修飾活動圖。,143,13.3動作狀態(tài),活動圖包括動作狀態(tài)和子活動狀態(tài)。 動作狀態(tài)是活動圖最小粒度的構(gòu)造塊,并且表示動作。 動作狀態(tài)表示為帶有圓端的方框。動作表達(dá)式表示該狀態(tài)的入口動作。 動作是: 原子的不能被分解成更小的部分。 不可中斷的一旦開始這件工作,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 皮革制品業(yè)原材料采購與供應(yīng)鏈管理考核試卷
- 紙制品行業(yè)生產(chǎn)設(shè)備升級與技術(shù)改造考核試卷
- 深靜脈血栓個案護(hù)理規(guī)范
- 影視劇組餐飲安全衛(wèi)生監(jiān)督合同補充條款
- 婚前著作權(quán)侵權(quán)糾紛解決及賠償協(xié)議
- 頂級國際論壇同聲傳譯人才選拔與培養(yǎng)協(xié)議
- 工業(yè)級3D打印設(shè)備研發(fā)成果轉(zhuǎn)化與技術(shù)支持服務(wù)合同
- 創(chuàng)業(yè)指導(dǎo)與職業(yè)規(guī)劃師合作合同
- 智能硬件集成社交電商項目合伙人合作協(xié)議
- 子女教育項目投資與融資合作協(xié)議
- 股權(quán)終止合作協(xié)議書
- 入團(tuán)考試試題及答案大學(xué)
- 2025年北京高考語文三輪復(fù)習(xí)之微寫作
- 阿片類藥物不良反應(yīng)和處置
- 貴港離婚協(xié)議書模板
- 2025年公安機(jī)關(guān)人民警察基本級執(zhí)法資格備考題庫
- 2025保密在線教育培訓(xùn)題庫(含答案)
- 2.1 充分發(fā)揮市場在資源配置中的決定性作用 課件-高中政治統(tǒng)編版必修二經(jīng)濟(jì)與社會
- 2024年河南鄭州航空港投資集團(tuán)招聘真題
- 2024年寶應(yīng)縣公安局招聘警務(wù)輔助人員真題
- 2025至2030中國數(shù)據(jù)標(biāo)注行業(yè)創(chuàng)新現(xiàn)狀及投融資風(fēng)險研究報告
評論
0/150
提交評論