軟件工程學(xué)課件_第1頁
軟件工程學(xué)課件_第2頁
軟件工程學(xué)課件_第3頁
軟件工程學(xué)課件_第4頁
軟件工程學(xué)課件_第5頁
已閱讀5頁,還剩244頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、軟件工程學(xué)9.1 面向?qū)ο蟮母拍?.2 面向?qū)ο蟮拈_發(fā)過程9.3 面向?qū)ο蠓治雠c模型化9.4 面向?qū)ο笤O(shè)計(jì)9.5 面向?qū)ο蟪绦虻膶?shí)現(xiàn)與測試第9章 面向?qū)ο蠹夹g(shù)9.1面向?qū)ο蟮母拍铋_發(fā)模式什么是面向?qū)ο髮ο箢惱^承開發(fā)模式(Paradigm)開發(fā)模式又稱為范型、范例、風(fēng)范或模式(Pattern)。開發(fā)模式定義了特定問題和應(yīng)用的開發(fā)過程中將遵循的步驟;確定將用于表示問題和解的那些成分的類型;利用這些成分表示與問題解決有關(guān)的抽象;直接得到問題的結(jié)構(gòu)。開發(fā)模式的選擇影響到整個(gè)軟件開發(fā)生存期。就是說,它支配了設(shè)計(jì)方法編碼語言測試和檢驗(yàn)技術(shù)的選擇面向過程開發(fā)模式面向過程開發(fā)模式產(chǎn)生過程的抽象。這些抽象的基礎(chǔ)

2、是把軟件視為處理流,并定義成由一系列步驟構(gòu)成的算法。每一步驟都是帶有預(yù)定輸入和特定輸出的一個(gè)過程,把這些步驟串聯(lián)在一起可產(chǎn)生合理的穩(wěn)定的貫通于整個(gè)程序的控制流,最終產(chǎn)生一個(gè)簡單的具有靜態(tài)結(jié)構(gòu)的體系結(jié)構(gòu)。面向過程開發(fā)模式的特點(diǎn)過程性開發(fā)模式側(cè)重建立構(gòu)成問題解決的處理流。數(shù)據(jù)抽象、數(shù)據(jù)結(jié)構(gòu)根據(jù)算法步驟的要求開發(fā),它貫穿于過程,提供過程所要求操作的信息。系統(tǒng)的狀態(tài)是一組全局變量,這組全局變量保存狀態(tài)的值,把它們從一個(gè)過程傳送到另一個(gè)過程。 Initialize system; Create and draw interface; while QUIT not selected do caseMous

3、e event: create shape structure; read mouse movements for data; store newly created shape on list of shape records; KeyPress event: if key = q then exit loop; else ignore; Ecpose event: refresh display by drawing each shape structure; Shut down system;面向?qū)ο箝_發(fā)模式在面向過程開發(fā)模式中優(yōu)先考慮的是過程抽象,在面向?qū)ο箝_發(fā)模式中優(yōu)先考慮的是實(shí)體(

4、問題論域的對象)。在面向?qū)ο箝_發(fā)模式中,把標(biāo)識和模型化問題論域中的主要實(shí)體做為系統(tǒng)開發(fā)的起點(diǎn),主要考慮對象的行為而不是必須執(zhí)行的一系列動作。面向?qū)ο箝_發(fā)模式的特點(diǎn)面向?qū)ο笙到y(tǒng)中的對象是數(shù)據(jù)抽象與過程抽象的綜合。系統(tǒng)的狀態(tài)保存在各個(gè)數(shù)據(jù)抽象的所定義的數(shù)據(jù)存儲中。控制流包含在各個(gè)數(shù)據(jù)抽象中的操作內(nèi)。在面向?qū)ο篌w系結(jié)構(gòu)。消息從一個(gè)對象傳送到另一個(gè)對象。算法被分布到各種實(shí)體中。其它流行的開發(fā)模式目前流行多種開發(fā)模式,它們提供了許多方法,可進(jìn)行系統(tǒng)分解。 面向過程的; 邏輯的; 面向存取的; 面向進(jìn)程的; 面向?qū)ο蟮模?函數(shù)型的; 說明性的。每個(gè)開發(fā)模式都有它的支持者和用戶;每個(gè)開發(fā)模式都特別適合于某種

5、類型的問題或子問題;每一個(gè)開發(fā)模式都用不同的方式考慮問題;每一個(gè)開發(fā)模式都使用不同的方法來分解問題;每一個(gè)開發(fā)模式都導(dǎo)致不同種類的塊、過程、產(chǎn)生規(guī)則。混合開發(fā)模式在大型系統(tǒng)的開發(fā)中,很難說哪種開發(fā)模式對整個(gè)問題的解決最好。系統(tǒng)開發(fā)時(shí),通常把大型問題分解成一組子問題。對于每個(gè)子問題可以采用適當(dāng)?shù)能浖_發(fā)模式。這種設(shè)計(jì)需要有某種實(shí)現(xiàn)語言或一組協(xié)同語言的支持。許多流行的功能不斷增強(qiáng)的語言可支持不只一種設(shè)計(jì)開發(fā)模式。一個(gè)智能數(shù)據(jù)分析系統(tǒng)的設(shè)計(jì),可把它看做是 4 個(gè)子系統(tǒng)。系統(tǒng)有一個(gè)數(shù)據(jù)庫界面,可以使用面向存取的方法進(jìn)行設(shè)計(jì);智能數(shù)據(jù)分析用邏輯性的開發(fā)模式設(shè)計(jì);一組分析算法是過程性的;用戶界面是用面向?qū)?/p>

6、象開發(fā)模式設(shè)計(jì)出來的。什么是面向?qū)ο驝oad和Yourdon給出了一個(gè)定義:“面向?qū)ο?對象+類+繼承+通信”。如果一個(gè)軟件系統(tǒng)是使用這樣 4 個(gè)概念設(shè)計(jì)和實(shí)現(xiàn)的,則我們認(rèn)為這個(gè)軟件系統(tǒng)是面向?qū)ο蟮?。一個(gè)面向?qū)ο蟮某绦虻拿恳怀煞輵?yīng)是對象,計(jì)算是通過新的對象的建立和對象之間的通信來執(zhí)行的。對象(object)對象是面向?qū)ο箝_發(fā)模式的基本成份。每個(gè)對象可用它本身的一組屬性和它可以執(zhí)行的一組操作來定義。屬性一般只能通過執(zhí)行對象的操作來改變。操作又稱為方法或服務(wù),它描述了對象執(zhí)行的功能,若通過消息傳遞,還可以為其它對象使用。消息(Message)消息是一個(gè)對象與另一個(gè)對象的通信單元,是要求某個(gè)對象執(zhí)行

7、類中定義的某個(gè)操作的規(guī)格說明。發(fā)送給一個(gè)對象的消息定義了一個(gè)方法名和一個(gè)參數(shù)表(可能是空的),并指定某一個(gè)對象。一個(gè)對象接收的消息則調(diào)用消息中指定的方法,并將形式參數(shù)與參數(shù)表中相應(yīng)的值結(jié)合起來。類(class)類是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作的對象的集合。類的定義包括一組數(shù)據(jù)屬性和在數(shù)據(jù)上的一組合法操作。類定義可以視為一個(gè)具有類似特性與共同行為的對象的模板,可用來產(chǎn)生對象。在一個(gè)類中,每個(gè)對象都是類的實(shí)例 (Instance),它們都可使用類中提供的函數(shù)。對象的狀態(tài)則包含在它的實(shí)例變量,即實(shí)例的屬性中。 類 兩個(gè)四邊形對象Quadrilateral類的每個(gè)對象有同樣的一組實(shí)例變量和方法。就這

8、個(gè)意義來講,類Quadrilateral給我們提供了一個(gè)模板,表示了所有四邊形對象。類常??煽醋鍪且粋€(gè)抽象數(shù)據(jù)類型(ADT)的實(shí)現(xiàn)。但更合適的是把類看做是某種概念的模型。類的實(shí)現(xiàn)常常使用其它類的實(shí)例,它們提供了該類所需要的服務(wù)。這些實(shí)例應(yīng)當(dāng)受到保護(hù)不被其它對象存取,包括同一個(gè)類的其它實(shí)例。在四邊形的例子中,定義4個(gè)point類的實(shí)例作為Quadrilateral類的實(shí)例的4個(gè)頂點(diǎn)。這些point對象不能被其它對象存取。繼承 (Inheritance)繼承是使用已存在的定義做為基礎(chǔ)建立新定義的技術(shù)。新類的定義可以是既存類所聲明的數(shù)據(jù)和新類所增加的聲明的組合。新類復(fù)用既存的定義,而不要求修改既存類

