第7章 分析問題_第1頁
第7章 分析問題_第2頁
第7章 分析問題_第3頁
第7章 分析問題_第4頁
第7章 分析問題_第5頁
已閱讀5頁,還剩83頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第7章分析問題

學習目標:理解分析的含義建立靜態(tài)分析模型理解動態(tài)分析如何幫助驗證靜態(tài)模型2021/5/917.1引言分析是需求和設(shè)計之間的橋梁,可以把系統(tǒng)必須提供的服務(wù)的清晰陳述轉(zhuǎn)化為對要處理的對象的正確理解。分析是找出系統(tǒng)要處理什么的過程,而不是確定如何處理過程。2021/5/92分析模型的分類分析模型有靜態(tài)部分和動態(tài)部分靜態(tài)分析:使用類圖描述,顯示對象及其對象之間的關(guān)系動態(tài)分析:使用通信圖(協(xié)作圖)證明靜態(tài)模型是可行的2021/5/93分析的來源業(yè)務(wù)需求模型:描述業(yè)務(wù)上下文的手工和自動工作流,它使用參與者的面向?qū)ο螅I(yè)務(wù))版本、用例、對象、術(shù)語表,有時還有通信圖和活動圖來描述系統(tǒng)需求模型:包含系統(tǒng)的外部視圖,描述為參與者的面向系統(tǒng)版本、用例和用例圖、用戶界面草案、增強的術(shù)語表和非功能需求2021/5/94分析階段內(nèi)容分析的來源必須轉(zhuǎn)化為由系統(tǒng)處理的對象模型,以及對象的屬性和關(guān)系這些對象存在于系統(tǒng)或系統(tǒng)邊界上,可以通過一個或多個接口來訪問該階段的大多數(shù)對象都對應于真實世界中的物理對象或概念(低級的、面向解決方案的對象要在設(shè)計階段才出現(xiàn))貫徹“用例驅(qū)動”2021/5/95補充:處理過程分析用例用例工程師業(yè)務(wù)模型[或領(lǐng)域模型]補充需求特征列表用例模型[概況的]分析類用例實現(xiàn)2021/5/967.2為什么要進行分析分析可防止在徹底理解問題之前設(shè)計解決方案不可能僅根據(jù)業(yè)務(wù)需求模型就完全理解問題,只有轉(zhuǎn)化為軟件,才有可能引入新的實踐2021/5/97分析的作用完成靜態(tài)分析,客戶就能確認我們對業(yè)務(wù)對象的理解是否正確,之后讓對象影響我們的設(shè)計完成動態(tài)分析,就可以確信分析對象能夠支持需要的系統(tǒng)功能2021/5/987.3分析過程概述使用系統(tǒng)需求模型查找候選的類,以描述與系統(tǒng)相關(guān)的對象,并在類圖上建立它們確定類之間的關(guān)系(關(guān)聯(lián)、聚合、復合和繼承)確定類的屬性(對象的、已指定的簡單特性)2021/5/99分析過程概述檢查系統(tǒng)用例,確定已有的對象支持它們。在檢查過程中微調(diào)類、屬性和關(guān)系,這個用例的實現(xiàn)過程將生成一些操作,來補充屬性需要時更新術(shù)語表和非功能需求——用例本身不需要更新,但可能需要某些更正2021/5/910需要給客戶展示的...類圖和屬性便于客戶的理解,有這樣糾正錯誤的分析2021/5/911不要客戶展示的...對象操作或通信圖難以被客戶理解膚淺的設(shè)計,系統(tǒng)用例已演示了動態(tài)行為其中隱含編碼,暴露秘密在設(shè)計之前是要刪除的2021/5/9127.4靜態(tài)分析靜態(tài)分析確定系統(tǒng)的邏輯或物理部分,以及如何把它們連接在一起,即描述如何構(gòu)建和初始化系統(tǒng)2021/5/9137.4.1確定類為了檢查業(yè)務(wù)需求建模和系統(tǒng)需求建模,以系統(tǒng)用例的形式抽取出候選類候選類常常在用例中用名詞表示2021/5/914確定類不適合作為候選類的名詞:系統(tǒng)本身參與者(例外:需要在內(nèi)部存儲參與者的信息)邊界小類型(字符串或數(shù)字)2021/5/9157.4.2標識類的關(guān)系依賴泛化(繼承)關(guān)聯(lián)聚集復合(組合)實現(xiàn)2021/5/9161.依賴定義:對于兩個相對獨立的對象,當一個對象負責構(gòu)造另一個對象的實例,或者依賴另一個對象的服務(wù)時,這兩個對象之間主要體現(xiàn)為依賴關(guān)系。表現(xiàn):依賴關(guān)系表現(xiàn)在局部變量,方法的參數(shù),以及對靜態(tài)方法的調(diào)用2021/5/917依賴實例:比如說擰螺絲,要借助(也就是依賴)螺絲刀(Screwdriver)來幫助你完成擰螺絲(screw)的工作代碼:public

