面向?qū)ο笤O(shè)計(jì)方法_第1頁
面向?qū)ο笤O(shè)計(jì)方法_第2頁
面向?qū)ο笤O(shè)計(jì)方法_第3頁
面向?qū)ο笤O(shè)計(jì)方法_第4頁
面向?qū)ο笤O(shè)計(jì)方法_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

面向?qū)ο笤O(shè)計(jì)方法第一頁,共四十頁,編輯于2023年,星期五OOD概述

OOA是提取和整理用戶需求,并建立問題域精確模型的過程。而 OOD則是將OOA階段得到的需求轉(zhuǎn)變?yōu)榉铣杀竞唾|(zhì)量要求的、抽象的系統(tǒng)實(shí)現(xiàn)方案的過程。 盡管兩個(gè)的任務(wù)不同,但是兩者之間并沒有明確的界限。許多分析的結(jié)果可以直接映射成設(shè)計(jì)的結(jié)果,而設(shè)計(jì)過程中往往會(huì)加深對需求的理解,從而進(jìn)一步完善分析結(jié)果。第二頁,共四十頁,編輯于2023年,星期五第九章面向?qū)ο笤O(shè)計(jì)9·1OOD準(zhǔn)則9·2啟發(fā)式規(guī)則9·3軟件重用(SoftwareReuse)9·4系統(tǒng)分解9·5設(shè)計(jì)類中的服務(wù)9·6設(shè)計(jì)關(guān)聯(lián)9·7優(yōu)化9·8本章重點(diǎn)第三頁,共四十頁,編輯于2023年,星期五9·1OOD準(zhǔn)則優(yōu)秀軟件設(shè)計(jì)的一個(gè)重要特點(diǎn)是容易維護(hù)。回顧:SD準(zhǔn)則包括

模塊化抽象信息隱藏模塊獨(dú)立對于OOD有類似的準(zhǔn)則:

1、Module=Object第四頁,共四十頁,編輯于2023年,星期五OOD準(zhǔn)則(續(xù))

Procedureabstraction:在SD中已討論

Dataabstraction:Class即是一種抽象數(shù)據(jù)類型。外界無須知道實(shí)現(xiàn)方法就可按照類協(xié)議(classdescriptionprotocol)*

使用class中定義的數(shù)據(jù)。