9、。既存類可當(dāng)做基類來引用,則新類相應(yīng)地可當(dāng)做派生類來引用。使用繼承設(shè)計(jì)一個(gè)新類,可以視為描述一個(gè)新的對象集,它是既存類所描述對象集的子集合。這個(gè)新的子集合可以認(rèn)為是既存類的一個(gè)特殊化。Quadrilateral類是Polygon類的特殊化。Quadrilateral是限制為四條邊的多邊形。我們還可以進(jìn)一步地把類Quadrilateral特殊化為Rectangle 。類Quadrilateral的界面可以等同于類Polygon的界面,而Rectangle類的界面又與Quadrilateral類的界面相同。新類的界面還可以被看做是既存類界面的一個(gè)擴(kuò)充界面。例如,從一個(gè)既存的車輛類派生的四輪驅(qū)動車類

10、可能不僅是車輛類子集合定義的特殊化,而且還可能在新類的界面中引入新的能力。類的繼承層次在類的繼承層次中,Quadrilateral的實(shí)際參數(shù)可以替換Polygon的形式參數(shù)。類Quadrilateral的界面與類Polygon的界面是相容的Quadrilateral的界面可響應(yīng)Polygon界面的所有消息。 9.2面向?qū)ο蠓椒ǖ拈_發(fā)過程面向?qū)ο蠓椒ǜ倪M(jìn)了在生存期各個(gè)階段之間的接口,因?yàn)樵谏嫫诟鱾€(gè)階段所開發(fā)出來的“部件”都是類。在面向?qū)ο笊嫫诘母鱾€(gè)階段對各個(gè)類的信息進(jìn)行細(xì)化,類成為分析、設(shè)計(jì)和實(shí)現(xiàn)的基本單元。應(yīng)用生存期類生存期復(fù)用 (Reusable)在軟件開發(fā)中,復(fù)用扮演了重要角色。軟件部

11、件應(yīng)當(dāng)獨(dú)立于當(dāng)初開發(fā)它們的應(yīng)用而存在。部件的開發(fā)瞄準(zhǔn)某些局部的設(shè)計(jì)和實(shí)現(xiàn),它們能夠幫助當(dāng)前問題的解決,但為了在以后的項(xiàng)目中使用,它們還應(yīng)當(dāng)足夠通用。類就是一個(gè)希望能夠復(fù)用的單元,因此,提出了一個(gè)“類生存期”。類生存期是與應(yīng)用生存期是交叉的。即就是說,類的標(biāo)識是應(yīng)用生存期的一個(gè)階段,但類生存期的步驟獨(dú)立于任一特殊應(yīng)用的開發(fā)。類的開發(fā)應(yīng)能完整地描述一個(gè)基本實(shí)體。而不僅僅考慮當(dāng)前正在開發(fā)的系統(tǒng)。類的定義一旦標(biāo)識了一個(gè)類,就給出了它的規(guī)格說明,其中包括類的實(shí)例可執(zhí)行的操作和它們的數(shù)據(jù)表示。對每一個(gè),無論是在哪一個(gè)階段標(biāo)識的類都是如此。對于那些使應(yīng)用與數(shù)據(jù)庫交互的類來說,其規(guī)格說明應(yīng)當(dāng)包括查找數(shù)據(jù)庫和向

12、數(shù)據(jù)庫加入數(shù)據(jù)的行為。類的規(guī)格說明定義了施加于對象的數(shù)據(jù)存儲上的一組操作。這組操作應(yīng)工作在封裝在對象內(nèi)部的數(shù)據(jù)存儲上,或返回關(guān)于對象狀態(tài)的信息。操作的名字應(yīng)能反映這個(gè)操作本身的含義。類的設(shè)計(jì)與實(shí)現(xiàn)類的規(guī)格說明可指導(dǎo)對存放既存類的軟件庫進(jìn)行查找,這些既存類可用來提供為當(dāng)前應(yīng)用所需要的功能。三個(gè)可能的利用既存類的方向。開發(fā)過程可能依賴于這種查找的結(jié)果。 既存類的復(fù)用 從既存類進(jìn)行演化 從廢棄型進(jìn)行開發(fā)實(shí)現(xiàn)通過變量的聲明、操作界面的實(shí)現(xiàn)及支持界面操作的函數(shù)的實(shí)現(xiàn),可實(shí)現(xiàn)一個(gè)類的預(yù)期行為和狀態(tài)。實(shí)現(xiàn)是與語言有關(guān)的。一個(gè)好的面向?qū)ο笳Z言應(yīng)當(dāng)分離共有界面與其內(nèi)部實(shí)現(xiàn)。采取必要措施分別編譯界面和內(nèi)部表示。測

13、試單個(gè)的類為測試提供了自然的單元。如果類的定義提供的界面比較狹窄,那么窮舉測試就有可能實(shí)現(xiàn)。類的測試在最抽象的層次開始,沿繼承關(guān)系繼續(xù)向下進(jìn)行。已經(jīng)測試過的部分不需要從新測試。重點(diǎn)放在對新類的測試和組裝測試。求精和維護(hù)這是一個(gè)在軟件生存期中最花費(fèi)時(shí)間的部分。傳統(tǒng)的維護(hù)活動是針對應(yīng)用的,而求精過程是針對類,針對把類集成在一起的結(jié)構(gòu)。我們可以標(biāo)識抽象的抽象,使得繼承結(jié)構(gòu)通過一般化增加新的層次,即在既存的根類之上增加新的層次。概念的封裝和實(shí)現(xiàn)的隱蔽概念的封裝和實(shí)現(xiàn)的隱蔽,使得類具有更大的獨(dú)立性。在任一時(shí)刻都可以在類的界面上增加新的操作,并能夠修改實(shí)現(xiàn),以改進(jìn)性能,或引入原來設(shè)計(jì)中沒有的新服務(wù)。為便于

14、類的調(diào)整,應(yīng)盡量做到定義與實(shí)現(xiàn)分離。對一個(gè)類的共有界面的實(shí)現(xiàn)所做的多次修改不應(yīng)影響利用它的那些類。9.3面向?qū)ο蠓治雠c模型化面向?qū)ο蠓治鍪擒浖_發(fā)過程中的問題定義階段。這一階段最后得到的是對問題論域的清晰、精確的定義。分析階段包括兩個(gè)步驟:論域分析和應(yīng)用分析。它們都要標(biāo)識問題論域中的抽象。在分析中,需要 找到特定對象 基于對象的公共特性組合它們 標(biāo)識出對這個(gè)問題的抽象在分析階段中要標(biāo)識 抽象之間的關(guān)系這些關(guān)系在應(yīng)用系統(tǒng)中常常用對象之間的消息來表示,叫做消息連接。在一個(gè)面向?qū)ο蟮膽?yīng)用中的控制流由兩部分構(gòu)成: 每個(gè)單獨(dú)操作內(nèi)部的控制流 對象之間的消息模式面向?qū)ο蠓治鲞^程分兩階段: 論域分析 應(yīng)用分

15、析論域分析論域分析開發(fā)問題論域的模型考察問題論域內(nèi)的一個(gè)較寬的范圍,分析覆蓋的范圍應(yīng)比直接要解決的問題更多。建立大致的系統(tǒng)實(shí)現(xiàn)環(huán)境應(yīng)用分析應(yīng)用分析則根據(jù)特定應(yīng)用的需求進(jìn)行論域分析。應(yīng)用(或系統(tǒng))分析細(xì)化在論域分析階段所開發(fā)出來的信息,把注意力集中于當(dāng)前要解決的問題。語義數(shù)據(jù)模型語義數(shù)據(jù)模型是一種特別適用的建立構(gòu)成問題論域模型的技術(shù)。它基于實(shí)體關(guān)系模型,并對這類模型進(jìn)行了擴(kuò)充和一般化。語義數(shù)據(jù)模型可以表達(dá)問題論域的內(nèi)涵,還可以表示復(fù)雜的對象和對象之間的關(guān)系。語義數(shù)據(jù)模型與面向?qū)ο蠓椒ㄍ獠磕P蛯臃从硲?yīng)用的外部現(xiàn)實(shí)世界的視圖,它體現(xiàn)了用戶對問題的理解。概念模型層考慮在外部模型層所標(biāo)識的實(shí)體之間的關(guān)系

