12第八章-面向?qū)ο笤O(shè)計(jì)-課件_第1頁(yè)
12第八章-面向?qū)ο笤O(shè)計(jì)-課件_第2頁(yè)
12第八章-面向?qū)ο笤O(shè)計(jì)-課件_第3頁(yè)
12第八章-面向?qū)ο笤O(shè)計(jì)-課件_第4頁(yè)
12第八章-面向?qū)ο笤O(shè)計(jì)-課件_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第八章面向?qū)ο笤O(shè)計(jì)

(Object-OrientedDesign)8.1OOD準(zhǔn)則:優(yōu)秀軟件設(shè)計(jì)的一個(gè)重要特點(diǎn)是容易維護(hù)回顧:SD準(zhǔn)則包括ModularizationAbstractionInformationhidingModuleindependence對(duì)于OOD有類似的準(zhǔn)則:1、Module=Object7/20/202318.1OOD準(zhǔn)則Procedureabstraction:在SD中已討論Dataabstraction:Class即是一種抽象數(shù)據(jù)類型。外界無(wú)須知道實(shí)現(xiàn)方法就可按照類協(xié)議(classdescriptionprotocol)*

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

將數(shù)據(jù)類型作為參數(shù)處理。

抽象程度更高,應(yīng)用范圍更廣,可重用性更高

2、Abstraction:抽出事物的本質(zhì)特性,暫不考慮其細(xì)節(jié),使設(shè)計(jì)從具體實(shí)現(xiàn)方法中超脫。7/20/202323、Informationhiding=Encapsulationofobject4、Coupling:不同對(duì)象之間相互關(guān)聯(lián)的緊密程度

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

looseaspossible

繼承耦合(inheritancecoupling):

要求ParentclassIS_Achildclassashighaspossible8.1OOD準(zhǔn)則7/20/20233

一般-特殊內(nèi)聚(general-particularcohesion):Highg-pcohesionHighinheritancecoupling5、Cohesion:

服務(wù)內(nèi)聚(servicecohesion):一個(gè)服務(wù)只完成一個(gè)

功能。

類內(nèi)聚(classcohesion):一個(gè)類只有一個(gè)用途,

否則分解之。6、Reusability8.1OOD準(zhǔn)則7/20/202348.2啟發(fā)式規(guī)則1、設(shè)計(jì)結(jié)果清晰易懂,應(yīng)做到:①用詞一致——按習(xí)慣用法命名。不同classes中相似的methods最好取同一名字。②使用已有的protocol。③盡量減少message模式的數(shù)目。④避免模糊定義。2、一般-特殊結(jié)構(gòu)的深度應(yīng)適當(dāng)

一般,中等規(guī)模的系統(tǒng),約100個(gè)classes,設(shè)計(jì)7±2層類層次結(jié)構(gòu)7/20/202358.2啟發(fā)式規(guī)則3、設(shè)計(jì)簡(jiǎn)單的class

(類的定義不超過(guò)一頁(yè)紙或兩屏).應(yīng)注意:①避免過(guò)多attributes;②能用簡(jiǎn)單的語(yǔ)句描述一個(gè)class的任務(wù);③objects之間合作關(guān)系要簡(jiǎn)單;④避免過(guò)多methods(7個(gè))。問(wèn)題:設(shè)計(jì)出大量的classes,使結(jié)構(gòu)復(fù)雜度增加。解決:劃分主題,提高可理解性。4、使用簡(jiǎn)單的protocol,減少message中傳遞的參數(shù)(<=3)5、使用簡(jiǎn)單的method(3—5行源程序,否則設(shè)法分解或簡(jiǎn)化)6、把設(shè)計(jì)變動(dòng)減至最小7/20/202361、概念:知識(shí)重用(例如軟件工程知識(shí)的重用)方法和標(biāo)準(zhǔn)重用(例如OO方法和國(guó)家規(guī)定的軟件開(kāi)發(fā)規(guī)范的重用)軟件成分的重用8.3軟件重用(SoftwareReuse)知識(shí)工程

源碼剪貼——無(wú)法溯源,無(wú)配置管理

Include——

修改后所有包含了此段代碼的程

序都須重新編譯。

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

想象一下,stdio.h被改動(dòng)之后……重用軟件成分有三個(gè)級(jí)別:①代碼重用:7/20/202378.3軟件重用②設(shè)計(jì)重用——當(dāng)移植系統(tǒng)時(shí)③

分析重用——當(dāng)需求未變,而系統(tǒng)結(jié)構(gòu)改變時(shí)2、重用效果的衡量:⑴額外代價(jià):

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

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

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

