




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第三部分面向對象的軟件開發方法第8章面向對象分析8.1什么是面向對象分析面向對象分析(Object-OrientedAnalysis,OOA)是軟件生命周期的一個階段,具有一般分析方法所共同具有的內容、目標及策略。然而,OOA強調運用面向對象方法來對問題域和系統責任進行分析與理解,定義描述問題域和系統責任所需要的對象,定義對象的屬性、操作以及對象之間的關系,目標是建立一個符合問題域、滿足用戶功能需求的OOA模型。8.1什么是面向對象分析金融業務個人儲蓄國債發行貸款業務….人事管理……信息備份……系統責任問題域問題域(problemdomain):被開發系統的應用領域,即在現實世界中由這個系統進行處理的業務范圍。系統責任(systemresponsibilities):所開發的系統應該具備的職能。8.1什么是面向對象分析8.1什么是面向對象分析8.2建立基本模型——類圖類圖描述了系統中各類對象以及它們之間的各種關系。一張類圖應該注重表達系統靜態結構的一個方面,這意味著,若系統較為復雜,可能要繪制多張類圖。8.2.1對象與類
概念與表示法
對象是具有明確語義邊界并封裝了狀態和行為的實體,由一組屬性和作用在這組屬性上的一組操作構成,是構成系統的一個基本單位。
類是對一組具有相同屬性和操作的一組對象的抽象描述。——解釋:一個類的所有對象具有相同的屬性,是指所有對象的屬性的個數、名稱、數據類型都相同,各個對象的屬性值則可以互不相同,并且隨著程序的執行而變化。至于操作,對于一個類的所有對象都是一樣的,即所有的對象共同使用它們的類定義中給出的操作。
8.2.1對象與類用一個由水平線劃分成三個分欄的實線矩形表示類。在最上面的那個分欄放類名,中間的分欄放屬性列表,最下面的分欄放操作列表,每個屬性和操作都各占一行對象名:類名類名屬性欄操作欄8.2.1對象與類識別對象與類9.2.1.1在使用用況圖完成捕獲與描述需求后,已經對問題域和系統責任進行了分析,把用戶的的需求落實到了各個用況之中。
由于用況模型僅描述了系統內外的交互情況,從其中識別出來的對象與類肯定是不夠全面的。在識別對象與類時,問題域和系統責任仍是工作的基礎。因為二者從不同的角度告訴分析員應該設立哪些對象。
1、研究問題域考慮問題域,側重于客觀存在的事物與系統中對象的映射。可以啟發分析員發現對象的因素包括:人員、組織機構、物品、設備、事件(如索賠、上訪、交易)、表格、日志、報告和結構等。其中的結構可能是多種多樣的,例如,在概念類別上,汽車之上有車輛,之下可細分為客車和轎車,左右有摩托車和拖拉機,之內有發動機。它還可作成車隊的一個成分。8.2.1對象與類2.考慮系統邊界1)
把一些人員和設備看作問題域范疇以內的事物,系統中的對象是對它們的抽象描述。側重于以系統中的對象模擬現實中的人和設備。2)
對系統邊界之外與系統進行交互的參與者,系統中需要設立相應的對象處理系統與這些實際的人和設備的交互,側重于以系統中的對象處理現實中的人和設備與系統的交互。3)在系統中設立一個對象,處理與外系統的接口。
人員設備外系統從不同的角度考慮人員和設備8.2.1對象與類3.考慮系統責任對照系統責任所要求的每一項功能,查看是否可以由現有的對象完成這些功能。如果發現某些功能在現有的任何對象中都不能提供,則可啟發我們發現問題域中某些遺漏的對象。
如果已經建立了用況模型,考慮執行下列的附加步驟:
■
使用用況產生場景。 ■
使用場景尋找已錯過的類。8.2.1對象與類審查與篩選(1)舍棄無用的類通過屬性判斷:是否通過屬性記錄了某些有用的信息*?通過操作判斷:是否通過操作提供了某些有用的功能*?二者都不是——無用
通常,類應該具有多個屬性和操作。也存在無屬性而僅有操作的類,或無操作而僅有屬性的類的情況。8.2.1對象與類(2)與實現條件有關的類,推遲到OOD考慮
系統責任所要求的某些功能—例如系統安裝、配置、信息備份、瀏覽——可能無法從問題域中找到相應的對象來提供這些功能,應該在設計階段考慮專門為它們增加一些類,既把它們推遲到設計階段考慮。系統責任要求的某些功能可能與實現環境有關,也推遲到設計階段考慮。例如:與圖形用戶界面系統、數據管理系統、硬件和操作系統有關的類。8.2.1對象與類(1)簡化對只有一個屬性的類只有一個操作的類班級…………班主任姓名11班級班主任姓名…………輸出設備…………格式轉換器文件格式轉換輸出設備……文件格式轉換……抽象出類并進行調整
8.2.1對象與類(2)類的屬性或操作不適合該類的全部對象
例:“汽車”類的“乘客限量”屬性,不適合于吊車、鏟車。問題:分類不夠詳細——進一步劃分特殊類
(3)屬性及操作相同的類*經過抽象,差別很大的事物可能只保留相同的特征——考慮能否合并為一個類,如計算機與吸塵器
(4)屬性及操作相似的類*——考慮能否提升出一個一般類*,或形成整體部分結構。例:轎車、貨車,抽象出汽車;機床與鼓風機用電機做成分.
(5)對職責過多的類進行分解8.2.1對象與類8.2.1對象與類主動對象是具有主動行為的對象,在設計階段是擁有線程或進程并能夠啟動控制活動的對象。主動類是其實例為主動對象的類。識別主動對象的策略:(1)考慮問題域哪些對象需呈現主動行為*?--按定義(2)考慮系統責任根據系統責任觀察系統功能的構成層次,重點考慮完成最外層功能的對象是否應定義為主動對象。
(3)考慮系統邊界
哪些對象與參與者交互?如果一個交互是由參與者發起的,第一個處理該交互的對象是主動對象(4)進行操作執行路線的逆向追蹤。
在分析階段不能完全確定主動對象認識對象的主動行為并識別主動對象8.2.1對象與類{active}
類名類名主動類對象名:類名主動對象類名對象名:類名主動類的線框是粗黑的,或在主動類名之前要加一個主動性標記{active};在尚未確定是不是主動對象之前,暫時用普通對象的類符號表示。類的命名適合該類及其特殊類的全部對象實例*機動車汽車摩托車車輛汽車摩托車馬車9.2.1對象與類8.2.1對象與類建立類圖的對象層
用類符號表示每個對象類填寫類描述模板若發現新的屬性與操作、關系,可以隨時加到類符號中。反映個體而不是群體*
書-書籍;船-船舶*使用名詞,或帶有定語的名詞
,避免無意義的符號如線裝書考慮使用適當種類的語言文字對類命名。在中國:可用中、英文雙重命名*8.2.1對象與類8.2.2定義屬性與操作屬性是用來描述對象靜態特征的一個數據項
從技術觀點上,屬性是變量,包含它的每一個對象都具有自己的值(屬性值)。
按照面向對象方法的封裝原則,一個對象的屬性和操作是緊密結合的,對象的屬性只能由這個對象的操作存取。
[可見性]屬性名[‘:’類型][‘=’初始值]
可見性分為+(公有的)、#(受保護的)、-(私有的)或~(包,只有在同一包中聲明的類能夠使用這一屬性)。
在一個對象/類中,必須給每一個屬性一個唯一的名字。屬性的類型可以是常見的基本數據類型,也可以是自己定義的類型。
9.2.2.1定義屬性通過在類范圍屬性名和類型表達式畫下劃線的方式,表示類范圍的屬性,否則屬性是實例范圍的。類名普通類屬性1······屬性n操作1······操作mOO方法中有“實例屬性”和“類屬性”的概念之分。上面談到的只是實例屬性。類屬性是描述類的所有對象共同特征的一個數據項,對于任何對象實例,它的屬性值都是相同的。C++中冠以static的成員變量是類屬性,這樣的屬性對一個類的全部對象實例只是一份共同的數據空間,所以對任何對象而言,該屬性的值總是相同的。實例屬性和類屬性各有不同的用途*。
8.2.2定義屬性與操作識別屬性*
按常識這個對象應該有哪些屬性?在當前的問題域中,對象應該有哪些屬性?根據系統責任,這個對象應具有哪些屬性*?如信用卡的使用建立這個對象是為了保存和管理哪些信息?對象為了完成其功能,需要增設哪些屬性?對象是否需要通過專設的屬性區別其狀態*?如設備用什么屬性表示聚合和關聯?--不建議可利用需求文檔中的形容詞或所有格短語*。
若一個屬性的結構較為復雜(即不僅僅是一些簡單的數字或文本),可考慮把其作為對象。8.2.2定義屬性與操作篩選
*是否體現了以系統責任為目標的抽象;例:書的重量*?是否描述對象本身的特征;例:課程—電話號碼*?一個屬性所對應的一個事物性質的粒度要適當。例如人的通信地址,包括國家、省、城市、街道、門牌號碼等內容,但這些內容在通信地址這個概念上是不可分的。在定義“人員”對象的屬性時,應該使用一個屬性“通信地址”,而不應把有關通信地址的各項內容拆散開用多個屬性來描述。
若一個對象與另一個對象有關系,其屬性必須捕獲該對象的性質,而不是關系或關系中的其他對象的性質;
如屬性必須是整個實體的特征,而不是其成分的特征*是否可通過繼承得到?可以從其它屬性直接導出的屬性*;與實現有關的因素,推遲到OOD考慮(規范化、對象標識、性能問題)8.2.2定義屬性與操作屬性的命名和定位
命名:原則與類的命名相同 定位:針對所描述的對象,適合全部對象實例。屬性的詳細說明把每個屬性都填寫到相應的類符號中去,并在相應的類描述模板中進行詳細說明。
8.2.2定義屬性與操作操作是類的對象被要求執行的服務。[可見性]操作名[‘(‘參數列表’)’][‘:’返回類型]可見性的取值為+(公有的)、#(受保護的)、-(私有的)或~(包)
。內部操作和外部操作,特征標記
類操作是用來操縱類屬性的操作。例如C++中的前面冠以static的成員函數,就是類范圍操作
表示法
類范圍的操作用帶下劃線的名字和類型表達式串表示。實例范圍操作是默認的,對其不用標記。
概念與表示法9.2.2.2操作8.2.2定義屬性與操作
如果想要在OOA階段記錄方法的詳細文字描述或算法,則把它們放在類描述模板中,如有必要也可放在注釋中。該項工作應該在OOD階段完成。識別操作
諸如創建(創建并初始化一個新對象)、連接(將一個對象與另一個對象連接)、訪問(得到或設置屬性值)、斷開連接(將一個對象與另一個對象的連接斷開)和刪除一個對象之類的操作都屬于在算法上是簡單的操作,在OOA不予以考慮。在OOA中,只對識別那些必須由對象提供的、在算法上復雜的業務操作(如要進行某些計算或監控操作)感興趣。
8.2.2定義屬性與操作(1)考慮系統責任有哪些功能要求在本對象提供*?(2)考慮問題域對象在問題域對應的事物有哪些行為*?(3)分析對象狀態在每種狀態下對象可能發生什么行為?對象狀態的轉換,是由哪些操作引起的?--狀態圖講述(4)追蹤操作的執行路線模擬操作的執行,并在整個系統中跟蹤*。(5)用動詞識別操作(6)查看每一個屬性,因為要用對象的操作來對其進行操縱
識別操作的啟發策略8.2.2定義屬性與操作審查對象的每個操作是否真正有用是否直接提供系統責任所要求的某項功能?或者響應其它操作的請求,間接地完成某種功能的某些局部操作?調整——取消無用的操作是不是高內聚的一個操作應該只完成一項單一的、相對完整的功能*調整——拆分或合并審查與調整
8.2.2定義屬性與操作命名:動詞或動賓結構定位:與實際事物一致例:售貨員——售貨*,商品——售出*在泛化中的位置——適合類的全部對象實例操作的命名和定位8.2.2定義屬性與操作描述操作把每個對象的操作都填寫到相應的類符號中。
在類描述模板中,寫出:說明操作的職責操作原型(消息格式)
[可見性]操作名[‘(‘參數列表’)’][‘:’返回類型]
消息發送(指出在這個操作執行時,需要請求哪些別的對象操作,即接收消息的對象類名以及執行這個消息的操作名)約束條件:如果該操作的執行有前置條件、后置條件,以及執行時間的要求等其它需要說明的事項,則在這里加以說明。實現操作的方法(文字、活動圖或流程圖)。
8.2.2定義屬性與操作類(及其對象)之間的四種關系分類關系、繼承——泛化(一般-特殊)generalization(generalization-specialization)構成關系——聚合(整體-部分)aggregation(whole-part)靜態聯系——關聯association使用關系——依賴Dependency這些關系形成了類圖的關系層*8.2.3建立關系
1、概念
泛化是較特殊的類和較一般的類之間的直接關系(繼承關系),其中較一般的類具有較特殊的類的共同性質,較特殊的類繼承較一般的類的性質,且還具有自己的性質,較特殊的類的對象是較一般的類的對象的子集。9.2.3.1泛化
特殊類一般類的性質一般類特殊類的性質只要有這些性質必須有這些性質對象實例集合性質集合理解一般類與特殊類之間的關系8.2.3建立關系
把在一個類中沒有實現的操作(即沒有提供方法),稱為抽象操作。在C++中,把抽象操作稱作純虛操作。含有抽象操作的類是不能直接實例化的,在UML中把這種類叫做抽象類。抽象類的作用是為了讓其子類繼承它的屬性和操作等。8.2.3建立關系
2、表示法一般類特殊類特殊類泛化抽象類帶有標記“{abstract}”,或者把操作的特征標記寫成斜體來表示它是抽象的。抽象操作帶有標記“{abstract}”,或者把操作的特征標記寫成斜體來表示它是抽象的。{abstract}8.2.3建立關系
3、識別繼承(泛化)(1)學習當前領域的分類學知識(2)按常識考慮事物的分類(3)利用泛化的定義(右圖)(4)考察類的屬性與操作(左圖)(5)看兩個類的對象之間是否有“是一種”關系。?公司人員姓名身份證號股份工資············?公司人員姓名身份證號······股東股份············職員工資··················姓名身份證號股份············姓名身份證號工資············股東職員公司人員姓名身份證號············股東股份············職員工資············?8.2.3建立關系
(1)問題域是否需要這樣的分類?(例:書—善本書*)(2)系統責任是否需要這樣的分類?(例:職員—本市職員)(3)是否符合分類學的常識?(用“isakindof”去套)4、審查與調整(4)是否構成了繼承關系?運輸工具發動機載重量速度······飛機飛行高度······自動導航······汽車············運輸工具發動機載重量速度······飛機飛行高度······自動導航······運輸······運輸······或汽車發動機載重量速度······運輸······×飛機飛行高度······自動導航······8.2.3建立關系
一般-特殊結構的簡化一、從一般類劃分出太多的特殊類,使系統中類的設置太多,增加了系統的復雜性;二、建立過深的繼承層次,增加了系統的理解難度和處理開銷。
運輸工具發動機載重量速度······飛機飛行高度······自動導航······運輸······運輸工具發動機載重量速度······飛機飛行高度······自動導航······汽車運輸······(1)取消沒有特殊性的特殊類8.2.3建立關系
(2)增加屬性簡化一般-特殊結構人員············男人············女人············中國人············美國人············日本人············人員性別國籍··················8.2.3建立關系
(3)取消用途單一的一般類,減少繼承層次雷達型號生產廠安裝地點······開啟關閉監控······一般類存在的理由:·有兩個或兩個以上的特殊類·需要用它創建對象實例·有助于軟件復用電子設備激光打印機傳真機通訊設備設備電子設備計算機設備打印機民用通訊設備激光打印機傳真機設備型號生產廠······開啟關閉雷達安裝地點······監控······8.2.3建立關系
5、調整對象層和特征層
定義泛化的活動,將使分析員對系統中的類及其特征有更深入的認識。隨著泛化的建立,經常需要對類圖的對象層和特征層作某些修改,包括增加、刪除、合并或分開某些類,以及增、刪某些屬性和操作或把它們移到其它類。8.2.3建立關系
對象之間的靜態聯系是指,最終可通過對象屬性來表示的一個對象對另一個對象的聯系。對象之間的動態聯系是指,對象之間在行為(如操作調用)上的依賴關系。
用關聯*(association)表示類之間的靜態聯系。用鏈*
(link)表示類對象之間的靜態聯系。 關聯8.2.3建立關系
1、概念與表示法1)關聯如果類的對象之間通過屬性有連接關系,那么這些類之間的語義關系就是關聯。
教師學生0..*1指導論文城市0..*0..*有航線把二元關聯表示成連接兩個類符號的實線路徑(兩個端點可以連接到相同的類,但是端點是不同的)。關聯名可以在路徑附近表示出來。
兩個類之間可以有多個關聯.8.2.3建立關系
2)鏈
鏈是關聯的一個實例,是對象間的語義連接。在最常見的情況下,鏈是一對對象引用。這樣的連接使得對象之間在某段時間內保持聯系。在兩個對象之間建立了鏈,每一個對象都可以請求另一個對象的操作。把二元鏈表示為兩個實例之間的路徑。如果有關聯名,就應該在它的下面畫線表示鏈名。所有的鏈都被默認為是雙向的,單向的用箭頭來標示。對象之間可以有多個鏈*。張三:教師李四:學生指導論文教師學生0..*1指導論文8.2.3建立關系
例子
1,3,80..1 0..* * 1..3,7..10,15,19..*
3)多重性可把多重性規約表示成由用逗號分開的整數間隔序列組成的數字串;也可用區間代表整數的范圍(可能無限):下限..上限,用于說明從下限到上限的整數閉區間。星號(*)可以用于上限,表明不限制上限。*等價于0..*。教師學生0..*1指導論文8.2.3建立關系
關聯上的另一端上的多重性是指,對于本端的任意一個對象,需要另一端對象的個數的范圍。成績單11學生有一個系11..*教授工作系0..11教授系主任課程0..*0..*學生選修0..*0..*課程預修8.2.3建立關系
4)關聯角色在關聯的一個端點上可有一個角色。每一個角色具有一個名字,用來描述其類被其他的類看作是什么:把它稱為角色名。當需要強調一個類在一個關聯的確切含義時,使用關聯角色名。用戶口令擁有者如果使用角色名,就可以省略關聯名。
8.2.3建立關系
有時可指定類的角色,而不用關聯角色。但要注意:改變該類不要對其他類產生影響。學生口令專業擁有者11..*0..1*學生[口令擁有者]口令專業11..*?8.2.3建立關系
管理者1下屬*
雇員
張三
侯六
李四
王五管理者管理者管理者下屬下屬下屬8.2.3建立關系
5)關聯類(associationclass)
關聯類具有關聯和類的特征的建模元素。換句話說,關聯類既可以被看作是具有類的性質的關聯,也可以被看作為具有關聯性質的類。例如,考慮一個人的工資。通常將它作為屬性設在Person類中。考慮一個人在多個公司工作,公司也應該知道它所發放的工資.
實際上,工資應該是類Person和Company之間的雇傭關系的一個屬性。如果在具有關聯關系的類中,存在著一個屬性放在哪個類中都不合適的情況,就考慮使用關聯類。
8.2.3建立關系
6)N元關聯N元關聯是三個或三個以上類之間的一個關聯。UML規定:一個角色上的多重性是指,當該N元關聯中的其它N-1個值被確定時,該關聯潛在的實例元組的數目。?用一個大的菱形表示一個N元關聯,這個菱形與類間有相連接路徑。關聯的名字(如果有的話)顯示在菱形附近。同二元關聯一樣,角色修飾可以顯示在每一個路徑上。可以用虛線把關聯類符號與菱形連接起來,表示具有屬性、操作或關聯的N元關聯。
項目語言人員8.2.3建立關系
2建立關聯
(1)認識對象之間的靜態聯系
考慮問題域和系統責任——哪些類的對象之間的關系需要在系統中表達。
(2)認識關聯的屬性與操作對于考慮中的每一種關聯,進一步分析它是否應該帶有某些屬性和操作。就是說,是否含有一些僅憑一個簡單的關聯不能充分表達的信息(P117)。
(3)分析并表示關聯的多重性從連接線的每一端,看本端的一個對象可能與另一端的幾個對象發生連接,把結果標注到連接線的另一端。
(4)對多對多的關聯的處理?8.2.3建立關系
3對象層、特征層的增補及關聯說明在建立關聯的過程中可能增加一些新的對象類,要把這些新增的類補充到類圖的對象層中,并建立它們的類描述模板。一種說法:對于每一個關聯,可在它某一端所連接的對象類中增加相應的屬性;在這個類的描述模板中,給出這個屬性的詳細說明。——不建議!
8.2.3建立關系
1、概念與表示法聚合(aggregation)是關聯的一種特殊形式,表示整體類和部分類之間的“整體-部分”關系。聚集(aggregate)是聚合關系中作為“整體”的類,而把作為“部分”的類稱為成分或部分。
類與類之間的聚合關系指的是,一個類的對象實例,以另一個類的對象實例作為其組成部分,是種“apartof”或“hasa”;
也可理解為,一個類定義引用另一個類定義。8.2.3.3聚合
ClassB{}ClassA{…Bb;…}組合是聚合的一種形式,其部分類的對象和整體類的對象之間有很強的“屬于”關系,整體類的對象管理部分類的對象,決定部分類的對象何時屬于它,何時不屬于它。部分可以先于整體消亡。組合對象是組合類的實例。
8.2.3建立關系
C++: 整體類中的屬性用部分類作為基類型,為組合;JAVA: 整體類中的屬性用部分類作為基類型,為聚合。對于C++中的屬性為指針(基類型為一個類)也是如此。組合聚合部分對象部分對象整體對象嵌套對象整體對象部分對象部分對象整體對象對象指針或對象標識描述緊密、固定的關系,例如汽車與發動機描述松散、靈活的關系,例如公司與法律顧問8.2.3建立關系
整體對象類部分對象類1..*1..*連接符:表示法汽車發動機車輪14,60..10..1例子:多重性:一對一一對多多對多多重性表示:固定的數目或范圍——例如:1或1..3不定的數目或范圍——例如:*或0..*組合的聚集端的多重性不能超過1。8.2.3建立關系
學院大學11..*大學學院構成聚合上一般不標名稱。異同?1..*18.2.3建立關系
2識別聚合
(1)物理上的整體事物和它的組成部分 例:機器、設備和它的零部件(2)組織機構和它的下級組織及部門 例:公司與子公司、部門(3)團體(組織)與成員 例:公司與職員(4)一種事物在空間上包容其它事物 例:生產車間與機器(5)抽象事物的整體與部分 例:學科與分支學科、法律與法律條款(6)具體事物和它的某個抽象方面 例:人員與身份、履歷(7)在材料上的組成關系例如,面包由面粉、糖和酵母組成,汽車是由鋼、塑料和玻璃組成。
8.2.3建立關系
3、審查與篩選(1)是否屬于問題域?例:公司職員與家庭*(2)是不是系統責任的需要?例:公司與工會*(3)部分對象是否有一個以上的屬性?例:汽車與輪胎(規格)*(4)是否有明顯的整體-部分關系?例:學生與課程,誰是整體?部分?4、調整對象層和屬性層定義整體-部分結構的活動可能發現一些新的對象類,或者從整體對象的類定義中分割出一些部分對象的類定義,應把它們加入到對象層中,并給出它們的詳細說明。
8.2.3建立關系
8.2.4.4依賴
依賴規約了兩個或多個模型元素(或兩個模型元素集合)之間的一種語義關系,對目標元素的改變可能需要改變該依賴中的源元素。
把依賴表示為兩個模型元素之間的虛線箭頭。在箭頭尾部的模型元素(客戶)依賴箭頭頭部的模型元素(提供者)。箭頭可以用放在雙尖括號內的字符串標識。8.2.3建立關系
8.3建立行為模型描述清楚了對象的行為以及對象之間的交互,有助于進一步地發現與定義類的操作,更有助于確定類之間的關系。UML中的一些圖可以用于建立面向對象分析的行為模型。本節講述其中的典型的順序圖、活動圖和狀態機圖。一、概念與表示法1、概述
順序圖(SequenceDiagram)是一種詳細表示對象之間以及對象與參與者實例之間交互的圖,它由一組協作的對象(或參與者實例)以及它們之間可發送的消息組成,它強調消息之間的順序。
[對象名]:類名圖中含有對象(參與者)、消息、生命線和執行規約組成。8.3.1順序圖順序圖是二維的:垂直方向表示時間,水平方向表示不同的對象或參與者。通常時間維由上到下(根據需要,也可以由下到上)。通常只有時間順序是重要的,但在實時應用中時間軸是能度量的。對象的水平順序并不重要,順序可以是任意的。
t08.3.1順序圖2、對象生命線把對象表示成稱之為“生命線”的垂直虛線。生命線代表一個對象在特定時間內的存在。
在圖的頂部(第一個箭頭之上)放置在交互開始時就存在的對象,而在整個交互完成時仍然存在的對象的生命線,要延伸超出最后一個箭頭。
如果一個對象在圖中所規定的時間段被創建,那么就把創建對象的箭頭的頭部畫在對象符號上。如果對象在圖中被銷毀,那么用一個大的“X”標記它的析構,該標記或者放在引起析構的箭頭處,或者放在從被銷毀的對象最終返回的箭頭處(在自析構的情況下)。生命線可以分裂成兩條或更多條并發的生命線,以表示條件性。這樣的每一個生命線對應于交互中的一個條件分支。生命線可以在某個后續點處合并。
執行規約表示一個對象直接或者通過從屬例程執行一個行為的時期。它既表示了行為執行的持續時間,也表示了調用者與被調用者之間的控制關系。
用一個窄長的矩形表示執行規約,矩形頂端和它的開始時刻對齊,末端和它的結束時刻對齊。執行規約符號的頂端畫在進入的箭頭的尖端(開始該動作的那個箭頭),底端畫在返回的箭頭的尾部。當一個對象處于執行規約期時,該對象能夠響應或發送消息,執行對象或活動。當一個對象不處于執行規約期時,該對象不做什么事情,但它是存在的,等待新的消息執行規約它。若調用一個對象的另一個操作,第二個執行規約符號畫在第一個符號稍微靠右的位置。遞歸?3、執行規約
消息是對象之間的通訊的規格說明,這樣的通訊用于傳輸將發生的活動所需要的信息——控制信息(如調用)和所使用的數據的規格說明。
一個消息會調用另一個對象的操作,調用本對象的操作,向另一個對象發送一個信號,創建或者撤消一個對象(可以自己銷毀自己),還可能向調用者返回一個結果。把消息表示為從一個對象生命線到另一個對象生命線的一個水平實線箭頭,即從源對象指向目標對象,以觸發目標對象中的特定操作。對于對象到自身的消息,箭頭就從同一個對象符號開始和結束。用消息(操作或信號)的名字及其參數值或者參數表達式標示箭頭。
4、消息8.3.1順序圖用如下種類的箭頭表示不同種類的通訊:
同步消息一般把它用于普通的過程調用。在外層控制恢復之前,要完成整個嵌套序列。通常把它用于普通的過程調用。同步消息返回
用它顯式地表示從過程調用的返回。在控制的過程流中,可以省略返回箭頭(暗示執行規約結束),這是要假設每個調用在任何消息后都有一個配對的返回。若需要標識返回值,則要顯式地把它標示在返回的箭頭上。
8.3.1順序圖異步消息
用它表示異步通訊,也即發送者發出消息后,立即繼續執行中的下一步,不進行等待。
異步消息返回若請求方發了一個異步消息,且接收方響應它后要返回信息,則使用另一個異步消息。
注意:消息與對消息的響應。若在一個主動對象發送信號并等待完成一個嵌套的行為序列才繼續時,也可以把同步消息用于并發的主動對象。
8.3.1順序圖
在多數情況下,收發消息的時間是可以忽略的。通常消息箭頭都畫成水平的。這表示發送消息所需要的持續時間是“原子的”(也即,它與交互的粒度相比是短暫的,并且在傳送消息的中間不能發生任何事情)。這在很多計算機中都被假設是正確的。如果需要表示收發消息間的時間差,有三種方法:(1)可以在圖中使用約束,用于指示時間間隔。可以用消息名和經過規定的函數書寫計時表達式,如下圖的“b.receiveTime–a.sendTime<1分鐘”。(2)若要在圖中顯式地表示時間差的數值,還可以通過構造標記來指明,如下圖右下角所示。(3)如果需要表示發送消息是需要時間的,還可把消息箭線向下傾斜,使箭線頭部在尾部下方,表示消息需要一段時間到達。8.3.1順序圖消息分支把分支畫成從一個點出發的多個箭頭,每個箭頭由監護條件標示。依據監護條件是否互斥,這個結構可以表達條件或者并發。消息循環標以持續的條件:*[條件]方框圍起來的區域為重復的。通過使用預定的接口或消息設施(如分布式系統中的中間件)來實現和管理各軟件部件間的請求通信。8.3.1順序圖例題:打電話問題:時間超過30秒的情況沒說明會話對象沒有說明計費等情況s:電話c:會話:交換機a:拿起話筒b:發撥號聲邏輯連通連接s與rr:電話c:*撥號{時間少于30秒}創建陣鈴拿起話筒接通接通{b.receiveTime-a.sendTime<1分鐘}{c.receiveTime-c.sendTime<1秒}<5秒{30秒}8.3.1順序圖二、建立順序圖步驟:■按照當前交互的意圖,如系統的一次執行,或者一組對象(包括參與者實例,以下不再明確地提及參與者實例)之間的協作,詳細地審閱有關材料(如有關的用況),設置交互的語境,其中包括可能需要的那些對象。■通過識別對象在交互中扮演的角色,在順序圖的上部列出所選定的一組對象(應該給出其類名),并為每個對象設置生命線。通常把發起交互的對象放在左邊。■對于那些在交互期間要被創建和撤銷的對象,在適當的時刻,用消息箭線顯式地予以指明。■決定消息將怎樣或以什么樣的序列在對象之間傳遞。通過首先發出消息的對象,看它需要哪些對象為它提供操作,它向那些對象提供操作。追蹤相關的對象,進一步做這種模擬,直到分析完與當前語境有關的全部對象。如果一個對象的操作在某個執行點上應該向另一個對象發消息,則從這一點向后者畫一條帶箭頭的直線,并在其上注明消息名。用適當的箭頭線區別各種消息。
8.3.1順序圖在各對象下方的生命線上,按使用該對象操作的先后次序排列各個代表操作執行的棒形條(執行規約)。若出于某種目的要簡化順序圖,可不畫棒型條,或者針對一個對象只用一個棒型條代表其上的所有操作的執行。兩個對象的操作執行如果屬于同一個控制線程,則接收者操作的執行應在發送者發出消息之后開始,并在發送者結束之前結束。不同控制線程之間的消息有可能在接收者的某個操作的執行過程中到達。如果需要,也可以對對象所執行的操作的功能以及時間或空間約束進行描述。如果需要,可使用結構化控制。用途幫助分析員對照檢查每個用況中描述的用戶需求,是否已經落實到一些對象中去實現。提醒分析員去補充遺漏的對象類或操作。通過對一個特定的對象群體的動態方面建模,深刻地理解對象之間的交互。
幫助分析員發現哪些對象是主動對象活動圖可用于對業務過程和操作的算法建模一、概念與表示法
活動圖顯示從活動到活動的流。下面詳述有關的概念。1、動作和活動
動作(action)是行為規約的基礎單元,用以描述系統中的活動,它是原子的和即時的。動作是原子的,是指在與狀態相關的抽象層次上,動作是不可間斷的;動作時即時的,是指動作執行的時間是可忽略不計的。如調用另一個操作,發送一個信號,創建或撤銷一個對象,或者某些純計算(例如對一個表達式求值),都是一個動作。
活動(activity)是由一系列的動作構成的(也稱為動作表達式),用于描述系統的一項行為,它由動作和其他活動組成。在活動圖中,動作和活動均具有圖形表示法,且是一樣的發送郵件審批發票8.3.2活動圖2、控制流
當動作或活動結束時,馬上進入下一個動作或活動。一系列的動作和活動的執行構成了一個控制流。在圖形上,用一個箭頭表示從一個動作或活動到下一個動作或活動的轉移開幕式比賽閉幕式控制流的分支與合并分支合并8.3.2活動圖控制流也可以是并發的。用同步條表示并發控制流的分岔和匯合。3、對象流定購銷售訂單分岔匯合8.3.2活動圖4、泳道在對業務過程建模時,可以把活動或動作分成組,每組由特定的履行者來執行。履行者可為人員、組織或其他業務實體。把每個組分別稱為一個泳道。8.3.2活動圖5、活動圖活動圖是展示從動作或活動間的控制流和對象流的圖,其中的結點描述動作或活動,邊描述控制流或對象流。一般用它對計算過程中的步驟建模,也可用它對步驟間的數值的流動建模。上述的計算過程可為業務過程,也可為操作的算法。注意,順序圖強調對象間的控制流,而活動圖強調的是活動間的控制流。對于活動圖中一個活動結點,可用另一張活動圖(子活動圖)進行詳述。8.3.2活動圖二、建立活動圖對業務過程建模,要遵循如下的策略:設置業務過程的語境。即要考慮在特定的語境中要對哪些業務的履行者和業務實體建模。考慮為每個重要的業務的履行者建立一個泳道。建立初始狀態和終止狀態,并識別該業務過程的前置條件和后置條件。從初始狀態開始,說明隨著時間發生的動作或活動,并在活動圖中表示它們。如果涉及到重要的對象,則把它們也加入到活動圖中。如果有必要,可展示對象的屬性值和狀態。連接這些動作和活動結點的流。如果需要,使用分支和合并來描述條件路徑和迭代,使用分岔和匯合來描述并發的動作或活動流。針對活動建立子活動圖。8.3.2活動圖對一個操作建模時,應遵循如下策略:收集該操作所涉及的事物,包括操作的參數、可能的返回類型、它所屬于的類以及某些鄰近的類的特征。識別操作的前置條件和后置條件以及操作所屬的類在操作執行期間必須保持的不變式。從該操作的初始狀態開始,按照時間順序設立活動或動作,并在活動圖中將它們表示出來。如果需要,使用分支和合并來描述條件路徑和迭代。僅當這個操作屬于一個主動類時,才在必要時用分岔和匯合來描述并發的控制流。在OOA階段,僅用活動圖對關鍵的復雜操作進行建模,用以展示關于算法的一些信息。除非想直接從模型生成代碼,即使在OOD階段并也不要求用活動圖對每個操作的算法都建立模型。8.3.2活動圖
對事物所處的狀態及其變遷建模需要考慮:事物在其生命周期中經歷了不同的狀態;在特定的時間,一個事物精確地位于一個狀態,發揮特定的作用;在現實世界存在著引起事物的狀態發生變化的事件;事物在其狀態間按次序轉化;事物從一個狀態到另一個狀態的轉化通常是即時的。當事件發生時,事物可能需要采取一些動作。
8.3.3狀態機圖一、概念與表示法1、事件從一般意義上講,事件是指在時間和空間上可以定位并具有實際意義、值得注意的所發生的事情。在OO中,事件是對一個可觀察的事情的規格說明,這種事情的發生可以引發狀態的轉換。
事件可以分為多種:
1)信號事件一個對象對一個信號實例(在不引起混淆的情況下,以下簡稱信號)的接收,導致一個信號事件。在一個類的符號中加一個附件的信號欄,列出其能接收的信號。信號可以作為狀態機中的狀態轉換上的動作被發送,或者作為交互中的一個消息被發送。8.3.3狀態機圖2)調用事件對操作的調用的接收(這樣的操作由接收事件的對象實現)調用事件一般來說是同步的3)時間事件
在指定事件(經常是當前狀態的入口)后,經過了一定的時間或到了指定日期/時間,導致一個時間事件。時間經歷事件用后跟有計算時間量的表達式的關鍵詞“after”表示,比如“after(5秒)”或者”after(從狀態A退出后經歷了10秒)”。如果沒指明時間起始點,那么從進入當前狀態開始計時。
使用關鍵字at來指出在某個絕對時間點上發生的時間事件。例如,時間事件at(1Jan2005,12:00UT)指出該事件發生在格林尼治時間2005年1月1日的中午12點。8.3.3狀態機圖4)改變事件(條件變為真事件)用布爾表達式描述的指派條件變為真,就導致了一個改變事件。無論表達式的值何時由假變成真,事件都發生。與改變事件關聯的布爾表達式的值變成真時事件發生一次,即使之后布爾表達式的值變為假,產生的事件仍將保持,直到它被處理為止。用后有跟布爾表達式的關鍵詞“when”表示變為真的條件,例如
when(altitude<1000)
可以把其看作是連續測試條件,直到它為真。8.3.3狀態機圖事件的格式:事件名 ‘(‘用逗號分隔的參數列表‘)’參數的格式如下:參數名 ‘:’類型表達式參數值由監護條件和動作表達式使用.
事件出現的位置:狀態內,轉換上通常事件后面還跟有一個監護條件(布爾表達式),當事件出現要觸發轉換時,對它求值:——如果表達式取值為真,則觸發轉換;——如果為假,則不觸發轉換,而且如果沒有其他的轉換被此事件所觸發,則該事件丟失。8.3.3狀態機圖2、狀態
狀態是一個對象的生命期的一個階段,在該階段中該對象要滿足一些特定的條件、執行特定的活動或等待某個(些)事件。
把狀態表示成四角均為圓角的矩形,并把狀態的名稱放在其中。
a)
名稱分欄在該分欄中放置狀態名。沒有名稱的狀態是匿名的,但同一張圖中的匿名狀態是各不相同的。b)內部轉換分欄用該分欄給出對象在這個狀態中所執行的內部動作或活動的列表。各表項的表示法的基本格式為:事件名[‘(’用逗號分隔的參數表‘)’][監護條件]‘/’動作表達式
用戶可以自己對對事件進行命名,只是entry、exit和do這三個保留字外,因為UML已經為它們規定了特定含義8.3.3狀態機圖
?內部轉換內部轉換分欄中的事件的發生不會導致狀態的改變,也就是說,即使發生了事件且執行了相應的動作,對象仍然處于原來的狀態,故把這樣的事件觸發的轉換稱為內部轉換。?偽狀態
初始狀態是狀態機圖的缺省開始狀態,終止狀態是狀態機圖執行已經畢后的結束狀態。8.3.3狀態機圖?延遲事件延遲事件是指在當前狀態下暫不處理,但將推遲到該對象的另一個狀態下排隊處理的事件。也就是說,在某些建模情況下,可能想要識別某些事件,但延遲對它們的響應,直到以后才執行。用特殊的動作defer表明一個事件被延遲:
事件/defer
?動作表達式是由一些動作組成的動作序列,見下節。事件1,事件2,事件3/defer事件2,事件3/defer事件1/………事件3/………事件2,事件4/defer8.3.3狀態機圖3、動作動作是在狀態內或在狀態轉化時所執行的操作,是原子的和即時的。動作可為:設置或修改本對象的屬性操作;向一個對象發送信號;調用另一個對象的一個可見性為公共操作;創建或撤消對象;返回一個值或值集;
……
動作是原子的,是指在與狀態相關的抽象層次上,動作是不可間斷的;動作時即時的,是指動作執行的時間是可忽略不計的。
在轉換中、在狀態的入口、在一個對象處于一個狀態的整個期間或在狀態的出口,都是執行動作的時機。8.3.3狀態機圖UML的三個保留字:1)entry/進入動作表達式
entry這個標號標識由相應的動作表達式規定的動作,在進入狀態時首先執行該動作。它不能有參數或監護條件。
2)exit/退出動作表達式
exit這個標號標識由相應的動作表達式規定的動作,在退出狀態時最后執行該動作。它不能有參數或監護條件。
3)do/活動
活動是在對象處于一個狀態中的整個階段執行的一個動作或動作的集合。如:op1(a);op2(b);op3(c)
活動不是原子的,在執行中可以被事件打斷。動作是從不中斷的,但動作序列是會中斷的。也即,在每兩個動作之間(由分號分開),由于事件的出現,導致一個離開此狀態的轉換。8.3.3狀態機圖
do這個標號標識正在進行的活動(“do活動”)。活動是一個動作表達式,它在執行中可以被事件中斷。do活動在狀態的入口動作執行后開始執行,并且它與其他的動作或活動是并發的。——只要被建模的對象是在當前的狀態中,就執行這個活動,直到對象離開該狀態為止。——若do活動執行完畢后對象仍處于當前狀態,這時會導致一個完成事件,如果存在一條外出的完成轉移,若滿足監護條件就退出當前狀態。——如果在活動沒未完成之前,由于外出轉換的激發(滿足監護條件)而導致了狀態的退出,就中斷活動。8.3.3狀態機圖EnterPasswordentry/password.reset()exit/password.test()digit/handlecharacterclear/password.reset()help/displayhelpprint/deferdo/suppressecho內部轉換延遲事件內部活動入口和出口動作8.3.3狀態機圖4、狀態轉換
狀態轉換是兩個狀態之間的一種關系,表示當一個特定事件出現時,如果滿足一定的條件,對象就從第一個狀態(源狀態)進入第二個狀態(目標狀態),并執行一定的動作。轉換本身也是原子的。源狀態目標狀態事件名[‘(’用逗號分隔的參數表‘)’][監護條件]‘/’動作表達式事件可能有參數,這樣的參數可由轉換中的監護條件和動作使用,也可由與源狀態和目標狀態相關的退出和進入動作分別使用。觸發到自身的轉換,要先退出當前狀態,再進入該狀態,這樣要執行退出動作和進入動作。觸發內部轉換,不需要退出當前狀態。5、狀態機圖
一個狀態機圖描述一個對象在其生命期內響應事件所經歷的狀態序列,以及對這些事件所做出的反應。
通常用狀態機圖描述類的行為,也可以用它描述其它模型實體(如用況、參與者、子系統)的行為。
8.3.3狀態機圖
initializingActiveidleCommandafter(10秒)/selfTestattentionclearingattentionalarm(s)例題1下圖描述了一個負責監視某些傳感器的控制器的狀態機。clearing8.3.3狀態機圖6、組合狀態上面講述的狀態機圖中的狀態都是簡單狀態。例如,下圖中的狀態Active是一個組合狀態。其中DialTone和Timeout等狀態均為Active的子狀態。(1)語義
組合狀態是由兩個或多個子狀態構成的狀態,其中的子狀態是順序的或并發的,而且子狀態還可以是組合狀態。新創建的對象,從最外層的初始偽狀態開始,執行其最外層的缺省轉換。若對象轉換到了最外層的終結狀態,則對象的生命期終止。一個狀態內的各區域可以有初始偽狀態和終止狀態。到封閉狀態的轉換表示到其初始偽狀態的轉換。到最終狀態的轉換表示封閉區域中的活動的完成。在所有并發區域中的活動的完成,表示經由封閉狀態的活動的完成,并觸發封閉狀態上的完成事件。(2)表示法把組合狀態展開是為了表示它的內部狀態機結構。除了(可選的)名稱和內部轉換分欄外,狀態可以包含容納嵌套圖的附加分欄。通過在圖形區域里顯示嵌套狀態機圖,把狀態展開,表示其不相交(順序)的子狀態。順序子狀態示意圖
并發子狀態示意圖從帶有并發組合狀態內的任一狀態離開的轉移導致離開所有的其他并發區域。這種轉移通常表示有錯誤發生或例外發生,從而迫使所有并發計算都被中斷。用虛線劃分圖形區域,每個區域都是一個并發的子狀態。每個區域有一個可選的名稱,但必須包含一張具有不相交狀態的狀態機圖。用實線把整個狀態的名稱分欄和內部轉換分欄與并發的子狀態相分離。建立狀態機圖對對象的狀態變遷建模,應遵循如下策略: n
設置狀態機的語境即要考慮在特定的語境中哪些對象與該對象交互,包括這個對象的類的所有父類和通過依賴或關聯到達的所有類。這些鄰居是動作的侯選目標或在監護條件中包含的侯選項。 n
建立初始狀態和終止狀態。 n
選定對象中的一組有意義的對對象狀態有影響的屬性,結合有關的事件和動作,對象可能在其中存在各段時間的條件,以決定該對象所在的穩定狀態。 n
在對象的整個生命期中,決定穩定狀態的有意義的偏序。從初態開始到終態,列出這個對象可能處于的頂層狀態 n
決定這個對象可能響應的事件。可在對象的接口處發現這些事件,并給出一個唯一的名字。這些事件可能觸發從一個合法狀態到另一個合法狀態的轉換。
n用被適當的事件觸發的轉換將這些狀態連接起來,接著向這些轉換中添加事件、監護條件或動作。對于內部轉換也是如此。 n
識別各狀態的進入或退出的動作 n如果需要,從這個對象的高層狀態開始,然后考慮各自的可能子狀態,用子狀態進行擴充。
n
檢查l
檢查在狀態機中提到的所有事件是否和該對象接口所期望的事件相匹配。類似地,檢查該對象的接口所期望的所有事件,是否都被狀態機所處理。l
檢查在狀態機中提到的所有動作是否被閉合對象的關系和操作所支持。l
通過狀態機,跟蹤檢查事件的順序和它們的響應,尤其要努力地尋找那些未達到的狀態和導致狀態機不能走通的狀態。l在重新安排狀態機后,按所期望的順序再一次檢查,以確保你沒有改變該對象的語義。
8.3.3狀態機圖概念與表示法
包是對模型元素分組的機制。使用包的最常見目的是把建模元素組織成為組,作為一個集合進行命名和處理。包可以擁有類、接口、構件、節點、用況和圖,甚至可以是其它包。擁有是一種組成關系,這意味著被擁有的元素被聲明在包中。如果包被撤消了,元素也要被撤消。——包是一個命名空間,一個元素只能被一個包所擁有。
設計良好的包,把在語義上接近并傾向于一起變化的元素組織在一起。因此結構良好的包是松耦合、高內聚的,而且對其內容的訪問具有嚴密的控制。
8.4建立組織模型——包圖包的層次性因為包中還可以有包,這樣包之間可以有一個層次,且在組織結構上是一棵嚴格的樹。在實際使用中,最好要避免過深地嵌套包,一般兩、三層即可。對過多的嵌套,要用“引入依賴”來組織包。
類名類名······類名······包名包名包名8.4建立組織模型——包圖對包中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一榀框架結構設計畢業答辯
- 動脈疾病診療指南解讀
- 呼吸機使用的臨床指征
- 如何讓孩子在群體壓力中成長
- 歷史2024-2025學年統編版七年級下冊歷史知識點 專題總結
- 葡萄酒產區特色品牌國際化研究報告:2025年市場趨勢預測
- 音樂流媒體行業用戶付費模式與版權運營商業模式策略報告
- 【高中語文】《紅樓夢》閱讀中“薛寶釵情節”闡釋與訓練++統編版高一語文必修下冊+
- 藝術市場數字化交易平臺與藝術品市場文化產業發展趨勢報告
- 金融行業消費升級報告:年輕一代的金融需求與偏好分析
- 2024年廣東省東莞市事業單位公開招聘教師崗考試題帶答案分析
- 《危險化學品企業動火作業安全管理規定》知識培訓
- 江蘇省宿遷市名校2025年七下數學期末檢測試題含解析
- 2025-2030年中國跨境電商零售行業市場現狀分析及競爭格局與投資發展研究報告
- 晚宴合同協議書
- 終止妊娠協議書模板
- 2025年光伏產業技能競賽理論考試題庫(含答案)
- 新能源汽車動力電池維護技巧試題及答案
- 期末測試卷(含答案含聽力原文無聽力音頻)-2024-2025學年閩教版英語六年級下冊
- 軍訓教學考試題及答案
- 百世物流抖音平臺運營策略研究
評論
0/150
提交評論