16、。這些關(guān)系都是可直接觀察到的交互關(guān)系。內(nèi)部模型層考慮實(shí)體的物理模型,就是我們生存期中的類設(shè)計(jì)階段。物理模型包括的屬性物理模型包括兩類屬性: 方法:對實(shí)體的行為模型化 數(shù)據(jù):對實(shí)體的狀態(tài)模型化在模型中方法分為兩種: 共有的 私有的在分析階段標(biāo)識的屬性是描述性的,在語義數(shù)據(jù)模型中的關(guān)系一般化和特殊化關(guān)系可用來按層次漸增式地定義抽象(類)。低層抽象是高層抽象的特殊化。這種抽象層次構(gòu)成論域模型的基礎(chǔ)。例如,小汽車,卡車和公共汽車可以歸于更一般的概念汽車中。從這個(gè)較一般化的概念汽車可以定義其它較特殊的抽象:賽車,面包車和牽引車。聚合關(guān)系支持使用幾個(gè)其它較小和較簡單的抽象來開發(fā)一個(gè)抽象。它相應(yīng)于一個(gè)記錄中

17、成份的聲明。例如,一個(gè)航班可以有6個(gè)屬性:飛機(jī)編號、機(jī)組編號、離開和到達(dá)地點(diǎn)、起飛和降落時(shí)間。因此,航班類有一個(gè)聚合關(guān)系,它利用了表示飛機(jī)、人員、空間的類,并增加了時(shí)間窗口。關(guān)聯(lián)關(guān)系指定一個(gè)抽象做為其它抽象實(shí)例的包容(container)。關(guān)聯(lián)和聚合之間的差別在于組合實(shí)體的意圖。聚合指定一組實(shí)體中的某些元素做為一個(gè)類的組成,而關(guān)聯(lián)是指群集的相互有關(guān)聯(lián)的實(shí)體群。例如,一個(gè)部門包含有人,這樣一個(gè)部門關(guān)聯(lián)了所有被分配給這個(gè)部門的人。,這些人在系統(tǒng)其它地方也可能出現(xiàn)。對象模型化技術(shù)OMT對象模型化技術(shù)把分析時(shí)收集的信息構(gòu)造在三類模型中,即對象模型、功能模型和動態(tài)模型。這個(gè)模型化的過程是一個(gè)迭代過程。對

18、象模型是三個(gè)模型中最關(guān)鍵的一個(gè)模型,它的作用是描述系統(tǒng)的靜態(tài)結(jié)構(gòu),包括構(gòu)成系統(tǒng)的類和對象,它們的屬性和操作,及它們之間的關(guān)系。在OMT中,類與類之間的關(guān)系叫做關(guān)聯(lián)。關(guān)聯(lián)代表一組存在于兩個(gè)或多個(gè)對象之間的、具有相同結(jié)構(gòu)和含義的具體連接。關(guān)聯(lián)可以是物理的,也可以是邏輯的。聚合,代表整體與部分的關(guān)系,這是一種特殊形式的關(guān)聯(lián)。限定,用以對關(guān)聯(lián)的含義做某種約束。角色,用來說明關(guān)聯(lián)的一端。由于多數(shù)關(guān)聯(lián)具有兩個(gè)端點(diǎn),因而涉及到兩個(gè)角色。附加的說明對象之間的連接的連接屬性。一般化關(guān)系也稱為繼承性。一般化關(guān)系包含基類和幾個(gè)派生類。基類表示了一個(gè)較為一般、普遍的概念每個(gè)派生類則是它的某個(gè)特殊形態(tài)派生類除了自然地繼

19、承基類所具有的屬性和操作外,還具有反映自身特點(diǎn)的屬性和操作。動態(tài)模型要想對一個(gè)系統(tǒng)了解得比較清楚,還應(yīng)當(dāng)考察在任何時(shí)刻對象及其關(guān)系的改變。系統(tǒng)的這些涉及時(shí)序和改變狀況用動態(tài)模型來描述。動態(tài)模型著重于系統(tǒng)的控制邏輯。它包括兩個(gè)圖,一是狀態(tài)圖,一是事件追蹤圖。狀態(tài)圖狀態(tài)圖是一個(gè)狀態(tài)和事件的網(wǎng)絡(luò),側(cè)重于描述每一類對象的動態(tài)行為。在狀態(tài)圖中,狀態(tài)是對某一時(shí)刻中屬性特征的概括。而狀態(tài)遷移表示這一類對象在何時(shí)對系統(tǒng)內(nèi)外發(fā)生的哪些事件做出何種響應(yīng)。操作是一個(gè)伴隨狀態(tài)遷移的瞬時(shí)發(fā)生的行為,與觸發(fā)事件一起表示在有關(guān)的狀態(tài)遷移之上?;顒觿t是發(fā)生在某個(gè)狀態(tài)中的行為,往往需要一定的時(shí)間來完成,因此與狀態(tài)名一起出現(xiàn)在有

20、關(guān)的狀態(tài)之中。動態(tài)模型由多個(gè)狀態(tài)圖組成。對于每一個(gè)具有重要?jiǎng)討B(tài)行為的類都有一個(gè)狀態(tài)圖,從而表明所有系統(tǒng)活動的模式。各個(gè)狀態(tài)圖并發(fā)地執(zhí)行,并可以獨(dú)立地改變狀態(tài)。各種類的狀態(tài)圖可以通過共享事件組合到一個(gè)動態(tài)模型中。事件一個(gè)事件發(fā)生在某一時(shí)刻每個(gè)事件都是單獨(dú)發(fā)生的我們建立事件類,并給每個(gè)事件一個(gè)名字,以指明共同結(jié)構(gòu)和行為。事件從一個(gè)對象向另一個(gè)對象傳送信息。有些事件類可能傳送的是簡單的信號“要發(fā)生某件事”,而有些事件類則可能傳送的是數(shù)據(jù)值。由事件傳送的數(shù)據(jù)值叫做屬性。 列車出發(fā)(線路、班次、城市) 撳下鼠標(biāo)按鈕(按鈕、位置) 拿起電話受話器 數(shù)字撥號(數(shù)字)事件追蹤圖事件追蹤圖側(cè)重于說明發(fā)生于系統(tǒng)執(zhí)

21、行過程中的一個(gè)特定“場景”。場景也叫做腳本,是完成系統(tǒng)某個(gè)功能的一個(gè)事件序列。場景通常起始于一個(gè)系統(tǒng)外部的輸入事件,結(jié)束于一個(gè)系統(tǒng)外部的輸出事件,它可以包括發(fā)生在這個(gè)期間的系統(tǒng)所有的內(nèi)部事件。打打電電話話者者拿拿起起電電話話受受話話器器電電話話忙忙音音開開始始打打電電話話者者撥撥數(shù)數(shù)字字(88)電電話話忙忙音音結(jié)結(jié)束束打打電電話話者者撥撥數(shù)數(shù)字字(22).打打電電話話者者撥撥數(shù)數(shù)字字(33)接接電電話話者者的的電電話話開開始始振振鈴鈴鈴鈴聲聲在在打打電電話話者者的的電電話話上上傳傳出出接接電電話話者者回回答答接接電電話話者者的的電電話話停停止止振振鈴鈴鈴鈴聲聲在在打打電電話話者者的的電電話話中

22、中消消失失通通電電話話.狀態(tài)圖與事件追蹤圖的關(guān)系狀態(tài)圖敘述一個(gè)對象的個(gè)體行為,事件追蹤圖則給出多個(gè)對象所表現(xiàn)出來的集體行為。它們從不同側(cè)面來說明同一系統(tǒng)的行為。例如,一個(gè)事件追蹤圖指出某一對象在接受一個(gè)事件之后發(fā)出另一事件,同一行為在此對象的狀態(tài)圖中也應(yīng)當(dāng)有所表示。功能模型功能模型表明,通過計(jì)算,從輸入數(shù)據(jù)能得到什么樣的輸出數(shù)據(jù),不考慮參加計(jì)算的數(shù)據(jù)按什么時(shí)序執(zhí)行。功能模型由多個(gè)數(shù)據(jù)流圖組成,它們指明從外部輸入,通過操作和內(nèi)部存儲,直到外部輸出,這整個(gè)的數(shù)據(jù)流情況。功能模型中所有的數(shù)據(jù)流圖往往形成一個(gè)層次結(jié)構(gòu)。在這個(gè)層次結(jié)構(gòu)中,一個(gè)數(shù)據(jù)流圖中的過程可以由下一層的數(shù)據(jù)流圖做進(jìn)一步的說明。一般來講

23、,高層的過程相應(yīng)于作用在聚合對象上的操作,而低層的過程則代表作用于一個(gè)簡單對象上的操作。數(shù)據(jù)流圖中允許加入控制流,但這樣做將與動態(tài)模型重復(fù),不提倡夾帶控制流?;谌齻€(gè)模型的分析過程功能模型著重于系統(tǒng)內(nèi)部數(shù)據(jù)的傳送和處理。 功能模型定義“做什么” 動態(tài)模型定義“何時(shí)做” 對象模型定義“對誰做”。Coad與Yourdon面向?qū)ο蠓治鯫OA有兩個(gè)任務(wù) 形式地說明我們所面對的應(yīng)用問題,最終成為軟件系統(tǒng)基本構(gòu)成的對象,還有系統(tǒng)所必須遵從的,由應(yīng)用環(huán)境所決定的規(guī)則和約束。 明確地規(guī)定構(gòu)成系統(tǒng)的對象如何協(xié)同合作,完成指定的功能。OOA概念模型通過OOA建立的系統(tǒng)模型是以概念為中心的,因此稱為概念模型。這樣的

