第7章 面向?qū)ο蟮脑O(shè)計_第1頁
第7章 面向?qū)ο蟮脑O(shè)計_第2頁
第7章 面向?qū)ο蟮脑O(shè)計_第3頁
第7章 面向?qū)ο蟮脑O(shè)計_第4頁
第7章 面向?qū)ο蟮脑O(shè)計_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1

軟件工程

SoftwareEngineering

2第7章面向?qū)ο蟮脑O(shè)計從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計(通??s寫為OOD),是一個逐漸擴充模型的過程。或者說,面向?qū)ο笤O(shè)計就是用面向?qū)ο笥^點建立求解域模型的過程。分析和設(shè)計活動是一個多次反復(fù)迭代的過程,二者的界限是模糊的。第7章面向?qū)ο蟮脑O(shè)計面向?qū)ο笤O(shè)計過程與準則體系結(jié)構(gòu)系統(tǒng)分解問題域部分的設(shè)計人機交互部分的設(shè)計任務(wù)管理部分的設(shè)計數(shù)據(jù)管理部分的設(shè)計對象設(shè)計面向?qū)ο笤O(shè)計過程與準則典型的面向?qū)ο笤O(shè)計模型面向?qū)ο笤O(shè)計過程與準則Coad&Yourdon的面向?qū)ο笤O(shè)計模型Coad&Yourdon基于MVC(Model-View-Controller)模型,在邏輯上將系統(tǒng)劃分為4個部分,分別是問題域部分、人機交互部分、任務(wù)管理部分及數(shù)據(jù)管理部分,每一部分又可分為若干子系統(tǒng)。Coad與Yourdon在設(shè)計階段中繼續(xù)采用了分析階段中提到的5個層次,用于建立系統(tǒng)的4個組成成分。每一個子系統(tǒng)都由主題、類-&-對象、結(jié)構(gòu)、屬性和服務(wù)5個層次組成。這5個層次可以被當作整個模型的水平切片。面向?qū)ο笤O(shè)計過程與準則人機交互部分有效的人機交互所必須的實際顯示和輸入。問題域部分放置面向?qū)ο蠓治鼋Y(jié)果并管理面向?qū)ο蠓治龅哪承╊惡蛯ο?、結(jié)構(gòu)、屬性和方法。任務(wù)管理部分任務(wù)定義、通信和協(xié)調(diào)、硬件分配及外部系統(tǒng)。數(shù)據(jù)管理部分

永久性數(shù)據(jù)的訪問和管理。面向?qū)ο笤O(shè)計過程與準則面向?qū)ο笤O(shè)計準則模塊化傳統(tǒng)的面向過程方法中的模塊通常是函數(shù)、過程及子程序等,而面向?qū)ο蠓椒ㄖ械哪K則是類、對象、接口、構(gòu)件等。在面向過程的方法中,數(shù)據(jù)及在數(shù)據(jù)上的處理是分離的;而在面向?qū)ο蠓椒ㄖ?,?shù)據(jù)及其上的處理是封裝在一起的,具有更好的獨立性,也能夠更好地支持復(fù)用。面向?qū)ο笤O(shè)計過程與準則(2)抽象面向?qū)ο蠓椒ú粌H支持過程抽象,而且支持數(shù)據(jù)抽象。類實際上就是一種抽象數(shù)據(jù)類型??梢詫㈩惖某橄蠓譃橐?guī)格說明抽象及參數(shù)化抽象。類對外開放的公共接口構(gòu)成了類的規(guī)格說明,即協(xié)議。這種接口規(guī)定了外部可以使用的服務(wù),使用者無需知道這些服務(wù)的具體實現(xiàn)算法。通常將這類抽象稱為規(guī)格說明抽象。參數(shù)化抽象是指當描述類的規(guī)格說明時并不具體指定所要操作的數(shù)據(jù)類型,而是將數(shù)據(jù)類型作為參數(shù)。面向?qū)ο笤O(shè)計過程與準則(3)信息隱藏在面向?qū)ο蠓椒ㄖ?,信息隱藏通過對象的封裝性實現(xiàn)。對于類的用戶來說,屬性的表示方法和操作的實現(xiàn)算法都應(yīng)該是隱藏的。(4)弱耦合耦合是指一個軟件結(jié)構(gòu)內(nèi)不同模塊之間互連的緊密程度。在面向?qū)ο蠓椒ㄖ?,對象是最基本的模塊,因此,耦合主要指不同對象之間相互關(guān)聯(lián)的緊密程度。