class

Person{

/**

擰螺絲

*/

public

void

screw(Screwdriver

screwdriver){

screwdriver.screw();

}

}

2021/5/9182.泛化(繼承)關(guān)系定義:表示類與類之間的繼承關(guān)系,接口與接口之間的繼承關(guān)系,或類對接口的實現(xiàn)關(guān)系。一般化的關(guān)系是從子類指向父類的,與繼承或?qū)崿F(xiàn)的方法相反。表現(xiàn):父類父類實例=new子類()

2021/5/919泛化代碼class

Animal{}

class

Tiger

extends

Animal{}

public

class

Test

{

public

void

test()

{

Animal

a=new

Tiger();

}

}

2021/5/9203.關(guān)聯(lián)關(guān)系定義:對于兩個相對獨立的對象,當一個對象的實例與另一個對象的一些特定實例存在固定的對應關(guān)系時,這兩個對象之間為關(guān)聯(lián)關(guān)系表現(xiàn):關(guān)聯(lián)關(guān)系是使用實例變量來實現(xiàn)

2021/5/921關(guān)聯(lián)實例:比如客戶和訂單,每個訂單對應特定的客戶,每個客戶對應一些特定的訂單;再例如公司和員工,每個公司對應一些特定的員工,每個員工對應一特定的公司2021/5/922關(guān)聯(lián)代碼public

class

Company{

private

Employee

employee;

public

Employee

getEmployee(){

return

employee;

}

public

void

setEmployee(Employee

employee){

this.employee=employee;

}

//公司運作

public

void

run(){

employee.startWorking();

}

}

2021/5/9234.聚合關(guān)系定義:當對象A被加入到對象B中,成為對象B的組成部分時,對象B和對象A之間為聚合(聚集)關(guān)系。聚合是關(guān)聯(lián)關(guān)系的一種,是較強的關(guān)聯(lián)關(guān)系(強關(guān)聯(lián)),強調(diào)的是整體與部分之間的關(guān)系,即“has-a”關(guān)系聚合的整體和部分之間在生命周期上沒有什么必然的聯(lián)系,部分對象可以在整體對象創(chuàng)建之前創(chuàng)建,也可以在整體對象銷毀之后銷毀。2021/5/924聚合關(guān)系表現(xiàn):與關(guān)聯(lián)關(guān)系一樣,聚合關(guān)系也是通過實例變量來實現(xiàn)這樣關(guān)系的。關(guān)聯(lián)關(guān)系和聚合關(guān)系來語法上是沒辦法區(qū)分的,從語義上才能更好的區(qū)分兩者的區(qū)別。2021/5/925關(guān)聯(lián)與聚合的區(qū)別關(guān)聯(lián)關(guān)系所涉及的兩個對象是處在同一個層次上的。比如人和自行車就是一種關(guān)聯(lián)關(guān)系,而不是聚合關(guān)系,因為人不是由自行車組成的。

聚合關(guān)系涉及的兩個對象處于不平等的層次上,一個代表整體,一個代表部分。比如電腦和它的顯示器、鍵盤、主板以及內(nèi)存就是聚集關(guān)系,因為主板是電腦的組成部分。對于具有聚集關(guān)系(尤其是強聚集關(guān)系)的兩個對象,整體對象會制約它的組成對象的生命周期。部分類的對象不能單獨存在,它的生命周期依賴于整體類的對象的生命周期,當整體消失,部分也就隨之消失。比如張三的電腦被偷了,那么電腦的所有組件也不存在了,除非張三事先把一些電腦的組件(比如硬盤和內(nèi)存)拆了下來。

2021/5/926聚合關(guān)系publicClassPerson{...}publicClassSchool{ privateArrayListstudents; privatevoidaddStudent(Personperson) { students.add(person); }}2021/5/927聚合關(guān)系public

class