24、模型由一組相關(guān)的類組成。軟件規(guī)格說明就是基于這樣的概念模型形成的,以模型描述為基本部分,再加上接口要求、性能限制等其它方面的要求說明。構(gòu)造OOA概念模型的層次構(gòu)造和評審OOA概念模型的順序和由五個(gè)層次組成。這五個(gè)層次是分析過程中的層次。每個(gè)層次的工作都為系統(tǒng)的規(guī)格說明增加了一個(gè)組成部分。這五個(gè)層次是:類與對象、屬性、服務(wù)、結(jié)構(gòu)和主題。識別類和對象面向?qū)ο蠓治龅牡谝粋€(gè)層次主要是識別類和對象。類和對象是對與應(yīng)用有關(guān)的概念的抽象。不僅是說明應(yīng)用問題的重要手段,同時(shí)也是構(gòu)成軟件系統(tǒng)的基本元素。這一層工作是整個(gè)分析模型的基礎(chǔ)。選擇類和對象的原則:目標(biāo)系統(tǒng)必須記住類和對象的某些 事情類和對象應(yīng)當(dāng)提供某些服

25、務(wù)或處理多屬性所有屬性對于類中所有實(shí)例都應(yīng)有意義對象類應(yīng)表示問題論域的需求基于語言的信息分析在發(fā)現(xiàn)對象過程中,可以使用一種十分有用的工具,即LIA(基于語言的信息分析)。LIA的目的是標(biāo)識出問題論域的所有概念及這些概念之間的關(guān)系。 短語頻率分析(PFA) 矩陣分析(MA)。資源庫資源庫包括相關(guān)文件、模型、軟件、人員以及包含問題論域或系統(tǒng)知識的其它資源。如果問題論域有參考材料(教材、慣例、操作過程等),這些材料必須包含在資源庫中。資源庫包括其它一些信息:訪問記錄、形式的或非形式的系統(tǒng)規(guī)格說明、 已有的或相關(guān)系統(tǒng)的用戶手冊、日志(如系統(tǒng)變更請求或問題報(bào)告)。LIA技術(shù)通常只應(yīng)用于資源庫的某個(gè)子集。

26、這取決于分析員想把什么樣的視圖用于問題論域或應(yīng)用系統(tǒng)。通常,根據(jù)與問題論域有關(guān)的資源建立起來的結(jié)果與根據(jù)目標(biāo)系統(tǒng)的規(guī)格說明有關(guān)的資源建立起來的結(jié)果會有所不同。短語頻率分析 PFA短語頻率分析搜索選定的問題陳述,標(biāo)識可以表示問題論域概念的術(shù)語。PFA清單的建立基本上是一個(gè)客觀的過程。但可能大多數(shù)標(biāo)識出來的概念是與目標(biāo)系統(tǒng)無關(guān)的。PFA的優(yōu)點(diǎn)就在于能廣泛地標(biāo)識問題論域的概念集合,并對它們進(jìn)行評估,判定哪些與目標(biāo)軟件無關(guān)。PFA將名詞和動詞標(biāo)識為候選實(shí)體和屬性。但由于名詞動詞的標(biāo)識是非常主觀的,可根據(jù)什么是名詞或動詞,以及根據(jù)分析員的理解,才能確定哪些名詞或動詞是要找的。PFA是標(biāo)識概念而不是標(biāo)識語

27、法單元。所建立的PFA清單并不受建立清單的人的很大影響。對于任一有用的應(yīng)用論域資源,PFA可能會產(chǎn)生一個(gè)長長的概念的清單。許多被標(biāo)識出的概念因與目標(biāo)軟件無關(guān)而被丟棄,但其它的則會成為OOA模型的成份,包括對象。標(biāo)識結(jié)構(gòu)面向?qū)ο蠓治龅南乱徊焦ぷ魇菢?biāo)識結(jié)構(gòu)。典型的結(jié)構(gòu)有兩種: 一般化-特殊化結(jié)構(gòu)(Gen-Spec結(jié)構(gòu)) 整體-部分結(jié)構(gòu)(Whole-Part結(jié)構(gòu))一般化-特殊化結(jié)構(gòu)整體-部分結(jié)構(gòu)以特殊化的視點(diǎn)來看,一個(gè)Gen-Spec結(jié)構(gòu)可以看作是“is a”或“is a kind of”結(jié)構(gòu)。例如, a Truck Vehicle is a Vehicle a Truck Vehicle is a

28、 kind of Vehicle在Gen-Spec結(jié)構(gòu)中,使用繼承將較一般化的屬性和服務(wù)放在一般化的類和對象中。從整體的視點(diǎn)來看,一個(gè)Whole-Part結(jié)構(gòu)可看作一個(gè)“has a”或“is a part of”結(jié)構(gòu)。例如, Vehicle has a Engine Engine is a part of Vehicle其中,Vehicle是整體對象,Engine是局部對象。標(biāo)識Gen-Spec結(jié)構(gòu)的方法和策略對于每一個(gè)類和對象,將它看作是一個(gè)一般化的類,對它的所有特殊情況,考慮以下問題: 它是否在問題論域中? 它是否在系統(tǒng)的職責(zé)內(nèi)? 繼承性是否存在? 它是否能夠符合選擇類和對象的標(biāo)準(zhǔn)?同樣地

29、,把每一個(gè)類和對象置于特殊化對象的地位,對于它所有的一般化情形,考慮上述4個(gè)問題。檢查以前在相同或類似問題論域中面向?qū)ο蠓治龅慕Y(jié)果,看是否有可直接復(fù)用的Gen-Spec結(jié)構(gòu)。如果一個(gè)一般化對象可能有多個(gè)特殊化對象,應(yīng)當(dāng)先考慮最簡單的特殊化對象和最復(fù)雜的特殊化對象,然后再考慮中間其他的特殊化對象。標(biāo)識Whole-Part結(jié)構(gòu)的方法和策略應(yīng)當(dāng)尋找什么 總體-部分(Assembly-Parts)關(guān)聯(lián),如飛機(jī)-發(fā)動機(jī)之間的關(guān)系。 包容-內(nèi)含(Container-Content)關(guān)聯(lián),如飛機(jī)-飛行員之間的關(guān)系。 收集-成員(Collection-Members)關(guān)聯(lián),如機(jī)構(gòu)-職員之間的關(guān)系。將每一個(gè)類看

30、作是一個(gè)Whole類,對它的所有可能Parts情況,考慮以下問題: 它是否在問題論域中? 它是否在系統(tǒng)的職責(zé)內(nèi)? 它是否代表一個(gè)以上的狀態(tài)值? 若不是,是否將它變?yōu)閃hole中的一個(gè)屬性? 它是否提供問題論域中有用的抽象?同樣地,把每一個(gè)類置于Part 的地位,對于它所有的Whole情形,考慮上述5個(gè)問題。檢查以前在相同或類似問題論域中面向?qū)ο蠓治龅慕Y(jié)果,看是否有可直接復(fù)用的Whole-Parts結(jié)構(gòu)。標(biāo)識屬性下一個(gè)層次稱為屬性層,對前面已識別的類和對象做進(jìn)一步的說明。在這里,對象所保存的信息稱為它的屬性。類的屬性所描述的是狀態(tài)信息,每個(gè)實(shí)例的屬性值表達(dá)了該實(shí)例的狀態(tài)值。標(biāo)識屬性的方法和策略找

31、出屬性將屬性安放到適當(dāng)?shù)奈恢谜页鰧?shí)例連接檢查特殊情況描述屬性考慮取值范圍、極限值、缺省值、建立和存取權(quán)限、精確度、是否會受到其他屬性值等。屬性層實(shí)例連接關(guān)系的標(biāo)識定義服務(wù)對象收到消息后所能執(zhí)行的操作稱為它可提供的服務(wù)。對每個(gè)對象和結(jié)構(gòu)的增加、修改、刪除、選擇等服務(wù)有時(shí)是隱含的,在圖中不標(biāo)出,但在存儲類和對象有關(guān)信息的對象庫中有定義。其它服務(wù)則必須顯式地在圖中畫出。服務(wù)層定義服務(wù)的方法和策略找出每一個(gè)對象的所有狀態(tài),在各種狀態(tài)需要做的工作。利用狀態(tài)遷移圖;找出必要的操作。建立消息連接。描述服務(wù):利用狀態(tài)轉(zhuǎn)換圖、腳本和事件追蹤圖,描述服務(wù)的功能。消息連接的標(biāo)識兩個(gè)對象之間可能存在著由于通信需要而形