面向?qū)ο笤O(shè)計過程與準則(5)強內(nèi)聚內(nèi)聚衡量一個模塊內(nèi)各個元素彼此結(jié)合的緊密程度。在面向?qū)ο笤O(shè)計中存在以下3種內(nèi)聚:(1)服務(wù)內(nèi)聚:一個服務(wù)應(yīng)該完成一個且僅完成一個功能。(2)類內(nèi)聚:設(shè)計類的原則是,一個類應(yīng)該只有一個用途,它的屬性和服務(wù)應(yīng)該是高內(nèi)聚的。類的屬性和服務(wù)應(yīng)該全都是完成該類對象的任務(wù)所必需的,其中不包含無用的屬性或服務(wù)。如果某個類有多個用途,通常應(yīng)該把它分解成多個專用的類。(3)一般—特殊內(nèi)聚:設(shè)計出的一般—特殊結(jié)構(gòu),應(yīng)該符合多數(shù)人的概念,更準確地說,這種結(jié)構(gòu)應(yīng)該是對相應(yīng)的領(lǐng)域知識的正確抽取。面向?qū)ο笤O(shè)計過程與準則(6)可重用軟件重用是提高軟件開發(fā)生產(chǎn)率和目標系統(tǒng)質(zhì)量的重要途徑。重用基本上從設(shè)計階段開始。重用有兩方面的含義:一、盡量使用已有的類(包括開發(fā)環(huán)境提供的類庫,及以往開發(fā)類似系統(tǒng)時創(chuàng)建的類),二、如果確實需要創(chuàng)建新類,則在設(shè)計這些新類的協(xié)議時,應(yīng)該考慮將來的可重復(fù)使用性。分布式系統(tǒng)結(jié)構(gòu)傳統(tǒng)的C/S體系結(jié)構(gòu)分為兩層。在這種體系結(jié)構(gòu)中,一個應(yīng)用系統(tǒng)被劃分為客戶機和服務(wù)器兩部分。典型的兩層C/S體系結(jié)構(gòu)如下圖所示。12分布式系統(tǒng)結(jié)構(gòu)三層C/S體系結(jié)構(gòu)中增加了應(yīng)用服務(wù)器??梢詫⒄麄€應(yīng)用邏輯駐留在應(yīng)用服務(wù)器上,而只有表示層存在于客戶機上。13

三層C/S體系結(jié)構(gòu)將整個系統(tǒng)分成表示層、應(yīng)用邏輯層和數(shù)據(jù)層三個部分,其數(shù)據(jù)處理流程如下圖所示。分布式系統(tǒng)結(jié)構(gòu)(1)表示層:表示層是應(yīng)用系統(tǒng)的用戶界面部分,擔負著用戶與應(yīng)用程序之間的對話功能。它用于檢查用戶從鍵盤等輸入的數(shù)據(jù),顯示應(yīng)用程序輸出的數(shù)據(jù),一般采用圖形用戶界面(graphicuserinterface,GUI)。(2)應(yīng)用邏輯層:應(yīng)用邏輯層為應(yīng)用系統(tǒng)的主體部分,包含具體的業(yè)務(wù)處理邏輯。通常在功能層中包含有確認用戶對應(yīng)用和數(shù)據(jù)庫存取權(quán)限的功能以及記錄系統(tǒng)處理日志的功能。(3)數(shù)據(jù)層:數(shù)據(jù)層主要包括數(shù)據(jù)的存儲及對數(shù)據(jù)的存取操作,一般選擇關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。分布式系統(tǒng)結(jié)構(gòu)瀏覽器/服務(wù)器(browser/server,B/S)風格是三層體系結(jié)構(gòu)的一種實現(xiàn)方式,其具體結(jié)構(gòu)為瀏覽器/Web服務(wù)器/數(shù)據(jù)庫服務(wù)器。B/S體系結(jié)構(gòu)如下圖所示。分布式系統(tǒng)結(jié)構(gòu)在客戶機/服務(wù)器模型中,客戶機和服務(wù)器的地位是不同的。為了消除客戶機與服務(wù)器之間的差別,提高系統(tǒng)的伸縮性以及有效地均衡負載,可采用分布式對象體系結(jié)構(gòu)來設(shè)計系統(tǒng)。

