




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 英語(yǔ)-山東省淄博市濱州市2024-2025學(xué)年度2025屆高三模擬考試(淄博濱州一模)試題和答案
- (一模)萍鄉(xiāng)市2025年高三第一次模擬考試語(yǔ)文試卷(含答案解析)
- 防撞護(hù)角施工方案
- 第十課 《數(shù)據(jù)可視化》教學(xué)設(shè)計(jì) 2023-2024學(xué)年浙教版(2020)初中信息技術(shù)七年級(jí)上冊(cè)
- 分揀工人勞務(wù)合同范本
- 認(rèn)知治療模式
- 鄉(xiāng)下老宅轉(zhuǎn)讓合同范例
- 班級(jí)社會(huì)實(shí)踐活動(dòng)的總結(jié)與反思計(jì)劃
- 班級(jí)合作項(xiàng)目實(shí)施計(jì)劃
- 后勤保障部服務(wù)質(zhì)量提升總結(jié)計(jì)劃
- 2024年鄭州市公安機(jī)關(guān)招聘警務(wù)輔助人員筆試真題
- 2025年貴州貴安新區(qū)產(chǎn)業(yè)發(fā)展控股集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年食用仙人掌掛面項(xiàng)目投資可行性研究分析報(bào)告
- 化工設(shè)計(jì)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋浙江大學(xué)
- 2.3品味美好情感 課 件 -2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)下冊(cè)
- 第六節(jié)-固定收益證券知識(shí)分享
- 機(jī)械制造技術(shù)基礎(chǔ)(課程課件完整版)
- 煤礦崗位標(biāo)準(zhǔn)化作業(yè)流程
- 電子病歷及病歷信息標(biāo)準(zhǔn)化(第五講)
- 鐵路建設(shè)項(xiàng)目工程試驗(yàn)室管理標(biāo)準(zhǔn)TB104422009
- SPSS術(shù)語(yǔ)中英文對(duì)照詳解
評(píng)論
0/150
提交評(píng)論