Parameterabstraction:將數(shù)據(jù)類型作為參數(shù)處理。2、Abstraction:抽出事物的本質(zhì)特性,暫不考慮其細(xì)節(jié),使設(shè)計(jì)從具體實(shí)現(xiàn)方法中超脫。第五頁,共四十頁,編輯于2023年,星期五OOD準(zhǔn)則(續(xù))例:C++中的“模板”(template)template<classT,intn>classarray_n{private:Titems[n];//定義了T類型的向量元素共n個(gè)};main(){……array_n<complex,1000>w;//w是有1000個(gè)元素的復(fù)向量……}第六頁,共四十頁,編輯于2023年,星期五OOD準(zhǔn)則(續(xù))3、Informationhiding=Encapsulationofobject4、耦合(Coupling):

交互耦合(interactivecoupling):通過傳遞message發(fā)生要求降低參數(shù)個(gè)數(shù)和參數(shù)復(fù)雜性減少objects發(fā)送\接收message的個(gè)數(shù)as

looseaspossible

繼承耦合(inheritancecoupling):

要求ParentclassIS_Achildclassashighaspossible第七頁,共四十頁,編輯于2023年,星期五OOD準(zhǔn)則(續(xù))一般-特殊內(nèi)聚(general-particularcohesion):Highg-pcohesionHighinheritancecoupling5、Cohesion:服務(wù)內(nèi)聚(servicecohesion):一個(gè)服務(wù)只完成一個(gè)功能。類內(nèi)聚(classcohesion):一個(gè)類只有一個(gè)用途,否則分解之。6、可重用Reusability(詳見11·3)第八頁,共四十頁,編輯于2023年,星期五9·2啟發(fā)式規(guī)則1、設(shè)計(jì)結(jié)果清晰易懂,應(yīng)做到:①用詞一致——按習(xí)慣用法命名。不同classes中相似的methods最好取同一名字。②使用已有的protocol。③盡量減少message模式的數(shù)目。④避免模糊定義。2、一般-特殊結(jié)構(gòu)的深度應(yīng)適當(dāng)(約100個(gè)classes,則設(shè)計(jì)7±2層)第九頁,共四十頁,編輯于2023年,星期五啟發(fā)式規(guī)則(續(xù))3、設(shè)計(jì)簡單的class(定義不超過一頁紙或兩屏)。應(yīng)注意:①避免過多attributes;②能用簡單的語句描述一個(gè)class的任務(wù);③objects之間合作關(guān)系要簡單;④避免過多methods(7個(gè))。問題:設(shè)計(jì)出大量的classes,使結(jié)構(gòu)復(fù)雜度增加。解決:劃分主題,提高可理解性。4、使用簡單的協(xié)議(protocol),減少message中傳遞的parameters5、使用簡單的method(CASE可考慮用

inheritance替代)。6、把設(shè)計(jì)變動(dòng)減至最小。第十頁,共四十頁,編輯于2023年,星期五9·3軟件重用(SoftwareReuse)一、重用的概念:知識重用(例如軟件工程知識的重用)方法和標(biāo)準(zhǔn)重用(例如OO方法和國家規(guī)定的軟件開發(fā)規(guī)范的重用)軟件成分的重用知識工程

源碼剪貼——無法溯源,無配置管理

Include——

修改后所有包含了此段代碼的程序都須重新編譯。

Inheritance——無須改動(dòng)原有代碼

想象一下,stdio.h被改動(dòng)之后……重用軟件成分有三個(gè)級別:①代碼重用:第十一頁,共四十頁,編輯于2023年,星期五一、重用的概念(續(xù))②設(shè)計(jì)重用——當(dāng)移植系統(tǒng)時(shí)③分析重用——當(dāng)需求未變,而系統(tǒng)結(jié)構(gòu)改變時(shí)二、重用效果的衡量:⑴額外代價(jià):

創(chuàng)建可重用成分的專門投資

多花2~4倍時(shí)間測試以保證質(zhì)量

構(gòu)件庫的建立與維護(hù)需要投資

以上投資將分?jǐn)偟街赜眠@些構(gòu)件的新系統(tǒng)成本中。重用次數(shù)越多,分?jǐn)偝杀驹缴佟5谑?,共四十頁,編輯?023年,星期五二、重用效果的衡量(續(xù)):記:Lt=程序總長度(#oflines)

Ln=新編代碼長度

Lr=重用代碼長度

Et

、En、Er

總、新編、重用工作量⑵重用率與生產(chǎn)率的關(guān)系ProductivityReusability=開發(fā)代碼的生產(chǎn)率重用新代碼的生產(chǎn)率第十三頁,共四十頁,編輯于2023年,星期五二、重用效果的衡量(續(xù)):三、軟件重用技術(shù):指利用可重用的構(gòu)件開發(fā)軟件的技術(shù),及開發(fā)可重用軟件的技術(shù)。①軟件組合技術(shù):底層部件庫法(Bottom-upcompositionalreuse)

從可重用的代碼部件庫(reuserepository)中選用部件,組合成軟件。A:是,前提條件為Cn<Cr,即重用比新開發(fā)效率高。Q:是否R

越高P就越高?上層組合法:完整程序的組合第十四頁,共四十頁,編輯于2023年,星期五三、軟件重用技術(shù)(續(xù)):②軟件生成技術(shù):按照形式化的軟件功能描述和一定的生成機(jī)理,由生成器系統(tǒng)(generatorsystem)自動(dòng)生成目標(biāo)程序。重用的是generator的代碼規(guī)則③OO重用技術(shù):Classcomponent的重用(詳見下文)⑷類構(gòu)件(Classcomponent):①可重用的軟構(gòu)件應(yīng)具備的特點(diǎn):

獨(dú)立、可塑、接口清晰(文檔詳盡)第十五頁,共四十頁,編輯于2023年,星期五三、軟件重用技術(shù)(續(xù)):②重用方式:

實(shí)例重用(instancereuse\black-boxreuse):

創(chuàng)建class的不同instances,通過messages完成

不同的任務(wù)。是最基本的重用方式。

用幾個(gè)簡單的objects創(chuàng)建出更復(fù)雜的class,

是實(shí)例重用的另一種形式

繼承重用(inheritancereuse):

是一種安全地裁剪已有的classcomponent的方式。多態(tài)重用(polymorphismreuse):

Parentclass與childclass有相同的對外接口,使

消息連接的復(fù)雜度降低。第十六頁,共四十頁,編輯于2023年,星期五三、軟件重用技術(shù)(續(xù)):注意:有些操作可能會(huì)妨礙classcomponent的重用,如與表示方法有關(guān)的操作與數(shù)據(jù)結(jié)構(gòu)、大小有關(guān)的操作與外部設(shè)備有關(guān)的操作

實(shí)現(xiàn)算法在將來可能會(huì)改進(jìn)\改變的核心操作解決方法:將這些操作分離出來,作為適配接口(adaptiveinterface),使class中其它操作通過調(diào)用AI而實(shí)現(xiàn)。在不同應(yīng)用環(huán)境下,用戶只須重新定義AI操作就可以重用class。第十七頁,共四十頁,編輯于2023年,星期五三、軟件重用技術(shù)(續(xù)):AdaptiveInterface還可進(jìn)一步細(xì)分為轉(zhuǎn)換接口(transitioninterface):重用時(shí)必須重定義與表示方法、數(shù)據(jù)結(jié)構(gòu)、硬件等有關(guān)的操作(例如C++中class里的purevirtualfunction)擴(kuò)充接口(expansioninterface):一個(gè)操作可由多種算法實(shí)現(xiàn),若無新算法則繼承老算法。第十八頁,共四十頁,編輯于2023年,星期五9·4系統(tǒng)分解IPO問題域ApplicationDomain人機(jī)交互Human-ComputerInterface(HCI)任務(wù)管理TaskManagement數(shù)據(jù)管理DataManagementMethodAttributeStructureClass-&-ObjectCategory回顧SD:從DFD出發(fā)OOD模型分解:第十九頁,共四十頁,編輯于2023年,星期五一、子系統(tǒng)之間的交互方式(collaboration)①客戶-供應(yīng)商(client-server)關(guān)系:②平等伙伴(peer-to-peer)關(guān)系:ClientsubsystemcontractServersubsystemrequestcontractPeersubsystemcontractPeersubsystemrequestrequest第二十頁,共四十頁,編輯于2023年,星期五二、系統(tǒng)組織方案①水平層次組織:將系統(tǒng)組織成層次,同一層中的objects相互獨(dú)立,而上、下層間有client-server關(guān)系。一個(gè)client只能調(diào)用其相鄰下層的server——封閉式(closed)一個(gè)client可調(diào)用其下任一層的server——開放式(open)

優(yōu)點(diǎn):高效;缺點(diǎn):修改影響面廣第二十一頁,共四十頁,編輯于2023年,星期五二、系統(tǒng)組織方案(續(xù))典型應(yīng)用系統(tǒng)的組織結(jié)構(gòu)②垂直塊組織:將系統(tǒng)垂直分解成若干獨(dú)立的子系統(tǒng),一個(gè)子系統(tǒng)相當(dāng)于一塊,每塊提供一種類型的服務(wù)。HCI應(yīng)用軟件包操作系統(tǒng)計(jì)算機(jī)硬件人機(jī)對話控制仿真軟件包圖形處理窗口圖形屏幕圖形象素圖形第二十二頁,共四十頁,編輯于2023年,星期五三、四種子系統(tǒng)的設(shè)計(jì)⑴問題域子系統(tǒng):基于OOA建立的objectmodel,進(jìn)行補(bǔ)充修改。①調(diào)整需求②重用class:選出可用的class,標(biāo)出與本問題無關(guān)的attributes和methods

派生出childclass,標(biāo)出繼承的attributes和methods

修改關(guān)聯(lián)③組合class:通過引入rootclass完成,用于建立publicprotocol。④調(diào)整inheritance。第二十三頁,共四十頁,編輯于2023年,星期五三、四種子系統(tǒng)的設(shè)計(jì)(續(xù))⑵HCI子系統(tǒng):好的包裝①設(shè)計(jì)準(zhǔn)則:一致性:術(shù)語、步驟、操作等始終一致。減少步驟:使完成一件任務(wù)所需敲鍵盤、點(diǎn)鼠標(biāo)、下拉菜單等的次數(shù)都減至最少。及時(shí)提供反饋信息:提供hotkey操作做一個(gè)體貼的statusbar提供撤銷(undo)命令:無須記憶:不應(yīng)要求用戶記住某個(gè)窗口的信息,然后再用到窗口中——這是系統(tǒng)的責(zé)任而不是用戶的任務(wù)。仁慈的你如佛祖對眾生:回頭是岸易學(xué):提供HELP、聯(lián)機(jī)參考等。富有吸引力第二十四頁,共四十頁,編輯于2023年,星期五三、四種子系統(tǒng)的設(shè)計(jì)(續(xù))②設(shè)計(jì)策略設(shè)計(jì)HCI類:例如VC提供的MFC類庫(MicrosoftFoundationClassLibrary)將用戶分類(按技能、職務(wù)等)描述用戶的類型、水平、使用目的、其它特征(如年齡、性別、習(xí)慣等),寫出操作腳本設(shè)計(jì)命令層次:注意同用戶熟悉的方式(如windows界面)盡量保持一致.次序、深度、寬度調(diào)整適當(dāng)?shù)诙屙?,共四十頁,編輯?023年,星期五三、四種子系統(tǒng)的設(shè)計(jì)(續(xù))⑶任務(wù)管理子系統(tǒng):基于OOA建立的dynamicmodel①分析并發(fā)性:若兩個(gè)objects之間無交互行為,或它們同時(shí)接受events,則它們本質(zhì)上是并發(fā)的(synchronous)考察eventflowdiagram,找出沒有并發(fā)對象的路徑(稱為控制線),每條對應(yīng)一個(gè)任務(wù)(task,亦稱process)不同的tasks對應(yīng)必須同時(shí)發(fā)生的不同行為第二十六頁,共四十頁,編輯于2023年,星期五三、四種子系統(tǒng)的設(shè)計(jì)(續(xù))②確定task類型,并分配給適當(dāng)?shù)能沑硬件去執(zhí)行事件驅(qū)動(dòng)型(event-driven):主要完成通信工作。