分布式對象的實質(zhì)是在分布式異構(gòu)環(huán)境下建立應(yīng)用系統(tǒng)框架和對象構(gòu)件,它將應(yīng)用服務(wù)分割成具有完整邏輯含義的獨立子模塊(稱為構(gòu)件),各個子模塊可放在同一臺服務(wù)器或分布在多臺服務(wù)器上運行,模塊之間通過中間件互相通信。分布式對象體系結(jié)構(gòu)

分布式系統(tǒng)結(jié)構(gòu)

通常將這個中間件稱為軟件總線或?qū)ο笳埱蟠恚淖饔檬窃趯ο笾g提供一個無縫接口。

分布式對象技術(shù)的應(yīng)用目的是為了降低主服務(wù)器的負荷、共享網(wǎng)絡(luò)資源、平衡網(wǎng)絡(luò)中計算機業(yè)務(wù)處理的分配,提高計算機系統(tǒng)協(xié)同處理的能力,從而使應(yīng)用的實現(xiàn)更為靈活。分布式系統(tǒng)結(jié)構(gòu)分布式對象技術(shù)的基礎(chǔ)是構(gòu)件。構(gòu)件是一些獨立的代碼封裝體,在分布計算的環(huán)境下可以是一個簡單的對象,但大多數(shù)情況下是一組相關(guān)的對象組合體,提供一定的服務(wù)。分布式環(huán)境下,構(gòu)件是一些靈活的軟件模塊,它們可以位置透明、語言獨立和平臺獨立地互相發(fā)送消息,實現(xiàn)請求服務(wù)。構(gòu)件之間并不存在客戶機與服務(wù)器的界限,接受服務(wù)者扮演客戶機的角色,提供服務(wù)者就是服務(wù)器。分布式系統(tǒng)結(jié)構(gòu)當前主流的分布式對象技術(shù)規(guī)范有OMG的CORBA、Microsoft公司的.NET和Sun公司的J2EE。它們都支持服務(wù)端構(gòu)件的開發(fā),都有其各自的特點。分布式系統(tǒng)結(jié)構(gòu)MVC框架即模型—視圖—控制器(model-view-controller)框架。一個交互式應(yīng)用系統(tǒng)由模型、視圖和控制器3個部件組成。

MVC框架

體系結(jié)構(gòu)框架22體系結(jié)構(gòu)框架MVC框架J2EE的核心體系結(jié)構(gòu)就是在MVC框架的基礎(chǔ)上進行擴展得到的,如下圖所示。J2EE體系結(jié)構(gòu)框架

J2EE的核心體系結(jié)構(gòu)框架

體系結(jié)構(gòu)框架問題域部分的設(shè)計典型的面向?qū)ο笙到y(tǒng)一般由三層組成,即數(shù)據(jù)庫層、業(yè)務(wù)邏輯層及用戶界面層。那么,在這三層中,首先從哪一層開始設(shè)計呢?實際上,面向?qū)ο蟮脑O(shè)計也是以面向?qū)ο蠓治龅哪P蜑榛A(chǔ)的。面向?qū)ο蟮姆治瞿P桶ㄓ杏美龍D、類圖、順序圖和包圖,主要是對問題領(lǐng)域進行描述,基本上不考慮技術(shù)實現(xiàn),當然也不考慮數(shù)據(jù)庫層和用戶界面層。面向?qū)ο蠓治鏊玫降膯栴}域模型可以直接應(yīng)用于系統(tǒng)的問題域部分的設(shè)計。