以上投資將分?jǐn)偟街赜眠@些構(gòu)件的新系統(tǒng)成本中。重用次數(shù)越多,分?jǐn)偝杀驹缴佟?/20/20238記:Lt=Totallengthofcode(#oflines)

Ln=Lengthofnewcode

Lr=Lengthof

reusedcode

Et、En、Erarethecorrespondingefforts(#ofm-d)⑵重用率(Reusability)與生產(chǎn)率(Productivity)ProductivityReusability=開(kāi)發(fā)代碼的生產(chǎn)率重用新代碼的生產(chǎn)率8.3軟件重用7/20/20239⑶重用技術(shù):指利用可重用的構(gòu)件開(kāi)發(fā)軟件的技術(shù),以

及開(kāi)發(fā)可重用軟件的技術(shù)。①軟件組合技術(shù):底層部件庫(kù)法(Bottom-upcompositionalreuse):

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

越高P就越高?8.3軟件重用上層組合法:完整程序的組合7/20/202310②軟件生成技術(shù):按照形式化的軟件功能描述和一定的生成機(jī)理,由生成器系統(tǒng)(generatorsystem)自動(dòng)生成目標(biāo)程序。重用的是generator的代碼規(guī)則③OO重用技術(shù):Classcomponent的重用(詳見(jiàn)下文)8.3軟件重用7/20/202311⑷類構(gòu)件(Classcomponent):①可重用的軟構(gòu)件應(yīng)具備的特點(diǎn):模塊獨(dú)立性強(qiáng)具有單一、完整、被確認(rèn)是正確的功能;信息隱藏機(jī)制具有高度可塑性必須提供為適應(yīng)特定需求而擴(kuò)充或修改已有構(gòu)件的機(jī)制,且使用非常簡(jiǎn)單方便。接口清晰、簡(jiǎn)明、可靠8.3軟件重用7/20/202312②重用方式:實(shí)例重用(instancereuse\black-boxreuse):

創(chuàng)建class的不同instances,通過(guò)messages完成不同的任務(wù)。是最基本的重用方式。

用幾個(gè)簡(jiǎn)單的objects創(chuàng)建出更復(fù)雜的class,是實(shí)例重用的另一種形式

繼承重用(inheritancereuse):

是一種安全地裁剪已有的classcomponent的方式。

多態(tài)重用(polymorphismreuse):

Parentclass與childclass有相同的對(duì)外接口,使消息連接的復(fù)雜度降低。8.3軟件重用7/20/202313注意:有些操作可能會(huì)妨礙classcomponent的重用,如與表示方法有關(guān)的操作與數(shù)據(jù)結(jié)構(gòu)、大小有關(guān)的操作與外部設(shè)備有關(guān)的操作

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

優(yōu)點(diǎn):高效;缺點(diǎn):修改影響面廣8.4系統(tǒng)分解7/20/202318HCI典型應(yīng)用系統(tǒng)的組織結(jié)構(gòu)應(yīng)用軟件包操作系統(tǒng)計(jì)算機(jī)硬件人機(jī)對(duì)話控制仿真軟件包圖形處理窗口圖形屏幕圖形象素圖形②垂直塊組織:將系統(tǒng)垂直分解成若干獨(dú)立的子系統(tǒng),一個(gè)子系統(tǒng)相當(dāng)于一塊,每塊提供一種類型的服務(wù)。8.4系統(tǒng)分解7/20/2023193、四種子系統(tǒng)的設(shè)計(jì)⑴問(wèn)題域子系統(tǒng):基于OOA建立的objectmodel,進(jìn)行補(bǔ)充修改。①調(diào)整需求②重用class:選出可用的class,標(biāo)出與本問(wèn)題無(wú)關(guān)的attributes和methods派生出childclass,標(biāo)出繼承的attributes和methods修改關(guān)聯(lián)③組合class:通過(guò)引入rootclass完成,用于建立publicprotocol。④調(diào)整inheritance。8.4系統(tǒng)分解7/20/202320⑵HCI子系統(tǒng):好的包裝①設(shè)計(jì)準(zhǔn)則:一致性:術(shù)語(yǔ)、步驟、操作等始終一致。減少步驟:使完成一件任務(wù)所需敲鍵盤(pán)、點(diǎn)鼠標(biāo)、下拉菜單等的次數(shù)都減至最少。及時(shí)提供反饋信息:提供hotkey操作做一個(gè)體貼的statusbar提供撤銷(undo)命令:無(wú)須記憶:不應(yīng)要求用戶記住某個(gè)窗口的信息,然后再用到窗口中——這是系統(tǒng)的責(zé)任而不是用戶的任務(wù)。仁慈的你如佛祖對(duì)眾生:回頭是岸易學(xué):提供HELP、聯(lián)機(jī)參考等。富有吸引力8.4系統(tǒng)分解7/20/202321②設(shè)計(jì)策略設(shè)計(jì)HCI類:例如VC提供的MFC類庫(kù)(MicrosoftFoundationClassLibrary)將用戶分類(按技能、職務(wù)等)描述用戶的類型、水平、使用目的、其它特征(如年齡、性別、習(xí)慣等),寫(xiě)出操作腳本設(shè)計(jì)命令層次:注意同用戶熟悉的方式(如windows界面)盡量保持一致.次序、深度、寬度調(diào)整適當(dāng)8.4系統(tǒng)分解7/20/202322⑶任務(wù)管理子系統(tǒng):基于OOA建立的dynamicmodel①分析并發(fā)性:若兩個(gè)objects之間無(wú)交互行為,或它們同時(shí)接受events,則它們本質(zhì)上是并發(fā)的(synchronous)考察eventflowdiagram,找出沒(méi)有并發(fā)對(duì)象的路徑(稱為控制線),每條對(duì)應(yīng)一個(gè)任務(wù)(task,亦稱process)不同的tasks對(duì)應(yīng)必須同時(shí)發(fā)生的不同行為8.4系統(tǒng)分解7/20/202323②確定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ù)專門(mén)分離出來(lái)先做或后做。關(guān)鍵任務(wù)(keytask):指關(guān)系系統(tǒng)成敗的處理,要求高可靠性,應(yīng)分離考慮,嚴(yán)格測(cè)試。協(xié)調(diào)任務(wù)(coordinator):當(dāng)系統(tǒng)中存在三個(gè)以上tasks時(shí),應(yīng)增設(shè)一個(gè)協(xié)調(diào)任務(wù),用于封裝不同tasks之間的協(xié)調(diào)控制。8.4系統(tǒng)分解7/20/202324⑷數(shù)據(jù)管理子系統(tǒng):①選擇管理模式文件管理(filemanager)系統(tǒng)關(guān)系數(shù)據(jù)庫(kù)(RelationalDataBase)管理系統(tǒng)面向?qū)ο髷?shù)據(jù)庫(kù)(OODB)管理系統(tǒng)②設(shè)計(jì)數(shù)據(jù)格式及相應(yīng)的服務(wù)(請(qǐng)參閱教材p.190-192)8.4系統(tǒng)分解7/20/2023258.5設(shè)計(jì)類中的服務(wù)