32、成的關(guān)系,這稱為消息連接。消息連接表示從一個(gè)對象發(fā)送消息到另一個(gè)對象,由那個(gè)對象完成某些處理。它們在圖中用箭頭表示,方向從發(fā)消息的對象指向收消息的對象。找出消息連接的方法及策略對于每一個(gè)對象,執(zhí)行: 查詢該對象需要哪些對象的服務(wù),從該對象畫一箭頭到哪個(gè)對象; 查詢哪個(gè)對象需要該對象的服務(wù),從那個(gè)對象畫一箭頭到該對象; 循消息連接找到下一個(gè)對象,重復(fù)以上步驟。識別主題主題可以看成是高層的模塊或子系統(tǒng)。對于面向?qū)ο蠓治瞿P停黝}表示此模型的整體框架。可以是一 個(gè)層次結(jié)構(gòu)。通過對主題的識別,可以讓人們能夠比較清晰地了解大而復(fù)雜的模型。編輯管理的主題識別主題將每一種結(jié)構(gòu)(包括整體-部分結(jié)構(gòu)、和一般化-

33、特殊化結(jié)構(gòu))中最上層的類提升成為主題;將各不屬于任何結(jié)構(gòu)的類提升主題;檢查在相同或類似的問題論域中以前做面向?qū)ο蠓治龅慕Y(jié)果,看是否有可直接復(fù)用的主題。9.4面向?qū)ο笤O(shè)計(jì)(OOD)面向?qū)ο笤O(shè)計(jì)繼續(xù)做面向?qū)ο蠓治鲭A段的工作,建立軟件的結(jié)構(gòu)。主要工作分為兩個(gè)階段: 高層設(shè)計(jì) 類設(shè)計(jì)高層設(shè)計(jì)高層設(shè)計(jì)階段開發(fā)系統(tǒng)的結(jié)構(gòu),即構(gòu)造應(yīng)用軟件的總體模型。高層設(shè)計(jì)階段標(biāo)識在計(jì)算機(jī)環(huán)境中進(jìn)行問題解決工作所需要的概念,并增加了一批需要的類。這些類包括那些可使應(yīng)用軟件與系統(tǒng)的外部世界交互的類。此階段的輸出是適合應(yīng)用軟件要求的類、類間的關(guān)系、應(yīng)用的子系統(tǒng)視圖規(guī)格說明。高層設(shè)計(jì)模型高層設(shè)計(jì)的特點(diǎn)高層設(shè)計(jì)可以表征為標(biāo)識和定義

34、模塊的過程。模塊可以是一個(gè)單個(gè)的類,也可以是由一些類組合成的子系統(tǒng)。定義過程是職責(zé)驅(qū)動的。類接口的協(xié)議如同“合同” :需方提出的請求必須列在協(xié)議表中,供方則必須提供所有協(xié)議的服務(wù)。高層設(shè)計(jì)應(yīng)遵循的原則應(yīng)使得在子系統(tǒng)的各個(gè)高層部件之間的通信量達(dá)到最小;子系統(tǒng)應(yīng)當(dāng)把那些成組的類打包,形成高度的內(nèi)聚;邏輯功能分組,提供一個(gè)一個(gè)單元,識別并定位問題事件;類設(shè)計(jì)類與具有概念封裝的子系統(tǒng)十分類似。每個(gè)子系統(tǒng)都可以被當(dāng)做一個(gè)類來實(shí)現(xiàn),這個(gè)類聚集它的部件,提供了一組操作。類和子系統(tǒng)的結(jié)構(gòu)是正交的,一個(gè)單個(gè)類的實(shí)例可能是不止一個(gè)子系統(tǒng)的一部分。高層設(shè)計(jì)和類設(shè)計(jì)這兩個(gè)階段是相對封閉的。應(yīng)用軟件中的每一個(gè)事物都是一

35、個(gè)對象,包括應(yīng)用軟件自身在內(nèi)! 兩個(gè)階段是連接的。應(yīng)用軟件的設(shè)計(jì)是大類的設(shè)計(jì),這種類設(shè)計(jì)考察應(yīng)用軟件所期望的每一個(gè)行為,并利用這些行為形成應(yīng)用類的界面。Coad 與 Yourdon 高層設(shè)計(jì)方法Coad 與 Yourdon 在設(shè)計(jì)階段中繼續(xù)采用分析階段中提到的五個(gè)層次。在設(shè)計(jì)階段中,這五個(gè)層次用于建立系統(tǒng)的四個(gè)組成成份。 問題論域部分 人機(jī)交互部分 任務(wù)管理部分 數(shù)據(jù)管理部分問題論域部分問題論域部分包括與應(yīng)用問題直接有關(guān)的所有類和對象。識別和定義這些類和對象的工作在OOA中已經(jīng)開始,在OOA階段得到的有關(guān)應(yīng)用的概念模型描述了我們要解決的問題。在OOD階段,應(yīng)當(dāng)繼續(xù)OOA階段的工作,對在OOA中

36、得到的結(jié)果進(jìn)行改進(jìn)和增補(bǔ)。問題論域部分的設(shè)計(jì)在OOA階段得到的概念模型描述了要解決的問題在OOD階段,繼續(xù)OOA階段的工作,對在OOA中得到的結(jié)果進(jìn)行改進(jìn)和增補(bǔ)。對OOA模型中的某些類與對象、結(jié)構(gòu)、屬性、操作進(jìn)行組合與分解。要考慮對時(shí)間與空間的折衷、內(nèi)存管理、開發(fā)人員的變更、以及類的調(diào)整等。1.復(fù)用設(shè)計(jì)根據(jù)問題解決的需要,把從類庫或其它來源得到的既存類增加到問題解決方案中去。標(biāo)明既存類中不需要的屬性和操作,增加從既存類到應(yīng)用類之間的一般化-特殊化的關(guān)系。把應(yīng)用類中因繼承既存類而成為多余的屬性和操作標(biāo)出。修改應(yīng)用類的結(jié)構(gòu)和連接。2.把問題論域相關(guān)的類關(guān)聯(lián)起來在設(shè)計(jì)時(shí),從類庫中引進(jìn)一個(gè)根類,做為包

37、容類,把所有與問題論域有關(guān)的類關(guān)聯(lián)到一起,建立類的層次。把同一問題論域的一些類集合起來,存于類庫中。3. 加入一般化類以建立類間協(xié)議有時(shí),某些特殊類要求一組類似的服務(wù)。此時(shí),應(yīng)加入一個(gè)一般化的類,定義為所有這些特殊類共用的一組服務(wù)名,這些服務(wù)都是虛函數(shù)。在特殊類中定義其實(shí)現(xiàn)。4. 調(diào)整繼承支持級別在OOA階段建立的對象模型中可能包括有多繼承關(guān)系,但實(shí)現(xiàn)時(shí)使用的程序設(shè)計(jì)語言可能只有單繼承,甚至沒有繼承機(jī)制,這樣就需對分析的結(jié)果進(jìn)行修改。多繼承模式有兩種: 狹義的菱形 廣義的菱形針對單繼承語言的調(diào)整把特殊類的對象看做是一個(gè)一般類對象所扮演的角色,通過實(shí)例連接把多繼承的層次結(jié)構(gòu)轉(zhuǎn)換為單繼承的層次結(jié)構(gòu)

38、。把多繼承的層次結(jié)構(gòu)平鋪,成為單繼承的層次結(jié)構(gòu)。在這種情況下,有些屬性或操作在同層的特殊類中會重復(fù)出現(xiàn)。針對無繼承語言的調(diào)整當(dāng)使用無繼承的程序設(shè)計(jì)語言時(shí),必須把具有繼承關(guān)系的類層次結(jié)構(gòu)平鋪開來,成為一組類和對象。一般可利用命名慣例,把這些類或?qū)ο箨P(guān)聯(lián)起來。5. 改進(jìn)性能提高執(zhí)行效率和速度是系統(tǒng)設(shè)計(jì)的主要指標(biāo)之一。有時(shí),必須改變問題論域的結(jié)構(gòu)以提高效率。如果類之間經(jīng)常需要傳送大量消息,可合并相關(guān)的類以減少消息傳遞引起的速度損失。增加某些屬性到原來的類中,或增加低層的類,以保存暫時(shí)結(jié)果,避免每次都要重復(fù)計(jì)算造成速度損失。6. 加入較低層的構(gòu)件在做面向?qū)ο蠓治鰰r(shí),分析員往往專注于較高層的類和對象,避

