第20章 面向?qū)ο蠓治?BR> 當(dāng)開(kāi)發(fā)一個(gè)新的產(chǎn)品或系統(tǒng)時(shí),我們?nèi)绾我宰駨腛O軟件工程的方式來(lái)刻劃它?什么是相關(guān)的對(duì)象?它們?nèi)绾蜗嗷リP(guān)聯(lián)?對(duì)象如何在系統(tǒng)的范圍內(nèi)工作?我們應(yīng)如何對(duì)問(wèn)題刻劃或建模以使得我們可有效地進(jìn)行設(shè)計(jì)?
所有這些問(wèn)題涵蓋在面向?qū)ο蠓治?OOA)的范圍內(nèi),OOA是作為OO軟件工程的第一項(xiàng)技術(shù)活動(dòng)來(lái)實(shí)現(xiàn)的。OOA基于在第11章引入的一組基本原則,為了建立一個(gè)分析模型,要運(yùn)用如下5個(gè)基本原則:(1)建模信息域;(2)描述模塊功能;(3)表示模型行為;(4)分解以模型顯示更多細(xì)節(jié);(5)早期模型表示問(wèn)題的本質(zhì),而后期模型提供實(shí)現(xiàn)細(xì)節(jié)。這些原則形成了在本章中討論的OOA方法的基礎(chǔ)。
OOA的意圖是定義所有和被求解的問(wèn)題相關(guān)的類(及同類關(guān)聯(lián)的關(guān)系和行為),為了達(dá)到這個(gè)目標(biāo),必須完成以下任務(wù)顯示:
1.必須在客戶和軟件工程師之間溝通了解基本的用戶需求。
2.必須標(biāo)識(shí)類(即,定義屬性和方法)。
3.必須刻劃類層次。
4.表示對(duì)象—對(duì)象關(guān)系(對(duì)象連接)。
5.必須建模對(duì)象行為。
6.任務(wù)1到5遞進(jìn)地反復(fù)使用,直至完成建模。
代替用傳統(tǒng)的輸入—加工—輸出(信息流)模型或僅從層次信息結(jié)構(gòu)地導(dǎo)出模型考察問(wèn)題的方式,OOA引入了一系列新概念。這些新概念看上去可能有一些不尋常,但是它們實(shí)際是相當(dāng)自然的。Coad和Yourdon[COA91]對(duì)該問(wèn)題有如下論述:些不尋常,但是它們實(shí)際是相當(dāng)自然的。Coad和Yourdon[COA91]對(duì)該問(wèn)題有如下論述:
OOA(面向?qū)ο蠓治?是基于我們?cè)谟變簣@首先學(xué)到的概念:對(duì)象和屬性、類和成員、整體和部分。為什么我們花了這么長(zhǎng)的時(shí)間才將這些概念應(yīng)用于信息系統(tǒng)的分析和規(guī)約——也許是由于我們忙于在結(jié)構(gòu)化分析的全盛時(shí)期“跟隨潮流”而未曾考慮其他的選擇。
重要的是要注意:對(duì)作為OOA基礎(chǔ)的“概念”,不存在一致的共識(shí),但是一些關(guān)鍵思想重復(fù)地出現(xiàn),這些正是我們將在本章中考慮的。
20.1面向?qū)ο蟮姆治?BR> 面向?qū)ο蟮姆治龅哪繕?biāo)是開(kāi)發(fā)一系列模型,這些模型被用來(lái)描述以滿足一組客戶需求的計(jì)算機(jī)軟件。OOA和在第12章描述的傳統(tǒng)分析方法一樣,建造一個(gè)多部分的分析模型以滿足這個(gè)目標(biāo)。分析模型(在第19章描述的對(duì)象模型的元素的語(yǔ)境內(nèi))描述信息、功能和行為。
20.1.1傳統(tǒng)方法和OO方法
面向?qū)ο蠓治鍪欠翊_實(shí)不同于在第12章討論的結(jié)構(gòu)化分析方法?雖然爭(zhēng)論仍在繼續(xù),F(xiàn)ichman和Kemerer[FIC92]正面地闡述了這個(gè)問(wèn)題:夠治齜椒??虽然争论仍栽偨{*
我們的結(jié)論是面向?qū)ο蠓治龇椒ù砹讼鄬?duì)于面向過(guò)程的方法學(xué)(如結(jié)構(gòu)化分析)的根本性變化,但相對(duì)于面向數(shù)據(jù)的方法學(xué)(如信息工程方法)僅僅是適當(dāng)增補(bǔ)。面向過(guò)程的方法學(xué)在建模過(guò)程中的關(guān)注點(diǎn)不是對(duì)象的內(nèi)在性質(zhì),從而導(dǎo)致了和面向?qū)ο蟮娜齻€(gè)基本原則(封裝、對(duì)象分類和繼承)相正交的問(wèn)題域模型。
簡(jiǎn)而言之,結(jié)構(gòu)化分析對(duì)需求采用獨(dú)特的“輸入-加工-輸出”視角,數(shù)據(jù)被脫離數(shù)據(jù)的變換過(guò)程而單獨(dú)考慮,系統(tǒng)行為雖然是重要的,但在結(jié)構(gòu)化分析中往往扮演第二位的角色。結(jié)構(gòu)化分析方法著重于功能分解的使用(數(shù)據(jù)流圖的劃分,第12章)。
Fichman和Kemerer[FIC92]建議了11個(gè)“建模維數(shù)(modeling dimensions)”,可用它們來(lái)比較各種傳統(tǒng)的和面向?qū)ο蟮姆治龇椒ǎ?BR> 1.實(shí)體的標(biāo)識(shí)/分類①。
2.一般到特殊以及整體到部分的實(shí)體關(guān)系。
3.其他實(shí)體關(guān)系。
4.實(shí)體屬性的描述。
5.大型模型的劃分。
6.狀態(tài)和狀態(tài)間的變遷。
7.功能的詳細(xì)刻劃。
8.自上向下的分解。
9.端到端的處理序列。
10.排它性服務(wù)的標(biāo)識(shí)。
11.實(shí)體通信(通過(guò)消息或事件)。
因?yàn)榻Y(jié)構(gòu)化分析方法及OOA方法(見(jiàn)20.1.2節(jié))均有很多種,所以很難在兩種方法間進(jìn)行一般性的比較。然而,可以確定,建模維數(shù)8和9總是在結(jié)構(gòu)化分析中出現(xiàn),而很少在OOA中使用。
20.1.2 OOA概述
對(duì)象技術(shù)的流行已經(jīng)衍生出許多的OOA方法②,每個(gè)方法都引入一個(gè)產(chǎn)品或系統(tǒng)分析的過(guò)程、一組隨過(guò)程演化的模型、以及使得軟件工程師能夠以一致的方式創(chuàng)建模型的符號(hào)體系。在下面篇幅中,概略地討論了某些流行的OOA方法③,其意圖是提供一個(gè)由方法的作者建議的OOA過(guò)程④的概覽。
Booch方法
Booch方法[BOO94]包含“微開(kāi)發(fā)過(guò)程”和“宏開(kāi)發(fā)過(guò)程”兩個(gè)過(guò)程,微級(jí)別定義了一組在宏過(guò)程中的每一步反復(fù)應(yīng)用的分析任務(wù),因此,演進(jìn)途徑得以維持。Booch方法得到了一系列自動(dòng)工具的支持。Booch的OOA宏觀開(kāi)發(fā)過(guò)程概述如下:
·標(biāo)識(shí)類和對(duì)象
提出候選對(duì)象
進(jìn)行行為分析
標(biāo)識(shí)相關(guān)場(chǎng)景
為每個(gè)類定義屬性和操作
·標(biāo)識(shí)類和對(duì)象的語(yǔ)義
選擇場(chǎng)景并分析
賦予責(zé)任以完成希望的行為
劃分責(zé)任以平衡行為
選擇一個(gè)對(duì)象,枚舉其角色和責(zé)任
定義操作以滿足責(zé)任
尋找對(duì)象間的協(xié)作
·標(biāo)識(shí)類和對(duì)象間的關(guān)系
定義對(duì)象間存在的依賴
描述每個(gè)參與對(duì)象的角色
通過(guò)走查場(chǎng)景進(jìn)行確認(rèn)
所有這些問(wèn)題涵蓋在面向?qū)ο蠓治?OOA)的范圍內(nèi),OOA是作為OO軟件工程的第一項(xiàng)技術(shù)活動(dòng)來(lái)實(shí)現(xiàn)的。OOA基于在第11章引入的一組基本原則,為了建立一個(gè)分析模型,要運(yùn)用如下5個(gè)基本原則:(1)建模信息域;(2)描述模塊功能;(3)表示模型行為;(4)分解以模型顯示更多細(xì)節(jié);(5)早期模型表示問(wèn)題的本質(zhì),而后期模型提供實(shí)現(xiàn)細(xì)節(jié)。這些原則形成了在本章中討論的OOA方法的基礎(chǔ)。
OOA的意圖是定義所有和被求解的問(wèn)題相關(guān)的類(及同類關(guān)聯(lián)的關(guān)系和行為),為了達(dá)到這個(gè)目標(biāo),必須完成以下任務(wù)顯示:
1.必須在客戶和軟件工程師之間溝通了解基本的用戶需求。
2.必須標(biāo)識(shí)類(即,定義屬性和方法)。
3.必須刻劃類層次。
4.表示對(duì)象—對(duì)象關(guān)系(對(duì)象連接)。
5.必須建模對(duì)象行為。
6.任務(wù)1到5遞進(jìn)地反復(fù)使用,直至完成建模。
代替用傳統(tǒng)的輸入—加工—輸出(信息流)模型或僅從層次信息結(jié)構(gòu)地導(dǎo)出模型考察問(wèn)題的方式,OOA引入了一系列新概念。這些新概念看上去可能有一些不尋常,但是它們實(shí)際是相當(dāng)自然的。Coad和Yourdon[COA91]對(duì)該問(wèn)題有如下論述:些不尋常,但是它們實(shí)際是相當(dāng)自然的。Coad和Yourdon[COA91]對(duì)該問(wèn)題有如下論述:
OOA(面向?qū)ο蠓治?是基于我們?cè)谟變簣@首先學(xué)到的概念:對(duì)象和屬性、類和成員、整體和部分。為什么我們花了這么長(zhǎng)的時(shí)間才將這些概念應(yīng)用于信息系統(tǒng)的分析和規(guī)約——也許是由于我們忙于在結(jié)構(gòu)化分析的全盛時(shí)期“跟隨潮流”而未曾考慮其他的選擇。
重要的是要注意:對(duì)作為OOA基礎(chǔ)的“概念”,不存在一致的共識(shí),但是一些關(guān)鍵思想重復(fù)地出現(xiàn),這些正是我們將在本章中考慮的。
20.1面向?qū)ο蟮姆治?BR> 面向?qū)ο蟮姆治龅哪繕?biāo)是開(kāi)發(fā)一系列模型,這些模型被用來(lái)描述以滿足一組客戶需求的計(jì)算機(jī)軟件。OOA和在第12章描述的傳統(tǒng)分析方法一樣,建造一個(gè)多部分的分析模型以滿足這個(gè)目標(biāo)。分析模型(在第19章描述的對(duì)象模型的元素的語(yǔ)境內(nèi))描述信息、功能和行為。
20.1.1傳統(tǒng)方法和OO方法
面向?qū)ο蠓治鍪欠翊_實(shí)不同于在第12章討論的結(jié)構(gòu)化分析方法?雖然爭(zhēng)論仍在繼續(xù),F(xiàn)ichman和Kemerer[FIC92]正面地闡述了這個(gè)問(wèn)題:夠治齜椒??虽然争论仍栽偨{*
我們的結(jié)論是面向?qū)ο蠓治龇椒ù砹讼鄬?duì)于面向過(guò)程的方法學(xué)(如結(jié)構(gòu)化分析)的根本性變化,但相對(duì)于面向數(shù)據(jù)的方法學(xué)(如信息工程方法)僅僅是適當(dāng)增補(bǔ)。面向過(guò)程的方法學(xué)在建模過(guò)程中的關(guān)注點(diǎn)不是對(duì)象的內(nèi)在性質(zhì),從而導(dǎo)致了和面向?qū)ο蟮娜齻€(gè)基本原則(封裝、對(duì)象分類和繼承)相正交的問(wèn)題域模型。
簡(jiǎn)而言之,結(jié)構(gòu)化分析對(duì)需求采用獨(dú)特的“輸入-加工-輸出”視角,數(shù)據(jù)被脫離數(shù)據(jù)的變換過(guò)程而單獨(dú)考慮,系統(tǒng)行為雖然是重要的,但在結(jié)構(gòu)化分析中往往扮演第二位的角色。結(jié)構(gòu)化分析方法著重于功能分解的使用(數(shù)據(jù)流圖的劃分,第12章)。
Fichman和Kemerer[FIC92]建議了11個(gè)“建模維數(shù)(modeling dimensions)”,可用它們來(lái)比較各種傳統(tǒng)的和面向?qū)ο蟮姆治龇椒ǎ?BR> 1.實(shí)體的標(biāo)識(shí)/分類①。
2.一般到特殊以及整體到部分的實(shí)體關(guān)系。
3.其他實(shí)體關(guān)系。
4.實(shí)體屬性的描述。
5.大型模型的劃分。
6.狀態(tài)和狀態(tài)間的變遷。
7.功能的詳細(xì)刻劃。
8.自上向下的分解。
9.端到端的處理序列。
10.排它性服務(wù)的標(biāo)識(shí)。
11.實(shí)體通信(通過(guò)消息或事件)。
因?yàn)榻Y(jié)構(gòu)化分析方法及OOA方法(見(jiàn)20.1.2節(jié))均有很多種,所以很難在兩種方法間進(jìn)行一般性的比較。然而,可以確定,建模維數(shù)8和9總是在結(jié)構(gòu)化分析中出現(xiàn),而很少在OOA中使用。
20.1.2 OOA概述
對(duì)象技術(shù)的流行已經(jīng)衍生出許多的OOA方法②,每個(gè)方法都引入一個(gè)產(chǎn)品或系統(tǒng)分析的過(guò)程、一組隨過(guò)程演化的模型、以及使得軟件工程師能夠以一致的方式創(chuàng)建模型的符號(hào)體系。在下面篇幅中,概略地討論了某些流行的OOA方法③,其意圖是提供一個(gè)由方法的作者建議的OOA過(guò)程④的概覽。
Booch方法
Booch方法[BOO94]包含“微開(kāi)發(fā)過(guò)程”和“宏開(kāi)發(fā)過(guò)程”兩個(gè)過(guò)程,微級(jí)別定義了一組在宏過(guò)程中的每一步反復(fù)應(yīng)用的分析任務(wù),因此,演進(jìn)途徑得以維持。Booch方法得到了一系列自動(dòng)工具的支持。Booch的OOA宏觀開(kāi)發(fā)過(guò)程概述如下:
·標(biāo)識(shí)類和對(duì)象
提出候選對(duì)象
進(jìn)行行為分析
標(biāo)識(shí)相關(guān)場(chǎng)景
為每個(gè)類定義屬性和操作
·標(biāo)識(shí)類和對(duì)象的語(yǔ)義
選擇場(chǎng)景并分析
賦予責(zé)任以完成希望的行為
劃分責(zé)任以平衡行為
選擇一個(gè)對(duì)象,枚舉其角色和責(zé)任
定義操作以滿足責(zé)任
尋找對(duì)象間的協(xié)作
·標(biāo)識(shí)類和對(duì)象間的關(guān)系
定義對(duì)象間存在的依賴
描述每個(gè)參與對(duì)象的角色
通過(guò)走查場(chǎng)景進(jìn)行確認(rèn)