Computer{

private

CPU

cpu;

public

CPU

getCPU(){

return

cpu;

}

public

void

setCPU(CPU

cpu){

this.cpu=cpu;

}

//開啟電腦

public

void

start(){

//cpu運作

cpu.run();

}

}

2021/5/9285.復合關(guān)系復合(強聚集,組合,合成):復合的對象不能由其他對象共享,且與構(gòu)成它的對象一齊消亡它帶有很強的擁有有關(guān)系且整體與部分的生命周期一致的聚合關(guān)聯(lián)形式。例如Windows的窗口和窗口上的菜單就是組合關(guān)系。生命周期一致指的是部分必須在組合創(chuàng)建的同時或者之后創(chuàng)建,在組合銷毀之前或者同時銷毀,部分的生命周期不會超出組合的生命周期。組合是用帶實心菱形的實線來表示。2021/5/929復合關(guān)系 publicClassWindow

{

privateMenumenu;

publicWindow()

{

menu=newMenu();

}//可以在這時候創(chuàng)建Menu對象,也可以在之后創(chuàng)建

publicvoiddestory()

{

menu.destory();

}//必須同時或者在這之前銷毀關(guān)聯(lián)的Menu對象

}2021/5/930舉例School與Student是什么關(guān)系? publicClassSchool

{

publicSchool()

{...}//不需要創(chuàng)建任何Person對象,其Students都是已有的Person對象

publicvoiddestroy()

{...}//只需要關(guān)掉School對象和斷開它與自己所有的Person對象的關(guān)聯(lián)即可,Person對象是不會銷毀的

}聚合關(guān)系2021/5/9316.實現(xiàn)關(guān)系實現(xiàn):指的是一個類元描述了另一個類元保證實現(xiàn)的契約。對類來說,就是一個類實現(xiàn)了一個接口2021/5/932舉例:實現(xiàn)關(guān)系 publicinterfaceA

{

publicvoidmethodA();

}

publicclassBimplementsA