event=數(shù)據(jù)到達(dá)的interrupt時(shí)鐘驅(qū)動(dòng)型(clock-driven):完成周期性工作。優(yōu)先型(priority):將highpriority或lowpriority的任務(wù)專門分離出來先做或后做。關(guān)鍵任務(wù)(keytask):指關(guān)系系統(tǒng)成敗的處理,要求高可靠性,應(yīng)分離考慮,嚴(yán)格測試。協(xié)調(diào)任務(wù)(coordinator):當(dāng)系統(tǒng)中存在三個(gè)以上tasks時(shí),應(yīng)增設(shè)一個(gè)協(xié)調(diào)任務(wù),用于封裝不同tasks之間的協(xié)調(diào)控制。第二十七頁,共四十頁,編輯于2023年,星期五三、四種子系統(tǒng)的設(shè)計(jì)(續(xù))⑷數(shù)據(jù)管理子系統(tǒng):①選擇管理模式文件管理(filemanager)系統(tǒng)關(guān)系數(shù)據(jù)庫(RelationalDataBase)管理系統(tǒng)面向?qū)ο髷?shù)據(jù)庫(OODB)管理系統(tǒng)②設(shè)計(jì)數(shù)據(jù)格式及相應(yīng)的服務(wù)第二十八頁,共四十頁,編輯于2023年,星期五9·5設(shè)計(jì)類中的服務(wù)一、確立服務(wù)⑴從dynamicmodel出發(fā):Eventflowdiagram中

