版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、 第六章 面向?qū)ο笤O(shè)計1傳統(tǒng)方法學(xué)概述 傳統(tǒng)方法學(xué)存在的問題 生產(chǎn)率提高的幅度遠遠不能滿足需要 軟件重用程度很低 軟件仍然很難維護 軟件往往不能真正滿足用戶需要 2出現(xiàn)問題的原因 僵化的瀑布模型*某些類型的系統(tǒng)需求是模糊的*項目參與者之間存在通信鴻溝*預(yù)先定義的需求可能是過時的 結(jié)構(gòu)化技術(shù)的缺點 *用這種技術(shù)開發(fā)出的軟件,其穩(wěn)定性、可修改性和可重用性都比較差。*結(jié)構(gòu)化分析、設(shè)計技術(shù)的本質(zhì)是功能分析。從代表目標(biāo)系統(tǒng)整體功能的單個處理著手,自頂向下不斷把復(fù)雜的處理分解為子處理,層層分解下去,直至僅剩下若干個容易實現(xiàn)的子處理為止。3功能與數(shù)據(jù)分離的軟件設(shè)計結(jié)構(gòu)與人類的現(xiàn)實世界環(huán)境很不一樣,和人的自然
2、思維也就很不一致,因此對現(xiàn)實世界的認(rèn)識與編程之間存在著一道很深的理解上的鴻溝。 系統(tǒng)是圍繞著如何實現(xiàn)一定的行為來進行的,當(dāng)系統(tǒng)行為易變,需要常常修改時,修改極為困難。 在系統(tǒng)中模塊之間的控制作用有重要影響時,也就是說,實際的控制發(fā)生的根源來自分散的各個模塊之中時,由于在“好的模塊結(jié)構(gòu)”中的模塊間的控制作用只能通過上下之間的調(diào)用關(guān)系來進行,造成信息傳遞路徑過長,效率低,易受干擾,甚至出錯。自頂向下功能分解的分析方法極大地限制了軟件的可重用性。 4面向?qū)ο笏枷胱畛跗鹪从?0世紀(jì)60年代末的simula語言。面向?qū)ο蠓椒ǖ幕疽c首次在simula語言中得到了表達和實現(xiàn)。80年代,位于美國加州的Xe
3、rox研究中心推出smalltalk語言及其程序設(shè)計環(huán)境,使得面向?qū)ο蟪绦蛟O(shè)計方法得到比較完善的實現(xiàn),掀起了面向?qū)ο笱芯康母叱?。?0年代中后期,面向?qū)ο蟮能浖O(shè)計和程序設(shè)計方法已發(fā)展成為一種成熟有效的軟件開發(fā)方法。相比而言,面向?qū)ο蟮姆治黾夹g(shù)發(fā)展得比較滯后。 面向?qū)ο蠓椒▽W(xué)概述 5“面向?qū)ο蟆?Object-Oriented)是針對“面向過程”一詞提出的,是從本質(zhì)上區(qū)別于傳統(tǒng)的結(jié)構(gòu)化方法的一種新方法,新思路。OO技術(shù)的基本原理是:按照問題域的基本事物實現(xiàn)自然分割,按人們通常的思維方式建立問題域的模型,設(shè)計盡可能直接自然表現(xiàn)問題求解的軟件系統(tǒng)。為此,OO技術(shù)引入了對象(object)概念來表現(xiàn)
4、事物,用消息(message)傳遞建立事物間的聯(lián)系。用類(class)和繼承(inheritance)作為適應(yīng)人們一般思維方式的描述模型。用方法(method)表示作用在對象上的各種操作。 面向?qū)ο蠓椒▽W(xué)概述 6建立在對象、消息、類、繼承和方法等概念基礎(chǔ)上的面向?qū)ο筌浖幕咎卣魇菍ο蟮姆庋b性和繼承性。通過封裝可以將對象的定義與對象的實現(xiàn)分開。這樣,無論是對象功能的完善擴充,還是對象實現(xiàn)的修改,影響僅限于該對象內(nèi)部,保證了面向?qū)ο筌浖目蓸?gòu)造性和易維護性。 通過繼承可以表達類與類之間的聯(lián)系,大大減少了重復(fù)定義,同時也使系統(tǒng)的結(jié)構(gòu)更加清晰、易于理解和維護。 76.1 面向?qū)ο笤O(shè)計概述6.2 系統(tǒng)
5、設(shè)計6.3 對象設(shè)計6.4 領(lǐng)域?qū)ο笤O(shè)計教學(xué)內(nèi)容:8 在第五章講述了軟件設(shè)計的幾條基本原理,這些原理在進行面向?qū)ο笤O(shè)計時仍然成立,但是增加了一些與面向?qū)ο蠓椒芮邢嚓P(guān)的新特點,從而具體化為下列的面向?qū)ο笤O(shè)計準(zhǔn)則: 模塊化對象就是模塊; 抽象類實際上是一種抽象數(shù)據(jù)類型; 信息隱蔽通過對象的封裝性實現(xiàn); 弱耦合主要指不同對象之間相互關(guān)聯(lián)的緊密程度; 強內(nèi)聚設(shè)計中使用的一個構(gòu)件內(nèi)的各個元素,對完成一個定義明確的目的所做出的貢獻程度; 可重用盡量使用已有的類,確實需要創(chuàng)建新類,則在設(shè)計這些新類的協(xié)議時,應(yīng)該考慮將來的可重復(fù)使用性;9面向?qū)ο笤O(shè)計分析是提取和整理用戶需求,并建立問題與精確模型的過程。設(shè)計
6、則是把分析階段得到的需求轉(zhuǎn)變成符合成本和質(zhì)量要求的、抽象的系統(tǒng)實現(xiàn)方案的過程。面向?qū)ο笤O(shè)計就是用面向?qū)ο笥^點建立求解域模型的過程。10 OOA與OOD的本質(zhì): OOA是一個分類活動,即分析問題力圖確定在開發(fā)解決方案時可應(yīng)用的對象類,同時確定對象關(guān)系和行為。 OOD使得軟件工程師能夠確定從類中導(dǎo)出的對象,以及這些對象的相互關(guān)聯(lián),此外,OOD描述了:對象間的關(guān)系如何達到; 行為如何實現(xiàn);對象間通信如何實現(xiàn)。 11從OOA到OOD 逐漸擴充模型的過程 OOD分為兩個階段: 高層設(shè)計(系統(tǒng)設(shè)計) 低層設(shè)計(對象設(shè)計)126.1 面向?qū)ο笤O(shè)計概述 OOD則主要考慮“如何實現(xiàn)”的問題,因而這一階段注意的焦
7、點從問題空間轉(zhuǎn)移到解空間。著重完成各種不同層次的模塊設(shè)計。131.面向?qū)ο笤O(shè)計的任務(wù) 系統(tǒng)設(shè)計 對象設(shè)計 消息設(shè)計 復(fù)審設(shè)計模型14系統(tǒng)設(shè)計主要完成系統(tǒng)整體結(jié)構(gòu)的設(shè)計,包括將子系統(tǒng)分配到處理器和任務(wù),選擇實現(xiàn)數(shù)據(jù)管理、界面支持和任務(wù)管理的設(shè)計策略,為系統(tǒng)設(shè)計合適的控制機制等。對象設(shè)計,對OOA模型中的類對象模型具體化、詳細化。消息設(shè)計使用對象間的協(xié)作和對象關(guān)系模型,設(shè)計出消息模型。復(fù)審設(shè)計模型,對設(shè)計模型進行復(fù)審,并伴隨著附加的OOA活動。和傳統(tǒng)的結(jié)構(gòu)化設(shè)計一樣,面向?qū)ο笤O(shè)計也是將分析階段所建立的分析模型轉(zhuǎn)變?yōu)檐浖O(shè)計模型。15分析模型使用實例,處于OOA模型核心的是“使用實例”(Use Ca
8、se ),簡稱“用例”。獲得軟件的需求后,軟件分析員既可據(jù)此創(chuàng)建一組“場景”(Scenario),每個場景包含一個使用實例。從這些用例出發(fā),進一步抽取和定義OOA模型的3種模型,即類-對象模型,描述系統(tǒng)所涉及的全部類-對象,每個類-對象都通過屬性、操作和寫作者來進行進一步描述;對象-關(guān)系模型,描述對象之間的靜態(tài)關(guān)系,同時定義了系統(tǒng)中所有重要的消息路徑,它也可以具體化到對象的屬性、操作和協(xié)作者;對象-行為模型,描述了系統(tǒng)的動態(tài)行為,即對湘雜特定的狀態(tài)下如何反映外界的事件。對象-關(guān)系模型類/對象 模型對象-行為模型使用實例(Use Case)操作、屬性、協(xié)作者16設(shè)計模型定義成了一個金字塔層次結(jié)構(gòu)
9、。自低而上分別為:子系統(tǒng)層:包含每個子系統(tǒng)的表示類和對象層:包含類層次和每個對象的設(shè)計表示消息層:包含使得每個對象能夠和其協(xié)作者通信的細節(jié),建立 系統(tǒng)的外部和內(nèi)部接口責(zé)任層:包含針對每個對象的所有屬性和操作的數(shù)據(jù)結(jié)構(gòu)和算法的設(shè)計設(shè)計模型模型17將分析模型轉(zhuǎn)換為設(shè)計模型使用實例對象關(guān)系模型索引卡片對象-行為模型協(xié)作者子 系 統(tǒng) 設(shè) 計類及對象設(shè)計消息設(shè)計責(zé)任設(shè)計OO分析模型OO設(shè)計模型屬性操作186.2 系統(tǒng)設(shè)計1. 系統(tǒng)設(shè)計過程 根據(jù)Rumbaugh對OMT方法的定義,系統(tǒng)設(shè)計主要由以下步驟組成:劃分子系統(tǒng);確定需要并發(fā)運行的子系統(tǒng)并為他們分配處理器;描述子系統(tǒng)之間的通信;確定系統(tǒng)資源的管理和
10、控制;確定人機交互構(gòu)件;選擇實現(xiàn)數(shù)據(jù)管理和任務(wù)管理的基本策略。19 目前流行的OOD方法概述Rumbaugh方法(簡稱OMT)Rumbaugh的OOD過程概述:進行系統(tǒng)設(shè)計進行對象設(shè)計實現(xiàn)在系統(tǒng)設(shè)計中定義的控制機制調(diào)整類結(jié)構(gòu)以加強繼承性設(shè)計消息序列以實現(xiàn)對象關(guān)系(關(guān)聯(lián))包裝類和對象為模塊20子系統(tǒng)設(shè)計過程中必須定義四種重要的設(shè)計結(jié)構(gòu)問題域直接負責(zé)實現(xiàn)客戶需求的子系統(tǒng)人機交互實現(xiàn)用戶界面的子系統(tǒng)(包括可復(fù)用的GUI子系統(tǒng))任務(wù)管理負責(zé)控制和協(xié)調(diào)并發(fā)任務(wù)的子系統(tǒng),任務(wù)可能被包裝在一個子系統(tǒng)中或不同的子系統(tǒng)間;數(shù)據(jù)管理負責(zé)對象的存儲和檢索的子系統(tǒng) 21 系統(tǒng)分解:子系統(tǒng)既不是一個對象也不是一個功能,
11、而是類、關(guān)聯(lián)、操作、事件和約束的內(nèi)聚集合。定義子系統(tǒng)遵循的標(biāo)準(zhǔn):子系統(tǒng)應(yīng)有良好的接口除少數(shù)“通信類”,子系統(tǒng)中的類應(yīng)只和該子系統(tǒng)中的其它類協(xié)作子系統(tǒng)數(shù)目不應(yīng)太多可在子系統(tǒng)內(nèi)劃分以降低復(fù)雜性劃分分析模型子系統(tǒng)22客戶端子系統(tǒng)服務(wù)器端子系統(tǒng)請求子系統(tǒng)間通信子系統(tǒng)間協(xié)作的模型23 目前流行的OOD方法概述Coad-Yourdon方法Coad-Yourdon的OOD過程概述:問題域部分人機交互部分任務(wù)管理部分?jǐn)?shù)據(jù)管理部分242. 子系統(tǒng)設(shè)計劃分子系統(tǒng)(P128例6.1)處理并發(fā)操作(P129例6.2)描述子系統(tǒng)間通信(P130圖6.4)資源管理構(gòu)件253. 人機交互設(shè)計 雖然好的人機交互部分不可能挽救
12、一個功能很差的軟件, 但性能很差的人機交互部分將使一個功能很強的產(chǎn)品變的不可接受!26 人機交互設(shè)計 人-機交互部分的設(shè)計結(jié)果,將對用戶情緒和工作效率產(chǎn)生重要影響。 人-機界面設(shè)計得好,則會使系統(tǒng)對用戶產(chǎn)生吸引力,用戶在使用系統(tǒng)的過程中會感到興奮,能夠激發(fā)用戶的創(chuàng)造力,提高工作效率; 相反,人-機界面設(shè)計得不好,用戶在使用過程中就會感到不方便,不習(xí)慣,甚至?xí)a(chǎn)生厭煩和惱怒的情緒。27設(shè)計人-機交互界面的準(zhǔn)則:一致性減少步驟及時提供反饋信息提供撤銷命令無須記憶易學(xué)富有吸引力28設(shè)計人-機交互系統(tǒng)的策略:分類用戶按技能水平分類(新手/初級/中級/高級)按職務(wù)分類(總經(jīng)理/經(jīng)理/職員)按所屬集團分類
13、(職員/顧客)描述用戶用戶類型使用系統(tǒng)欲達到的目的特征(年齡、性別、受教育程度、限制因素等)關(guān)鍵的成功因素(需求、愛好、習(xí)慣等)技能水平29設(shè)計人-機交互系統(tǒng)的策略:設(shè)計命令層次研究現(xiàn)有的人-機交互含義和準(zhǔn)則確定初始的命令層次精華命令層次設(shè)計人-機交互類人-機交互類與使用的操作系統(tǒng)及編程語言密切相關(guān)。 例如:windows環(huán)境下運行的Visual C+語言提供了MFC類庫,設(shè)計人-機交互類時,往往僅需從MFC類庫中選用一些適用的雷,然后從這些類派生符合自己需要的類就可以了。 30傳感器圖形項目傳感器控制系統(tǒng)人機交互部分設(shè)計舉例調(diào)用項目傳感器狀況窗口顯示菜單調(diào)用菜單活動傳感器項目調(diào)用項目傳感器報
14、警窗口顯示菜單調(diào)用菜單活動位置傳感器報警項目調(diào)用項目傳感器窗口坐標(biāo)314. 任務(wù)管理設(shè)計321.為什么要有任務(wù)管理部分 雖然從概念上說,不同對象可以并發(fā)地工作,但是,在實際系統(tǒng)中,許多對象之間往往存在相互依賴關(guān)系。此外,在實際使用的硬件中,可能僅由一個處理器支持多個對象。因此,設(shè)計工作的一項重要內(nèi)容就是,確定哪些是必須同時動作的對象,哪些是相互排斥的對象。 一是由于在多用戶、多任務(wù)或多線程操作在系統(tǒng)上開發(fā)應(yīng)用程序的需要; 二是在通過任務(wù)描述目標(biāo)軟件系統(tǒng)中各子系統(tǒng)間的通信和協(xié)同時,引入任務(wù)概念能簡化某些應(yīng)用的設(shè)計和編碼。33分析并發(fā)性 通過面向?qū)ο蠓治鼋⑵饋淼膭討B(tài)模型,是分析并發(fā)性的主要依據(jù)。
15、如果兩個對象彼此間不存在交互,或者它們同時接受事件,則這兩個對象在本質(zhì)上是并發(fā)的。通過檢查各個對象的狀態(tài)圖及它們之間交換的事件,能夠把若干個非并發(fā)的對象歸并到一條控制線中。 所謂控制線,是一條遍及狀態(tài)圖集合的路徑,在這條路經(jīng)商每次只有一個對象是活動的。在計算機系統(tǒng)中用任務(wù)(task)實現(xiàn)控制線,一般認(rèn)為是進程(process)的別名。通常把多個任務(wù)的并發(fā)執(zhí)行稱為多個任務(wù)。 34怎樣設(shè)計任務(wù)管理部分確定事件驅(qū)動型任務(wù)確定時鐘驅(qū)動型任務(wù)確定優(yōu)先任務(wù)確定關(guān)鍵任務(wù)確定協(xié)調(diào)任務(wù)盡量減少任務(wù)數(shù)確定資源需求35傳感器控制系統(tǒng)任務(wù)管理部分設(shè)計舉例任務(wù)協(xié)調(diào)器協(xié)調(diào)任務(wù)名字描述優(yōu)先級服務(wù)協(xié)調(diào)通信初始化開始準(zhǔn)備好結(jié)束
16、10,m36傳感器任務(wù)描述舉例任務(wù)1名字: 傳感器讀出。描述: 該任務(wù)在需要脈沖調(diào)幅時負責(zé)讀 出傳感器。包含: 傳感器.樣本。優(yōu)先級:中等。協(xié)調(diào): 時鐘驅(qū)動,100ms的時間間隔。通信: 從輸入線(傳感器)得到值, 給雷達郵箱發(fā)送值。375. 數(shù)據(jù)管理設(shè)計 數(shù)據(jù)管理部分提供了數(shù)據(jù)在數(shù)據(jù)管系統(tǒng)中存儲和檢索對象的基本結(jié)構(gòu),它分離了數(shù)據(jù)管理方案的影響 (不管該方案是普通文件、關(guān)系型數(shù)據(jù)庫、面向?qū)ο髷?shù)據(jù)庫或其它方式。) 38 如何設(shè)計數(shù)據(jù)管理部分 (1)設(shè)計數(shù)據(jù)格式(2)相應(yīng)服務(wù)的設(shè)計39設(shè)計數(shù)據(jù)格式:文件系統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)40文件管理系統(tǒng) 文件管理系統(tǒng)是操作系統(tǒng)的一個組成部
17、分,使用它長期保存數(shù)據(jù)具有成本低和簡單等特點。但是,文件操作的級別低,為提供適當(dāng)?shù)某橄蠹墑e還必須編寫額外的代碼。此外,不同操作系統(tǒng)的文件管理系統(tǒng)往往有明顯差異。 41關(guān)系數(shù)據(jù)庫管理系統(tǒng) 主要優(yōu)點:提供了各種最基本的數(shù)據(jù)管理功能(例如,中斷恢復(fù),多用戶共享,多應(yīng)用共享,完整性,事務(wù)支持等)。為多種應(yīng)用提供了一致的接口。標(biāo)準(zhǔn)化的語言(大多數(shù)商品化關(guān)系數(shù)據(jù)庫管理系統(tǒng)都使用SQL語言)。42關(guān)系數(shù)據(jù)庫管理系統(tǒng)通常都相當(dāng)復(fù)雜,具體缺點:運行開銷大:即使只完成簡單的事務(wù),也需要較長的時間。不能滿足高級應(yīng)用的需求:關(guān)系數(shù)據(jù)庫管理系統(tǒng)很難用在數(shù)據(jù)類型豐富或操作不標(biāo)準(zhǔn)的應(yīng)用中。與程序設(shè)計語言的連接不自然:SQL
18、語言支持面向集合的操作,是一種非過程性語言;然而大多數(shù)程序設(shè)計語言本質(zhì)上卻是過程性的,每次只能處理一個記錄。43面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng) 面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)是一種新技術(shù),主要有兩種設(shè)計途徑:擴展的關(guān)系數(shù)據(jù)庫管理系統(tǒng):在關(guān)系數(shù)據(jù)庫的基礎(chǔ)上,增加了抽象數(shù)據(jù)類型和繼承機制,此外還增加了創(chuàng)建及管理類和對象的通用服務(wù)。擴展的面向?qū)ο蟪绦蛟O(shè)計語言:擴充了面向?qū)ο蟪绦蛟O(shè)計語言的語法和功能,增加了在數(shù)據(jù)庫中存儲和管理對象的機制。44設(shè)計數(shù)據(jù)管理子系統(tǒng) 設(shè)計數(shù)據(jù)格式文件系統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)設(shè)計相應(yīng)的服務(wù)文件系統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)45設(shè)計數(shù)據(jù)格式 文件系統(tǒng)定義第一范
19、式表:列出每個類的屬性表;把屬性表規(guī)范成第一范式,從而得到第一范式表的定義。為每個第一范式表定義一個文件。測量性能和需要的存儲容量。修改原設(shè)計的第一范式,以滿足性能和存儲需求。46設(shè)計數(shù)據(jù)格式關(guān)系數(shù)據(jù)庫管理系統(tǒng)定義第三范式表:列出每個類的屬性表;把屬性表規(guī)范成第三范式,從而得出第三范式表的定義。為每個第三范式表定義一個數(shù)據(jù)庫表。測量性能和需要的存儲容量。修改先前設(shè)計的第三范式,以滿足性能和存儲需求。47設(shè)計數(shù)據(jù)格式面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)擴展的關(guān)系數(shù)據(jù)庫途徑:使用與關(guān)系數(shù)據(jù)庫管理系統(tǒng)相同的方法。擴展的面向?qū)ο蟪绦蛟O(shè)計語言途徑:不需要規(guī)范化屬性的步驟,因為數(shù)據(jù)庫管理系統(tǒng)本身具有把對象值映射成存儲值
20、的功能。 48設(shè)計相應(yīng)的服務(wù) 如果某個類的對象需要存儲起來,則在這個類中增加一個屬性和服務(wù),用于完成存儲對象自身的工作。應(yīng)該把為此目的增加的屬性和服務(wù)作為“隱含”的屬性和服務(wù),即無須在面向?qū)ο笤O(shè)計模型的屬性和服務(wù)層中顯式地表示它們,僅需在關(guān)于類&對象的文檔中描述它們。用于“存儲自己”的屬性和服務(wù),在問題域子系統(tǒng)和數(shù)據(jù)管理子系統(tǒng)之間構(gòu)成一座必要的橋梁。這樣設(shè)計之后,對象將知道怎樣存儲自己。49設(shè)計相應(yīng)的服務(wù)文件系統(tǒng)被存儲的對象需要知道打開哪個(些)文件,怎樣把文件定位到正確的記錄上,怎樣檢索出舊值,以及怎樣用現(xiàn)有值更新它們。此外,定義一個ObjectServer(對象服務(wù)器)類,并創(chuàng)建它的實例。
21、該類提供下列服務(wù):通知對象保存自身;檢索已存儲的對象,以便把這些對象提供給其他子系統(tǒng)使用。50設(shè)計相應(yīng)的服務(wù)關(guān)系數(shù)據(jù)庫管理系統(tǒng)被存儲的對象,應(yīng)該知道訪問哪些數(shù)據(jù)庫表,怎樣訪問所需要的行,怎樣檢索出舊值,以及怎樣用現(xiàn)有值更新它們。此外,定義一個ObjectServer類,并聲明它的對象。該類提供下列服務(wù):通知對象保存自身;檢索已存儲的對象,以便由其他子系統(tǒng)使用這些對象。51設(shè)計相應(yīng)的服務(wù)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)擴展的關(guān)系數(shù)據(jù)庫途徑:與使用關(guān)系數(shù)據(jù)庫管理系統(tǒng)時方法相同。擴展的面向?qū)ο蟪绦蛟O(shè)計語言途徑:無須增加服務(wù),這種數(shù)據(jù)庫管理系統(tǒng)已經(jīng)給每個對象提供了“存儲自己”的行為。只需給需要長期保存的對象加個
22、標(biāo)記,然后由面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)負責(zé)存儲和恢復(fù)這類對象。52例子 (ATM系統(tǒng))因為必須保持?jǐn)?shù)據(jù)的一致性和完整性,而且常常有多個并發(fā)事務(wù)同時訪問這些數(shù)據(jù),因此,采用成熟的商品化關(guān)系數(shù)據(jù)庫管理系統(tǒng)存儲數(shù)據(jù)。應(yīng)該把每個事務(wù)作為一個不可分割的批操作來處理,由事務(wù)封鎖賬戶直到該事務(wù)結(jié)束為止。53例子 (ATM系統(tǒng))在這個例子中,需要存儲的對象主要是賬戶類的對象。為了支持?jǐn)?shù)據(jù)管理子系統(tǒng)的實現(xiàn),賬戶類對象必須知道自己是怎樣存儲的,有兩種方法可以達到這個目的:每個對象自己保存自己由數(shù)據(jù)管理子系統(tǒng)負責(zé)存儲對象54例子 (ATM系統(tǒng))應(yīng)該定義一個數(shù)據(jù)管理類ObjectServer,并聲明它的對象。這個類提供下
23、列服務(wù):通知對象保存自身或保存需長期存儲的對象的狀態(tài);檢索已存儲的對象并使之“復(fù)活”。55設(shè)計類中的服務(wù) 設(shè)計類中的服務(wù)是面向?qū)ο笤O(shè)計的一項重要工作內(nèi)容。確定類中應(yīng)有的服務(wù)設(shè)計實現(xiàn)服務(wù)的方法56確定類中應(yīng)有的服務(wù) 需要綜合考慮面向?qū)ο蟮姆治瞿P?,才能正確確定類中應(yīng)有的服務(wù)。對象模型動態(tài)模型功能模型57確定類中應(yīng)有的服務(wù)對象模型:通常只在每個類中列出很少幾個最核心的服務(wù)。動態(tài)模型:一張狀態(tài)圖描繪了一個對象的生命周期,圖中的狀態(tài)轉(zhuǎn)換是執(zhí)行對象服務(wù)的結(jié)果。對象的許多服務(wù)都與對象接收到的事件密切相關(guān)。對象的動作既與事件有關(guān),也與對象的狀態(tài)有關(guān)。58確定類中應(yīng)有的服務(wù)動態(tài)模型:事件表現(xiàn)為消息,接收消息的
24、對象必然有由消息選擇符指定的服務(wù),該服務(wù)改變對象狀態(tài)(修改相應(yīng)的屬性值),并完成對象應(yīng)做的動作。一個對象在不同狀態(tài)可以接受同樣事件,而且在不同狀態(tài)接收到同樣事件時其行為不同,則實現(xiàn)服務(wù)的算法中需要有一個依賴于狀態(tài)的DO-CASE型控制結(jié)構(gòu)。59確定類中應(yīng)有的服務(wù)功能模型:數(shù)據(jù)流圖中的某些處理可能與對象提供的服務(wù)相對應(yīng)。下列規(guī)則有助于確定對象的操作,即應(yīng)該在該對象所屬的類中定義相應(yīng)的服務(wù):如果某個處理的功能是從輸入流中抽取一個值,則該輸入流對象應(yīng)該定義一個相應(yīng)的服務(wù)。如果某個處理從多個輸入流得出輸出值,則該輸出類對象應(yīng)該定義一個相應(yīng)的服務(wù)。60確定類中應(yīng)有的服務(wù)如果某個處理具有類型相同的輸入流和
25、輸出流,而且輸出流實質(zhì)上是輸入流的另一種形式,則該輸入輸出流對象應(yīng)該定義一個相應(yīng)的服務(wù)。如果某個處理把對輸入流處理的結(jié)果輸出給數(shù)據(jù)存儲或動作對象,則該數(shù)據(jù)存儲或動作對象應(yīng)該定義一個相應(yīng)的服務(wù)。61確定類中應(yīng)有的服務(wù)功能模型:當(dāng)一個處理涉及多個對象時,通常在起主要作用的對象類中定義這個服務(wù)。下面兩條規(guī)則有助于確定處理的歸屬:如果處理影響或修改了一個對象,則最好在這個對象類(而不是觸發(fā)者)中定義相應(yīng)的服務(wù)??疾焯幚砩婕暗膶ο箢惣斑@些類之間的關(guān)聯(lián),從中找出處于中心地位的類。如果其他類和關(guān)聯(lián)圍繞這個中心類構(gòu)成星形,則最好在這個中心類中定義相應(yīng)的服務(wù)。 62設(shè)計實現(xiàn)服務(wù)的方法 在面向?qū)ο笤O(shè)計過程中還應(yīng)該
26、進一步設(shè)計實現(xiàn)服務(wù)的方法,主要應(yīng)該完成以下幾項工作:設(shè)計實現(xiàn)服務(wù)的算法選擇數(shù)據(jù)結(jié)構(gòu)定義內(nèi)部類和內(nèi)部操作63設(shè)計實現(xiàn)服務(wù)的算法 應(yīng)該考慮下列幾個因素:算法復(fù)雜度通常選用復(fù)雜度較低的算法,但也不要過分追求高效率,應(yīng)以能滿足用戶需求為準(zhǔn)。容易理解與容易實現(xiàn)容易理解與容易實現(xiàn)的要求往往與高效率有矛盾,設(shè)計者應(yīng)該對這兩個因素適當(dāng)折衷。易修改應(yīng)該盡可能預(yù)測將來可能做的修改,并在設(shè)計時預(yù)先做些準(zhǔn)備。 64選擇數(shù)據(jù)結(jié)構(gòu)在分析階段,僅需考慮系統(tǒng)中需要的信息的邏輯結(jié)構(gòu)。在面向?qū)ο笤O(shè)計過程中,則需要選擇能夠方便、有效地實現(xiàn)算法的物理數(shù)據(jù)結(jié)構(gòu)。 65定義內(nèi)部類和內(nèi)部操作 在面向?qū)ο笤O(shè)計過程中,可能需要增添一些在需求陳
27、述中沒有提到的類。主要用來存放在執(zhí)行算法過程中所得出的某些中間結(jié)果。此外,復(fù)雜操作往往可以用簡單對象上的更低層操作來定義。因此,在分解高層操作時常常引入新的低層操作。在面向?qū)ο笤O(shè)計過程中應(yīng)該定義這些新增加的低層操作。66設(shè) 計 關(guān) 聯(lián) 關(guān)聯(lián)關(guān)系反映對象之間相互依賴、相互作用的關(guān)系。在面向?qū)ο笤O(shè)計過程中,設(shè)計人員必須確定實現(xiàn)關(guān)聯(lián)的具體策略。關(guān)聯(lián)的遍歷實現(xiàn)單向關(guān)聯(lián)實現(xiàn)雙向關(guān)聯(lián)鏈屬性的實現(xiàn)67關(guān)聯(lián)的遍歷 在應(yīng)用系統(tǒng)中,使用關(guān)聯(lián)有兩種可能的方式:單向遍歷:實現(xiàn)簡單雙向遍歷:實現(xiàn)麻煩68實現(xiàn)單向關(guān)聯(lián)用指針可以方便地實現(xiàn)單向關(guān)聯(lián)。如果關(guān)聯(lián)的階是一元的,則實現(xiàn)關(guān)聯(lián)的指針是一個簡單指針;如果階是多元的,則需要
28、用一個指針集合實現(xiàn)關(guān)聯(lián)。 69實現(xiàn)雙向關(guān)聯(lián) 實現(xiàn)雙向關(guān)聯(lián)有下列三種方法:只用屬性實現(xiàn)一個方向的關(guān)聯(lián),當(dāng)需要反向遍歷時就執(zhí)行一次正向查找。 兩個方向的關(guān)聯(lián)都用屬性實現(xiàn),這種方法能實現(xiàn)快速訪問。70實現(xiàn)雙向關(guān)聯(lián)實現(xiàn)雙向關(guān)聯(lián)有下列三種方法:用獨立的關(guān)聯(lián)對象實現(xiàn)雙向關(guān)聯(lián)。關(guān)聯(lián)對象不屬于相互關(guān)聯(lián)的任何一個類,它是獨立的關(guān)聯(lián)類的實例 。71鏈屬性的實現(xiàn) 關(guān)聯(lián)鏈屬性的實現(xiàn)方法取決于關(guān)聯(lián)的階數(shù):一對一關(guān)聯(lián):鏈屬性作為其中一個對象的屬性而存儲在該對象中。一對多關(guān)聯(lián):鏈屬性可作為“多”端對象的一個屬性。多對多關(guān)聯(lián):通常使用一個獨立的類來實現(xiàn)鏈屬性,這個類的每個實例表示一條鏈及該鏈的屬性。 72設(shè)計優(yōu)化 確定優(yōu)先級
29、 提高效率的幾項技術(shù) 調(diào)整繼承關(guān)系 736.3 對象設(shè)計74對象描述對象描述協(xié)議描述:一組消息和對消息的注釋 實現(xiàn)描述:對對象接收到某個消息后所執(zhí)行的操作的實現(xiàn)細節(jié)的描述 算法設(shè)計 程序構(gòu)件與接口 對象間的接口和對象的整體結(jié)構(gòu) 75 對象設(shè)計 對象設(shè)計著重于對象及其相互交互的描述。 在對象設(shè)計期間:屬性數(shù)據(jù)結(jié)構(gòu)和所有操作的過程的詳細規(guī)約被創(chuàng)建。所有屬性的可見性(公共的、私有的或保護的)被定義,對象間的接口被精化以定義完整的消息模型的細節(jié)。76用例圖類 圖交互圖狀態(tài)圖方法描述:if A then Calculate Sales Tax Calculate Total Amount End if包
30、圖設(shè)計帶方法的類圖由OO分析模型轉(zhuǎn)換到OO設(shè)計模型77系統(tǒng)內(nèi)部保險單包圖示例客戶保險單填寫界面數(shù)據(jù)庫界面(abstract)Oracle界面Sybase界面78客戶支持系統(tǒng)客戶維護子系統(tǒng)包圖示例庫存管理子系統(tǒng)訂單輸入子系統(tǒng)目錄維護子系統(tǒng)訂單執(zhí)行子系統(tǒng)79客戶支持系統(tǒng)包括設(shè)計類的包圖示例客戶維護子系統(tǒng)訂單輸入子系統(tǒng)目錄維護子系統(tǒng)訂單執(zhí)行子系統(tǒng)客戶目錄包訂單條目訂單交易訂單退貨條目發(fā)運人運輸806.4 領(lǐng)域?qū)ο笤O(shè)計1.領(lǐng)域?qū)ο蟮脑O(shè)計內(nèi)容2.領(lǐng)域?qū)ο蟮脑O(shè)計模板81設(shè)計目的支持軟件復(fù)用設(shè)計內(nèi)容調(diào)整需求復(fù)用已有的組件引入父類,分組管理領(lǐng)域類添加一般化類以建立協(xié)議調(diào)整OOA模型設(shè)計復(fù)審設(shè)計模板82面向?qū)ο?/p>
31、設(shè)計實例:簡化的C+類庫管理系統(tǒng)需求描述:管理用C+語言定義的類用戶能夠方便地向類庫中添加新類,并建立新類與庫中原有類的關(guān)系用戶能夠通過類名從庫中查詢出指定的類用戶能夠查看或修改與指定類有關(guān)的信息用戶能夠從類中刪除指定的類用戶能夠在瀏覽窗中方便、快速地瀏覽當(dāng)前類的父類和子類具有“聯(lián)想”瀏覽功能用戶能查看或修改某個類的指定的成員函數(shù)的源代碼本系統(tǒng)是一個簡化的多用戶系統(tǒng),每個用戶都可以建立自己的類庫,不同類庫之間互不干擾對于用戶誤操作或錯誤的輸入,能提示并繼續(xù)穩(wěn)定運行系統(tǒng)易學(xué),用戶界面應(yīng)是GUID的83OOA階段建立的類庫管理系統(tǒng)對象模型類庫庫名類條目列表插入類條目刪除類條目1+0,n1類條目類名
32、父類列表設(shè)置類名添加父類成員函數(shù)函數(shù)名訪問權(quán)虛基類標(biāo)志父類名字訪問權(quán)虛基類標(biāo)志數(shù)據(jù)成員數(shù)據(jù)名訪問權(quán)數(shù)據(jù)類型0,n20,n30,m用戶擁有84面向?qū)ο笤O(shè)計(簡化的C+類庫管理系統(tǒng))設(shè)計類庫結(jié)構(gòu) 兩種可把類條目組織成類庫得數(shù)據(jù)結(jié)構(gòu):二叉樹鏈表: 容易表示多重繼承設(shè)計問題域子系統(tǒng)對對象模型做補充和細化類條目(ClassEntry)類庫(ClassEntryLink)父類(ClassBase)、成員函數(shù)(ClassFun) 和數(shù)據(jù)成員(ClassData)類條目緩沖區(qū)(ClassEntryBuffer)85類條目類名父類列表成員函數(shù)列表數(shù)據(jù)成員列表類條目類名父類鏈表頭指針成員函數(shù)鏈表頭指針數(shù)據(jù)成員鏈表
33、頭指針注釋指向下一類條目指針新增數(shù)據(jù)成員新增操作設(shè)置類名添加父類刪除父類更改父類添加成員函數(shù)刪除成員函數(shù)更改成員函數(shù)添加數(shù)據(jù)成員刪除數(shù)據(jù)成員更改數(shù)據(jù)成員具體化設(shè)置類名添加父類刪除父類更改父類添加成員函數(shù)刪除成員函數(shù)更改成員函數(shù)添加數(shù)據(jù)成員刪除數(shù)據(jù)成員更改數(shù)據(jù)成員查找并取出指定父類信息查找并取出指定成員函數(shù)信息查找并取出指定數(shù)據(jù)成員信息86類庫庫名類條目列表插入類條目刪除類條目存儲類庫讀出類庫具體化為類庫庫名類鏈頭指針插入類條目刪除類條目把內(nèi)存中類鏈表寫到文件讀文件并在內(nèi)存建立鏈表按類名查找類條目并把內(nèi)容復(fù)制到指定地點新增操作具體化87父類名字訪問權(quán)虛基類標(biāo)志新增數(shù)據(jù)成員父類名字訪問權(quán)虛基類標(biāo)志
34、指向下一個父類的指針成員函數(shù)函數(shù)名訪問權(quán)虛基類標(biāo)志返回值類型參數(shù)代碼新增數(shù)據(jù)成員成員函數(shù)函數(shù)名訪問權(quán)虛基類標(biāo)志返回值類型參數(shù)代碼指向下一個成員函數(shù)的指針數(shù)據(jù)成員數(shù)據(jù)名訪問權(quán)數(shù)據(jù)類型新增數(shù)據(jù)成員數(shù)據(jù)成員數(shù)據(jù)名訪問權(quán)數(shù)據(jù)類型指向下一個數(shù)據(jù)成員的指針88類庫(ClassEntryLink)示意圖下一個ClassEntryClassEntryLinkClassEntryClassBaseClassDataClassFun下一個ClassBase下一個ClassFun 下一個ClassData89 類條目緩沖區(qū)(ClassEntryBuffer) 為便于處理當(dāng)前類,額外設(shè)置類條目緩沖區(qū),它是從ClassEntry類派生出來的類,除繼承ClassEntry中的數(shù)據(jù)成員和成員函數(shù)外,主要增加用于域窗口或類鏈交換數(shù)據(jù)的成員函數(shù)ClassEntryClassEntryBuffer90面向?qū)ο笤O(shè)計(簡化的C+類庫管理系統(tǒng))設(shè)計人機交互子系統(tǒng)窗口登錄窗口(用戶輸入賬號、確認(rèn)/放棄)主窗口(創(chuàng)建/瀏覽/存儲/退出)創(chuàng)建窗口(輸入新類名/選擇已有類名,三個分組框分別管理父類、成員函數(shù)和數(shù)據(jù)成員,每組框有:添加/編輯/刪除)選擇瀏覽方式窗口(按類名瀏覽/按類關(guān)系瀏覽)類名
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- LED廣告車2024年租賃合同范本2篇
- 2025年度鄰里社區(qū)共筑住宅項目綠化養(yǎng)護協(xié)議3篇
- 2025年度生態(tài)農(nóng)業(yè)地產(chǎn)合作開發(fā)合同書
- 二零二五年度出租車座套定制與品牌推廣合同3篇
- 二零二五版電力設(shè)備質(zhì)檢員招聘與職責(zé)協(xié)議書3篇
- 個性化倉儲解決方案服務(wù)外包協(xié)議范本版A版
- 2025年度企業(yè)員工心理健康培訓(xùn)服務(wù)合同范本8篇
- 中美洲2024年原材料供應(yīng)協(xié)議
- 養(yǎng)殖場動物疫病防治服務(wù)合同(2025年度)3篇
- 2025版圍欄施工安全風(fēng)險評估與應(yīng)急預(yù)案合同3篇
- 浙教版七年級上冊數(shù)學(xué)第4章代數(shù)式單元測試卷(含答案)
- 一病一品成果護理匯報
- AQ-T 1009-2021礦山救護隊標(biāo)準(zhǔn)化考核規(guī)范
- 鹽酸??颂婺崤R床療效、不良反應(yīng)與藥代動力學(xué)的相關(guān)性分析的開題報告
- 消防設(shè)施安全檢查表
- 組合結(jié)構(gòu)設(shè)計原理 第2版 課件 第6、7章 鋼-混凝土組合梁、鋼-混凝土組合剪力墻
- 建筑公司資質(zhì)常識培訓(xùn)課件
- GB/T 26316-2023市場、民意和社會調(diào)查(包括洞察與數(shù)據(jù)分析)術(shù)語和服務(wù)要求
- 春節(jié)值班安全教育培訓(xùn)
- 帶狀皰疹護理查房
- 平衡計分卡-化戰(zhàn)略為行動
評論
0/150
提交評論