{

publicvoidmethodA()

{...}

...

}2021/5/933總結(jié)一般對類關(guān)系建模的時候,先對泛化、關(guān)聯(lián)和實現(xiàn)建模,剩下的關(guān)系都可以看作依賴。2021/5/934標識類的關(guān)系使用頻率:關(guān)聯(lián)>聚合>繼承>復合就設(shè)計和實現(xiàn)而言,關(guān)聯(lián)、聚合和復合之間的區(qū)別很難界定2021/5/9357.4.3繪制類圖和對象圖類圖顯示存在哪些類,這些類有什么關(guān)系(正式的類圖還可以顯示屬性和操作)對于聚合、復合和關(guān)聯(lián),類圖顯示了可能的運行時關(guān)系,而不是顯示實際運行時關(guān)系2021/5/936iCoot的分析類圖2021/5/937用UML描述運行時的對象2021/5/9387.4.4繪制關(guān)系繼承關(guān)系2021/5/939繪制關(guān)系聚合關(guān)系2021/5/940繪制關(guān)系復合關(guān)系2021/5/941繪制關(guān)系關(guān)聯(lián)關(guān)系2021/5/9421.多重性在類的兩端標識允許參與關(guān)系的運行時對象的數(shù)量(關(guān)系中的多重性)n:表示nm..n:m到n范圍內(nèi)的任意數(shù)值(包含m和n)p..*:從p到無窮大的任意數(shù)*:0..*的縮寫0..1:可選2021/5/943多重性2021/5/9442.關(guān)聯(lián)標簽、角色和注釋除了繼承之外的所有關(guān)系都可以給定一個關(guān)聯(lián)標簽,它表示關(guān)聯(lián)的性質(zhì)如果關(guān)聯(lián)名稱的理解方式不明顯,就可以使用一個黑色的箭頭2021/5/945UML中的關(guān)聯(lián)標簽、角色和注釋2021/5/946iCoot的分析類圖2021/5/947用UML描述運行時的對象2021/5/9487.4.5屬性屬性是對象的一個特性,例如對象的大小、位置、名稱、價格、字體、利率等。在UML中,每個屬性都可以指定一個類型,可以是類或原型通過分割線,顯示類名和屬性2021/5/949用UML描述屬性2021/5/950避免做的事情...避免在UML使用獨立于語言的表示法定義自己的原型,如integer、Real和Boolean,因為在開始設(shè)計時,就必須考慮與特定語言相關(guān)的內(nèi)容避免使用數(shù)組類型,因為它是對象和原型的交叉,使用集合類(List或Set)會更好2021/5/951避免做的事情...避免在制品中包含派生的屬性,如圓的屬性包括半徑、直徑、周長和面積2021/5/952iCoot的屬性2021/5/953選擇屬性還是關(guān)系如何為Car的顏色建模?2021/5/954在屬性和關(guān)系之間選擇一部分用戶角度心理學家汽車廠家2021/5/9557.4.6關(guān)聯(lián)類2021/5/956關(guān)聯(lián)類關(guān)聯(lián)偶爾也有與它相關(guān)的信息或行為關(guān)聯(lián)類可以和關(guān)聯(lián)一起引入關(guān)聯(lián)類表示的屬性和操作僅因為關(guān)聯(lián)關(guān)系的存在而存在在設(shè)計時,必須用更具體的類替換關(guān)聯(lián)類2021/5/9577.4.7有形對象和無形對象無形對象建模:如目錄中描述的產(chǎn)品有形對象建模:如送到門口的實際產(chǎn)品2021/5/958有形對象和無形對象2021/5/9591.錯誤的建模為了清單有形性問題,假定除了銷售汽車之外,經(jīng)銷商還給顧客提供服務(wù)2021/5/960建模信息與銷售相關(guān)的信息包括:modelNumberavailableColorsnumberOfCylinders與服務(wù)相關(guān)的信息包括:OwnervehicleIndentificationNumbermileageAtLastService2021/5/961錯誤的建模避免使一個類有兩組完全不同的任務(wù)——這種類的內(nèi)聚力很脆弱,它們的任務(wù)也不會構(gòu)成一個模塊2021/5/962錯誤的建模2021/5/9632.正確的建模2021/5/964正確的建模2021/5/965練習4考慮一個視頻出租系統(tǒng)。下列圖中哪個圖是正確的?2021/5/9667.4.8好的對象類取自用例中的名詞對象是具體的事物,是對類的實例化對象擁有屬性對象能做什么,即對象操作建議:在動態(tài)分析類之前,不要過多地關(guān)注操作2021/5/9677.5動態(tài)分析進行動態(tài)分析的原因:確認類圖是完整、正確的,以便盡早更正錯誤,包括添加、刪除或修改類、關(guān)系、屬性和操作相信當前的模型可以在軟件中實現(xiàn)驗證最終系統(tǒng)上用戶界面的功能:在進行詳細設(shè)計之前,最好按照用例中的線條,把對系統(tǒng)的訪問放在各個界面上2021/5/968用例實現(xiàn)動態(tài)分析中最重要的部分就是用例的實現(xiàn)2021/5/969用例實現(xiàn)的步驟檢查系統(tǒng)用例,模擬對象之間發(fā)送的消息,在通信圖上記錄結(jié)果在接收消息的對象上引入操作根據(jù)需要添加類,以標識邊界(系統(tǒng)接口)和控制器(復雜業(yè)務(wù)過程的占位符或者對象的創(chuàng)建和檢索)2021/5/9707.5.1繪制用例的實現(xiàn)過程為分析對象之間傳送消息的過程,需要用到UML通信圖和順序圖相對而言,通信圖更適合用例的實現(xiàn),僅關(guān)注對象及其連接,不考慮消息發(fā)送的順序2021/5/971U7:進行預約的通信圖2021/5/972分析級的通信圖可以顯示...與系統(tǒng)邊界交互的參與者與系統(tǒng)內(nèi)部的對象交互的邊界系統(tǒng)內(nèi)部的對象與外部系統(tǒng)的邊界交互2021/5/9737.5.2邊界、控制器和實體為表達額外的信息,UML允許開發(fā)人員使用圖標代替標準的對象方框2021/5/974邊界、控制器和實體2021/5/975參與者參與者:存在于系統(tǒng)外部的人或系統(tǒng)2021/5/976邊界邊界:位于系統(tǒng)邊緣上的對象,在系統(tǒng)和參與者之間。對象系統(tǒng)參與者,邊界提供了通信途徑。對于作為參與者的人,邊界表示用戶界面,以執(zhí)行命令和查詢,顯示反饋和結(jié)果。每個邊界對象通常都對應于一個用例或一組相關(guān)的用例,通常映射到一個用戶界面草案2021/5/977實體實體:系統(tǒng)內(nèi)部的一個對象,表示一個業(yè)務(wù)概念,如顧客、汽車或型號一般實體由邊界和控制器操作,而不是自己的行為實體類出現(xiàn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論