Event=message;接受message的object必有對應(yīng)的method;

Method改變status(即attributes),并完成action。第二十九頁,共四十頁,編輯于2023年,星期五一、確立服務(wù)(續(xù))EventStatus1do:Action1Status2do:Action2……則算法應(yīng)有DO_CASE型控制⑵從functionmodel出發(fā):DFD的一般結(jié)構(gòu)是IPO注意:Action(即算法)與status有關(guān)。例如:不同status接受同一個(gè)event時(shí),其action不同——第三十頁,共四十頁,編輯于2023年,星期五一、確立服務(wù)(續(xù))InputFlowClass……ProcessI\OClass……Process若Process=從InputFlow中抽取一個(gè)值,則IO若和類型相同,而output實(shí)質(zhì)上是input的另一個(gè)狀態(tài),則I\O是一類,有若則I1I2I3POOutputFlowClass……Process第三十一頁,共四十頁,編輯于2023年,星期五一、確立服務(wù)(續(xù))若則ProcessStorageStorageClass……Process對照DFD與Class-&-Object圖,若一個(gè)process涉及多個(gè)classes,則必須判斷它屬于哪一個(gè)class。例如:ActivatorReceiverProcess若Process改變了Receiver,則ReceiverClass……Process又如:從關(guān)聯(lián)上看,process所涉及的所有classes中,處于中心地位的class,一般擁有該process。第三十二頁,共四十頁,編輯于2023年,星期五二、實(shí)現(xiàn)方法⑴算法設(shè)計(jì):要求做到易修改,并且復(fù)雜度低(即效率高)易理解,易實(shí)現(xiàn)。⑵數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):需要考慮具體的物理結(jié)構(gòu)的選擇。⑶新添用于存放內(nèi)部處理中間結(jié)果的class;引入新的低層操作,進(jìn)一步細(xì)化。第三十三頁,共四十頁,編輯于2023年,星期五9·6設(shè)計(jì)關(guān)聯(lián)一、單向關(guān)聯(lián)例:雇員公司被雇用1+由雇員找其所屬公司,則設(shè)雇主為其屬性,即一單向指針雇員雇主公司由公司找其下屬某一雇員,則有兩種方法:方法1:遍歷所有雇員,找雇主匹配且滿足特征的雇員。(省空間)第三十四頁,共四十頁,編輯于2023年,星期五一、單向關(guān)聯(lián)(續(xù))方法2:設(shè)公司的屬性雇員為一指針集。(快速)雇員公司雇員指針集二、雙向關(guān)聯(lián)方法1:將上述兩種單向關(guān)聯(lián)結(jié)合使用雇員雇主公司雇員指針集雇員公司關(guān)聯(lián)類雇主雇員工資方法2:另設(shè)關(guān)聯(lián)類(特別適用于鏈屬性)第三十五頁,共四十頁,編輯于2023年,星期五9·7優(yōu)化雇員公司find_skill雇用1+技能具有技能1+1+1、確定優(yōu)先級:必須站在全局高度確定各項(xiàng)質(zhì)量指標(biāo)的優(yōu)先級,在優(yōu)化設(shè)計(jì)時(shí)制定折衷方案。切忌各子系統(tǒng)自以為是,導(dǎo)致最終優(yōu)化目標(biāo)對立。最常見的情況是在效率與清晰性之間的折衷。2、提高效率的技術(shù)①增加關(guān)聯(lián)(類)例:設(shè)某公司有2000名雇員,平均每名雇員會(huì)10種技能,其中有5人

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論