——細(xì)化objectmodel中的methods1、確立服務(wù)⑴從dynamicmodel出發(fā):Eventflowdiagram中Event=message;接受message的object必有對(duì)應(yīng)的method;Method改變status(即attributes),并完成action。7/20/2023268.5設(shè)計(jì)類中的服務(wù)EventStatus1do:Action1Status2do:Action2……則算法應(yīng)有DO_CASE型控制⑵從functionmodel出發(fā):DFD的一般結(jié)構(gòu)是IPO注意:Action(即算法)與status有關(guān)。例如:不同status接受同一個(gè)event時(shí),其action不同——7/20/202327InputFlowClass……ProcessI\OClass……Process若Process=從InputFlow中抽取一個(gè)值,則IO若和類型相同,而output實(shí)質(zhì)上是input的另一個(gè)狀態(tài),則I\O是一類,有若則I1I2I3POOutputFlowClass……Process8.5設(shè)計(jì)類中的服務(wù)7/20/202328若則ProcessStorageStorageClass……Process對(duì)照DFD與Class-&-Object圖,若一個(gè)process涉及多個(gè)classes,則必須判斷它屬于哪一個(gè)class。例如:ActivatorReceiverProcess若Process改變了Receiver,則ReceiverClass……Process又如:從關(guān)聯(lián)上看,process所涉及的所有classes中,處于中心地位的class,一般擁有該process。8.5設(shè)計(jì)類中的服務(wù)7/20/2023292、設(shè)計(jì)實(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ì)化。8.5設(shè)計(jì)類中的服務(wù)7/20/2023308.6設(shè)計(jì)關(guān)聯(lián)1、單向關(guān)聯(lián)例:雇員公司被雇用1+由雇員找其所屬公司,則設(shè)雇主為其屬性,即一單向指針雇員雇主公司由公司找其下屬某一雇員,則有兩種方法:方法1:遍歷所有雇員,找雇主匹配且滿足特征的雇員。(省空間)7/20/2023318.6設(shè)計(jì)關(guān)聯(lián)方法2:設(shè)公司的屬性雇員為一指針集。(快速)雇員公司雇員指針集2、雙向關(guān)聯(lián)方法1:將上述兩種單向關(guān)聯(lián)結(jié)合使用雇員雇主公司雇員指針集雇員公司關(guān)聯(lián)類雇主雇員工資方法2:另設(shè)關(guān)聯(lián)類(特別適用于鏈屬性)7/20/202332雇員公司find_skill雇用1+技能具有技能1+1+8.7優(yōu)化1、確定優(yōu)先級(jí):必須站在全局高度確定各項(xiàng)質(zhì)量指標(biāo)的優(yōu)先級(jí),在優(yōu)化設(shè)計(jì)時(shí)制定折衷方案。切忌各子系統(tǒng)自以為是,導(dǎo)致最終優(yōu)化目標(biāo)對(duì)立。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論