39、免考慮太多較低層的實(shí)現(xiàn)細(xì)節(jié)。在做面向?qū)ο笤O(shè)計(jì)時(shí),設(shè)計(jì)師在找出高層的類和對象時(shí),必須考慮到底需要用到哪些較低層的類和對象。用戶界面部分的設(shè)計(jì)在 OOA 階段給出了所需的屬性和操作,在設(shè)計(jì)階段必須根據(jù)需求把交互細(xì)節(jié)加入到用戶界面設(shè)計(jì)中,包括人機(jī)交互所必需的實(shí)際顯示和輸入。用戶界面部分設(shè)計(jì)主要由以下幾個(gè)方面組成。1. 用戶分類按技能層次分類: 外行初學(xué)者熟練者專家按組織層次分類: 行政人員管理人員專業(yè)技術(shù)人員其它辦事員按職能分類: 顧客職員 2. 描述人及其任務(wù)的腳本對以上定義的每一類用戶,列出對以下問題做出的考慮:什么人、目的、特點(diǎn)、成功的關(guān)鍵因素、熟練程度以及任務(wù)腳本。在OOATOOLTM 中有

40、一個(gè)例子: 什么人分析員 目的要求一個(gè)工具來輔助分析工作 (擺脫繁重的畫圖和檢查圖的工作)。 特點(diǎn)年齡:42歲;教育水平:大學(xué);限制:不要微型打印,小于9個(gè)點(diǎn)的打印太小。 成功的關(guān)鍵因素工具應(yīng)當(dāng)使分析工作順利進(jìn)行;工具不應(yīng)與分析工作沖突;工具應(yīng)能捕獲假設(shè)和思想,能適時(shí)做出折衷;應(yīng)能及時(shí)給出模型各個(gè)部分的文檔,這與給出需求同等重要。 熟練程度專家。 任務(wù)腳本 主腳本: 識別“核心的”類和對象; 識別“核心”結(jié)構(gòu); 在發(fā)現(xiàn)了新的屬性或操作時(shí)隨時(shí)都可以加進(jìn)模型中去。 檢驗(yàn)?zāi)P停?打印模型及其全部文檔。3. 設(shè)計(jì)命令層研究現(xiàn)行的人機(jī)交互活動的內(nèi)容和準(zhǔn)則:這些準(zhǔn)則可以是非形式的,如“輸入時(shí)眼睛不易疲勞”

41、,也可以是正式規(guī)定的;建立一個(gè)初始的命令層:可以有多種形式,如一系列 Menu Screens、或一個(gè)Menu Bar、或一系列Icons.細(xì)化命令層:考慮以下幾個(gè)問題。排列命令層次。把使用最頻繁的操作放在前面;按照用戶工作步驟排列。通過逐步分解,找到整體局部模式,以幫助在命令層中對操作分塊。根據(jù)人們短期記憶的“72”或“每次記憶3塊每塊3項(xiàng)”的特點(diǎn),把深度盡量限制在三層之內(nèi)。減少操作步驟:把點(diǎn)取、拖動和鍵盤操作減到最少。4. 設(shè)計(jì)詳細(xì)的交互用戶界面設(shè)計(jì)有若干原則,包括: 一致性:采用一致的術(shù)語、一致的步驟和一致的活動。 操作步驟少:減少敲鍵和鼠標(biāo)點(diǎn)取的次數(shù),減少完成某件事所需的下拉菜單的距離

42、。 不要“啞播放”:每當(dāng)用戶等待系統(tǒng)完成一個(gè)活動時(shí),要給出一些反饋信息。 Undo:在操作出現(xiàn)錯(cuò)誤時(shí),要恢復(fù)或部分恢復(fù)原來的狀態(tài)。 減少人腦的記憶負(fù)擔(dān):不應(yīng)在一個(gè)窗口使用在另一個(gè)窗口中記憶或?qū)懴碌男畔ⅲ恍枰税刺囟ù涡蛴洃浀臇|西應(yīng)當(dāng)組織得容易記憶。 學(xué)習(xí)的時(shí)間和效果:提供聯(lián)機(jī)的幫助信息。 趣味性:盡量采取圖形界面,符合人類習(xí)慣.5. 繼續(xù)做原型用戶界面原型是用戶界面設(shè)計(jì)的重要工作。人需要對提交的人機(jī)交互活動進(jìn)行體驗(yàn)、實(shí)地操作,并精煉成一致的模式。使用快速原型工具或應(yīng)用構(gòu)造器,對各種命令方式,如菜單、彈出、填充以及快捷命令,做出原型讓用戶使用,通過用戶反饋、修改、演示的迭代,使界面越來越有效。6

43、. 設(shè)計(jì) HIC (人機(jī)交互) 類窗口需要進(jìn)一步細(xì)化,通常包括:類窗口、條件窗口、檢查窗口、文檔窗口、畫圖窗口、過濾器窗口、模型控制窗口、運(yùn)行策略窗口、模板窗口等。設(shè)計(jì)HIC類,首先從組織窗口和部件的用戶界面界面的設(shè)計(jì)開始。每個(gè)類包括窗口的菜單條、下拉菜單、彈出菜單的定義。還要定義用于創(chuàng)建菜單、加亮選擇項(xiàng)、引用相應(yīng)的響應(yīng)的操作。每個(gè)類負(fù)責(zé)窗口的實(shí)際顯示。所有有關(guān)物理對話的處理都封裝在類的內(nèi)部。必要時(shí),還要增加在窗口中畫圖形圖符的類、在窗口中選擇項(xiàng)目的類、字體控制類、支持剪切和粘貼的類等。與機(jī)器有關(guān)的操作實(shí)現(xiàn)應(yīng)隱蔽在這些類中。7. 根據(jù)圖形用戶界面進(jìn)行設(shè)計(jì)圖形用戶界面區(qū)分為字型、坐標(biāo)系統(tǒng)和事件。

44、 字型是字體、字號、樣式和顏色的組合。 坐標(biāo)系統(tǒng)主要因素有原點(diǎn)(基準(zhǔn)點(diǎn))、顯示分辨率、顯示維數(shù)等。 事件則是圖形用戶界面程序的核心,操作將對事件做出響應(yīng)。任務(wù)管理部分的設(shè)計(jì)任務(wù),是進(jìn)程的別稱,是執(zhí)行一系列活動的一段程序。當(dāng)系統(tǒng)中有許多并發(fā)行為時(shí),需要依照各個(gè)行為的協(xié)調(diào)和通信關(guān)系,劃分各種任務(wù),以簡化并發(fā)行為的設(shè)計(jì)和編碼。任務(wù)管理主要包括任務(wù)的選擇和調(diào)整,它的工作有以下幾種。 識別事件驅(qū)動任務(wù): 一些負(fù)責(zé)與硬件設(shè)備通信的任務(wù)是事件驅(qū)動的,也就是說,這種任務(wù)可由事件來激發(fā)。 識別時(shí)鐘驅(qū)動任務(wù):以固定的時(shí)間間隔激發(fā)這種事件,以執(zhí)行某些處理。某些人機(jī)界面、子系統(tǒng)、任務(wù)、處理機(jī)或與其它系統(tǒng)需要周期性的通

45、信,因此時(shí)鐘驅(qū)動任務(wù)應(yīng)運(yùn)而生。 識別優(yōu)先任務(wù)和關(guān)鍵任務(wù):根據(jù)處理的優(yōu)先級別來安排各個(gè)任務(wù)。 識別協(xié)調(diào)者:當(dāng)有三個(gè)或更多的任務(wù)時(shí),應(yīng)當(dāng)增加一個(gè)追加任務(wù),起協(xié)調(diào)者的作用。它的行為可以用狀態(tài)轉(zhuǎn)換矩陣來描述。 評審各個(gè)任務(wù):對各任務(wù)進(jìn)行評審,確保它能滿足選擇任務(wù)的工程標(biāo)準(zhǔn)事件驅(qū)動?時(shí)鐘驅(qū)動?優(yōu)先級/關(guān)鍵任務(wù)?協(xié)調(diào)者?定義各個(gè)任務(wù)定義任務(wù)的工作主要包括:它是什么任務(wù)、如何協(xié)調(diào)工作及如何通信。 (1) 它是什么任務(wù)為任務(wù)命名,并簡要說明這個(gè)任務(wù)。 (2) 如何協(xié)調(diào)工作定義各個(gè)任務(wù)如何協(xié)調(diào)工作。指出它是事件驅(qū)動還是時(shí)鐘驅(qū)動。 (3) 如何通信定義各個(gè)任務(wù)之間如何通信。任務(wù)從哪里取值,結(jié)果送往何方。 (4)

