軟件工程:實踐者的研究方法第20章面向?qū)ο蠓治?/h1>

字號:

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