所以,面向?qū)ο笤O(shè)計應(yīng)該從問題域部分的設(shè)計開始,也就是三層結(jié)構(gòu)的中間層——應(yīng)用邏輯層。問題域部分的設(shè)計在面向?qū)ο笤O(shè)計過程中,可能對面向?qū)ο蠓治鏊贸龅膯栴}域模型做以下方面的補充或調(diào)整。調(diào)整需求。有兩種情況會導(dǎo)致修改通過面向?qū)ο蠓治鏊_定的系統(tǒng)需求:一是用戶需求或外部環(huán)境發(fā)生變化;二是分析員對問題理解不透徹,導(dǎo)致分析模型不能完整、準確地反映用戶的真實需求。問題域部分的設(shè)計(2)復(fù)用已有的類從類庫選擇已有的類,從供應(yīng)商那里購買商業(yè)外購構(gòu)件,從網(wǎng)絡(luò)、組織、小組或個人那里搜集適用的遺留軟構(gòu)件,把它們增加到問題域部分的設(shè)計中去。在被復(fù)用的已有類和問題域類之間添加泛化(一般化∕特殊化)關(guān)系,繼承被復(fù)用類或構(gòu)件屬性和方法。標出在問題域類中因繼承被復(fù)用的已有類或構(gòu)件而成為多余的屬性和服務(wù)。修改與問題域類相關(guān)的關(guān)聯(lián)。

問題域部分的設(shè)計(3)把問題域類組合在一起在進行面向?qū)ο笤O(shè)計時,通常需要先引入一個類,以便將問題域?qū)S玫念惤M合在一起,它起到“根”類的作用,將全部下層的類組合在一起。當沒有一種更滿意的組合機制可用時,可以從類庫中引進一個根類,作為包容類,把所有與問題領(lǐng)域有關(guān)的類關(guān)聯(lián)到一起,建立類的層次。之后,將同一問題領(lǐng)域的一些類集合起來,存于類庫中。問題域部分的設(shè)計(4)增添泛化類以建立類間的協(xié)議有時某些問題域的類要求一組類似的服務(wù)(以及相應(yīng)的屬性)。此時,以這些問題域的類作為特化的類,定義一個泛化類。該泛化類定義了為所有這些特化類共用的一組服務(wù)名,作為公共的協(xié)議,用來與數(shù)據(jù)管理或其他外部系統(tǒng)部件通信。這些服務(wù)都是虛函數(shù)。在各個特化類中定義其實現(xiàn)。問題域部分的設(shè)計(5)調(diào)整繼承的支持級別如果在分析模型中一個泛化關(guān)系中的特化類繼承了多個類的屬性或服務(wù),就產(chǎn)生了多繼承關(guān)系,如圖所示。問題域部分的設(shè)計1)針對單繼承語言的調(diào)整。對于只支持單繼承關(guān)系的編程語言,可以使用兩種方法將多繼承結(jié)構(gòu)轉(zhuǎn)換為單繼承結(jié)構(gòu)。

把特化類看做是泛化類所扮演的角色,如圖(a)和圖(b)所示。問題域部分的設(shè)計

把多繼承的層次結(jié)構(gòu)平鋪為單繼承的層次結(jié)構(gòu),如圖所示。這意味著該泛化關(guān)系在設(shè)計中就不再那么清晰了。同時某些屬性和服務(wù)在特化類中重復(fù)出現(xiàn),造成冗余。問題域部分的設(shè)計2)針對無繼承語言的調(diào)整。編程語言中的繼承屬性提供了表達問題域的一般化∕特殊化語義的語法,它明確地表示了公共屬性和服務(wù),還為通過可擴展性而達到可復(fù)用性提供了基礎(chǔ)。然而,由于開發(fā)組織方面的原因,有些項目最終選擇了不支持繼承性的編程語言。對于一個不支持繼承的編程語言來說,只能將每一個泛化關(guān)系的層次展開,成為一組類及對象,之后再使用命名慣例將它們組合在一起。

問題域部分的設(shè)計(6)改進性能提高執(zhí)行效率是系統(tǒng)設(shè)計的目標之一。為以提高效率有時必須改變問題域的結(jié)構(gòu)。

1)如果類之間經(jīng)常需要傳送大量消息,可合并相關(guān)的類,使得通信成為對象內(nèi)的通信,而不是對象之間的通信,或者使用全局數(shù)據(jù)作用域,打破封裝的原則,以減少消息傳遞引起的速度損失。

2)增加某些屬性到原來的類中,或增加低

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論