46、一個(gè)模版任務(wù)的定義如下: Name (任務(wù)名) Description (描述) Priority (優(yōu)先級) Servicesincluded (包含的操作)、 Communication Via (經(jīng)由誰通信)。數(shù)據(jù)管理部分的設(shè)計(jì)數(shù)據(jù)管理部分提供了在數(shù)據(jù)管理系統(tǒng)中存儲和檢索對象的基本結(jié)構(gòu),包括對永久性數(shù)據(jù)的訪問和管理。它分離了數(shù)據(jù)管理機(jī)構(gòu)所關(guān)心的事項(xiàng),包括文件、關(guān)系型DBMS或面向?qū)ο驞BMS等。數(shù)據(jù)管理方法數(shù)據(jù)管理方法主要有3種:文件管理、關(guān)系數(shù)據(jù)庫管理和面向?qū)ο髱鞌?shù)據(jù)管理。 文件管理提供基本的文件處理能力。 關(guān)系數(shù)據(jù)庫管理系統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)使用若干表格來管理數(shù)據(jù)。面向?qū)ο髷?shù)據(jù)庫管理

47、系統(tǒng)通常,面向?qū)ο蟮臄?shù)據(jù)庫管理系統(tǒng)以兩種方法實(shí)現(xiàn):一是擴(kuò)充的RDBMS,二是擴(kuò)充的面向?qū)ο蟪绦蛟O(shè)計(jì)語言。擴(kuò)充的RDBMS主要對RDBMS擴(kuò)充了抽象數(shù)據(jù)類型和繼承性,再加一些一般用途的操作創(chuàng)建和操縱類與對象。擴(kuò)充的OOPL在面向?qū)ο蟪绦蛟O(shè)計(jì)語言中嵌入了在數(shù)據(jù)庫中長期管理存儲對象的語法和功能。程序設(shè)計(jì)語言的影響詳細(xì)的面向?qū)ο笤O(shè)計(jì)與語言有關(guān)。一般地,所有的語言都可以完成面向?qū)ο髮?shí)現(xiàn),但某些語言能夠提供更豐富的語法,能夠顯式地描繪在面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計(jì)過程中所使用的表示法。1. 面向?qū)ο笤O(shè)計(jì)與過程型語言過程型語言只直接支持過程抽象可以增加數(shù)據(jù)抽象及封裝(如利用結(jié)構(gòu)化設(shè)計(jì)的信息隱蔽模塊)無法明確地

48、表示繼承性。也無法明確支持整體與部分、類與成員、對象與屬性等關(guān)系。具有面向?qū)ο筇匦缘倪^程型語言可以成為一種實(shí)用的且可行的語言。2. 面向?qū)ο笤O(shè)計(jì)與基于對象的語言基于對象的語言,也叫做面向軟件包的語言,如Ada等能夠直接支持過程抽象、數(shù)據(jù)抽象、封裝和對象與屬性關(guān)系它無法表示繼承性,也無法表示類與成員、整體與部分的關(guān)系?;趯ο笳Z言的面向?qū)ο笤O(shè)計(jì)代表一種可行的開發(fā)方法。3. 面向?qū)ο笤O(shè)計(jì)與面向?qū)ο蟮某绦蛟O(shè)計(jì)語言面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,包括C+、Smalltalk、Objective-C、 Actor、 Eiffel等,都直接支持過程抽象、數(shù)據(jù)抽象、封裝、繼承、以及對象與屬性、類與成員關(guān)系。它們不明

49、確地支持整體與部分關(guān)系,但可以方便地表示組裝對象。因此,從面向?qū)ο蠓治?,到面向?qū)ο笤O(shè)計(jì),再到面向?qū)ο蟪绦蛟O(shè)計(jì)語言是一種與表示法十分一致的策略。4. 面向?qū)ο笤O(shè)計(jì)與面向?qū)ο髷?shù)據(jù)庫語言(OO-DBL)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)(OO-DBMS)及其語言(OO-DBL),是面向?qū)ο蟪绦蛟O(shè)計(jì)語言(OOPL)與數(shù)據(jù)管理能力的組合。OO-DBMS有四種不同的體系結(jié)構(gòu):大屬性擴(kuò)充關(guān)系型DBMS,使容納大屬性,如一個(gè)文檔。例如,Informix公司的面向?qū)ο蟮漠a(chǎn)品。松散耦合一個(gè)OOPL與大量的DBMS組合在一起。緊密耦合一個(gè)OOPL與某個(gè)專用的DBMS集成為一個(gè)系統(tǒng)。擴(kuò)充關(guān)系型擴(kuò)充關(guān)系型DBMS,可容納“過程”之

50、類的屬性。類的設(shè)計(jì)應(yīng)用分析過程包括了對問題論域所需的類的模型化但在最終實(shí)現(xiàn)應(yīng)用時(shí)不只有這些類,還需要追加一些類在類設(shè)計(jì)的過程中應(yīng)當(dāng)做這些工作。單一概念的模型 使用多個(gè)類來表示一個(gè)“概念”。 常常把一個(gè)概念進(jìn)行分解,用一組類來表示這個(gè)概念。 也可以只用一個(gè)單個(gè)類來表示一 個(gè)概念。 在類的文檔中應(yīng)對類的用途做出清楚的標(biāo)識和精確的陳述,類的共有界面應(yīng)當(dāng)使用操作的特征、先決條件和后置條件加以定義。類設(shè)計(jì)的目標(biāo)可復(fù)用的“插接相容性”部件 部件可以在未來的應(yīng)用中使用。 界面的標(biāo)準(zhǔn)化 類的“插接相容性”可靠的部件 可靠的(健壯的和正確定義的)部件。 每個(gè)部件必須經(jīng)過充分的測試。 每個(gè)操作盡可能小和作用單一。

51、可集成的部件 類的界面應(yīng)當(dāng)盡可能小 一個(gè)類所需要的數(shù)據(jù)和操作都定義在類定義中 避免命名沖突 封裝特性保證了把一個(gè)概念的所有細(xì)節(jié)都組合在一個(gè)界面下 信息隱蔽保證了實(shí)現(xiàn)級的名字將不會與其它類的名字互相干擾。類設(shè)計(jì)的方針信息隱蔽 保護(hù)抽象數(shù)據(jù)類型的存儲表示不被抽象數(shù)據(jù)類型實(shí)例的用戶直接存取。 對其表示的唯一存取途徑只能是界面。直接引用類中的數(shù)據(jù)通過界面引用類中的數(shù)據(jù)消息限制 避開直接引用另一個(gè)類的數(shù)據(jù) 類A的數(shù)據(jù)表示中包括了類C的實(shí)例,類B的數(shù)據(jù)表示則直接使用了類C。如果類A的實(shí)例發(fā)送一個(gè)消息給類B的一個(gè)實(shí)例,則類A必須知道類B的實(shí)現(xiàn)是如何使用類C的實(shí)例的,并把這種知識包括到它自己的實(shí)現(xiàn)中去。當(dāng)類B

52、需要改變自己的實(shí)現(xiàn),改動類C的數(shù)據(jù)表示時(shí),類A的實(shí)現(xiàn)也必須隨之改變。類間的相互影響?yīng)M窄界面 不是所有的操作都是公共的。 對于一個(gè)HashTable類,界面應(yīng)包括插入和檢索表的操作,而不應(yīng)包括使用一個(gè)表項(xiàng)的關(guān)鍵碼計(jì)算散列值的操作。散列函數(shù)不應(yīng)由類的實(shí)例的用戶來訪問。它應(yīng)是一個(gè)單獨(dú)的操作,以便容易調(diào)整或改變散列函數(shù),它應(yīng)是隱蔽實(shí)現(xiàn)的部分。強(qiáng)內(nèi)聚 模塊內(nèi)部各個(gè)部分之間應(yīng)有較強(qiáng)的關(guān)系,它們不能分別標(biāo)識。弱耦合 一個(gè)單獨(dú)模塊應(yīng)盡量不依賴于其它模塊。如果在類A的實(shí)例中建立了類B的實(shí)例,類A的操作需要類B的實(shí)例做為參數(shù),如果類A是類B的一個(gè)派生類,則稱類A“依賴于”類B。一個(gè)類應(yīng)當(dāng)盡可能少地依賴于其它類。顯

53、式信息傳遞 在類之間全局變量的共享隱含了信息的傳遞,并且是一種依賴形式。因此,兩個(gè)類之間的交互應(yīng)當(dāng)僅涉及顯式信息傳遞。 顯式信息傳遞是通過參數(shù)表來完成的。借助于顯式地列出將要通過參數(shù)表傳遞給一個(gè)操作的值,可以循特定的路徑來跟蹤錯(cuò)誤。 顯式信息傳遞要最小化派生類當(dāng)做派生類型 在繼承結(jié)構(gòu)中,每個(gè)派生類應(yīng)該當(dāng)做基類的特殊化來開發(fā),而基類所具有的公共界面成為派生類的共有界面的一個(gè)子集。 C+允許設(shè)計(jì)者選擇類的基類是共有的或私有的。 如果基類是共有的,則其共有界面將成為新的派生類的共有界面部分,這類似于類型與派生類型之間的關(guān)系。 如果基類是私有的,它的行為將不是派生類的公共行為部分而是實(shí)現(xiàn)部分。它的提出

54、是為了提供實(shí)現(xiàn)新類的服務(wù)。 在實(shí)現(xiàn)一個(gè)新類時(shí)通過聲明一個(gè)類的實(shí)例,就可以使得該類的服務(wù)有效。 Dictionary類的實(shí)現(xiàn)可采用Array類的實(shí)例,這樣可以把存儲提供給Dictionary項(xiàng),而不給Dictionary類的界面增加不適當(dāng)?shù)牟僮?。抽象?某些語言提供了一個(gè)類,用它做為繼承結(jié)構(gòu)的開始點(diǎn),所有用戶定義的類都直接或間接以這個(gè)類為基類。 C+支持多重繼承結(jié)構(gòu)。每一種結(jié)構(gòu)都包含了一組類,它們是某種概念的特殊化。這個(gè)概念應(yīng)抽象地由結(jié)構(gòu)的根類來表示。因此,每個(gè)繼承結(jié)構(gòu)的根類應(yīng)當(dāng)是目標(biāo)概念的一個(gè)抽象模型。 這個(gè)抽象模型起始于一個(gè)根類,它不產(chǎn)生實(shí)例。它定義了一個(gè)最小的共有界面,許多派生類可以加到這

55、個(gè)界面上以給出概念的一個(gè)特定視圖。 考慮一組涉及“List”概念的類,根類應(yīng)提供一組操作做為界面而不考慮是什么表。這個(gè)抽象類可以提供某些操作的缺省實(shí)現(xiàn),但在派生類中將根據(jù)特殊化要求給出特定實(shí)現(xiàn)。通過復(fù)用設(shè)計(jì)類利用既存類來設(shè)計(jì)類,有4種方式:選擇,分解,配置和演變。選擇 設(shè)計(jì)一個(gè)類最簡單的服務(wù)是從既存的部件中簡單地選擇合乎需要的軟件部件。部件庫一個(gè)面向?qū)ο箝_發(fā)環(huán)境應(yīng)提供一個(gè)常用部件庫。大多數(shù)語言環(huán)境都帶有一個(gè)初始部件庫,如整數(shù)、實(shí)數(shù)和字符,它是提供其它所有功能的基礎(chǔ)層。任一基本部件庫(如“基本數(shù)據(jù)結(jié)構(gòu)”部件)都應(yīng)建立在這些原始層上。這個(gè)層還包括一組提供其它應(yīng)用論域方法的一般類,如窗口系統(tǒng)和圖形圖

56、元。一個(gè)面向?qū)ο蟛考斓膶哟?特定組的部件 (一個(gè)小組為他們自己組內(nèi)所有成員使用而開發(fā))特定項(xiàng)目的部件 (一個(gè)小組為某一個(gè)項(xiàng)目而開發(fā))特定問題論域的部件 (購自某一個(gè)特定論域的軟件銷售商)一般部件 (購自專門提供部件的銷售商)特定語言原操作 (購自一個(gè)編譯器的銷售商)分解 最初標(biāo)識的“類”常常是幾個(gè)概念的組合。在著手設(shè)計(jì)時(shí),必須把一個(gè)類分成幾個(gè)類,希望新標(biāo)識的類容易實(shí)現(xiàn),或它們已經(jīng)存在。配置 在設(shè)計(jì)類時(shí),我們可能會要求由既存類的實(shí)例提供類的某些特性。通過把相應(yīng)類的實(shí)例聲明為新類的屬性來配置新類。 一種仿真服務(wù)器可能要求使用一個(gè)計(jì)時(shí)器來跟蹤服務(wù)時(shí)間。設(shè)計(jì)者應(yīng)當(dāng)找到計(jì)時(shí)器類,并在服務(wù)器類的定義中聲

57、明它。 這個(gè)服務(wù)器還要求有一個(gè)隊(duì)列類的實(shí)例來作客戶排隊(duì)工作。 對每一個(gè)客戶的服務(wù)時(shí)間由一個(gè)已知的概率分布來確定,因此,可能使用一個(gè)具有泊松分布或具有均勻分布的隨機(jī)變量的類的實(shí)例。演化要求開發(fā)的新類可能與一個(gè)既存類非常類似,但不完全相同。此時(shí),可以利用繼承機(jī)制。一般化-特殊化處理有三種可能的方式。9.5面向?qū)ο筌浖膶?shí)現(xiàn)與測試在開發(fā)過程中,類的實(shí)現(xiàn)是核心問題。在只用面向?qū)ο箫L(fēng)格所寫的系統(tǒng)中,所有的數(shù)據(jù)都被封裝在類的實(shí)例中而整個(gè)應(yīng)用則被封裝在一個(gè)更高級的類中。這種封裝和類提供的標(biāo)準(zhǔn)界面很容易把類所表達(dá)的特性嵌入到應(yīng)用中去。類級關(guān)系當(dāng)我們實(shí)現(xiàn)類的時(shí)候就會遇到類級的關(guān)系。一個(gè)類的實(shí)現(xiàn)常常在某些方面依賴

58、于其它類的實(shí)例。類級關(guān)系可以是應(yīng)用級關(guān)系的實(shí)現(xiàn),也可以是類內(nèi)屬性的實(shí)現(xiàn)。 消息 組裝 繼承消息(messaging)在應(yīng)用程序中,應(yīng)用級關(guān)系大多是以類的實(shí)例之間的消息連接方式實(shí)現(xiàn)通信的。在消息的參數(shù)表中指定消息的接受者(一個(gè)類的實(shí)例)。還可以通過參數(shù)表向接收者提供信息。消息指定一個(gè)屬于接收者的服務(wù),這個(gè)服務(wù)必須對應(yīng)到該類共有界面規(guī)定的行為。Dictionary類設(shè)計(jì)的例子一個(gè)Dictionary是包含一些可按關(guān)鍵碼的值排序和檢索對象的部件。對于要存儲在Dictionary內(nèi)的一個(gè)實(shí)例來說,類必須提供一個(gè)操作來取得關(guān)鍵碼。關(guān)系 refers to 表示了“一個(gè)類引用另一個(gè)類”,后者的實(shí)例可當(dāng)作參

59、數(shù)由前者在消息中使用。由消息構(gòu)成的流圖形成了面向?qū)ο笙到y(tǒng)結(jié)構(gòu)的核心。例如,Dictionary類有一個(gè)操作add,該操作將把一個(gè)屬于Item類的對象item當(dāng)作參數(shù),把這個(gè)對象加入到Dictionary中。具體地,add操作首先發(fā)送一個(gè)消息給做為參數(shù)的對象item,再利用它的關(guān)鍵碼,到該對象所在的Item類中引用(refers to)相應(yīng)的實(shí)例,把它加入到詞典中去。在設(shè)計(jì)階段,在這樣兩個(gè)類之間消息關(guān)系的建立要求協(xié)調(diào)這些類的共有界面的定義。組裝(Composition)組裝關(guān)系是一個(gè)實(shí)現(xiàn)級關(guān)系,它對應(yīng)于應(yīng)用級的聚合關(guān)系。它也叫做component(部件)或叫做 is part of(是的一部分)

60、。組裝與消息兩者都是類間的關(guān)系,在這種關(guān)系中,一個(gè)類的實(shí)例將是另一個(gè)類的實(shí)現(xiàn)的一部分??紤]Dictionary類的實(shí)現(xiàn)。 在Dictionary中存儲item的一種數(shù)據(jù)表示是使用散列表(HashTable)。 進(jìn)行Dictionary類的低層設(shè)計(jì)時(shí),要指明在Dictionary類和HashTable類之間的一個(gè) is part of 關(guān)系。 在實(shí)現(xiàn)時(shí),應(yīng)當(dāng)在Dictionary類的定義中聲明這個(gè)Hash Table的實(shí)例。繼承(Inheritance)繼承允許在既存類的基礎(chǔ)上定義新的類。一個(gè)新類B繼承了既存類A,則B包括了A定義的某些行為,以及它自定義的某些附加行為。有多少種面向?qū)ο蟪绦蛟O(shè)計(jì)語

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論