版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
OOA、OOD和UML面向?qū)ο蠹夹g(shù)的開(kāi)發(fā)實(shí)踐北京理工大學(xué)信息學(xué)院計(jì)算機(jī)科學(xué)系金旭亮2021/7/311主要內(nèi)容2021/7/312OOA、OOD與UML基礎(chǔ)Rose如何介入軟件開(kāi)發(fā)的全過(guò)程案例:編寫(xiě)一個(gè)自己的簡(jiǎn)化版WinZip軟件開(kāi)發(fā)的哲學(xué)思考待研究的課題第一部分2021/7/313OOA與OOD基礎(chǔ)OOA2021/7/314Object-Oriented
Analysis(OOA):面向?qū)ο蟮姆治鯫OA的側(cè)重點(diǎn)是業(yè)務(wù)領(lǐng)域分析,與軟件所要應(yīng)用的行業(yè)領(lǐng)域相關(guān),而與軟件技術(shù)關(guān)系不大,需要由領(lǐng)域?qū)<疫M(jìn)行。這一部分的工作被稱為“需求分析”。OOA的成果2021/7/315業(yè)務(wù)領(lǐng)域用例圖活動(dòng)圖協(xié)作圖大量的業(yè)務(wù)文檔資料OODObject-orienteddesign
(OOD)用面向?qū)ο蟮姆椒檎鎸?shí)世界建立一個(gè)計(jì)算機(jī)中的虛擬模型2021/7/316OOD的地位2021/7/317OOD的主要任務(wù)是跨越業(yè)務(wù)領(lǐng)域模型與可實(shí)際運(yùn)行的軟件系統(tǒng)之間的鴻溝。OOD的難度是非常大的,負(fù)責(zé)OOD工作的人被稱為系統(tǒng)架構(gòu)設(shè)計(jì)師系統(tǒng)架構(gòu)設(shè)計(jì)師的任務(wù)2021/7/318確定系統(tǒng)的總體框架---大多采用已有的領(lǐng)域框架正確理解需求分析得出的領(lǐng)域模型,用面向?qū)ο蟮乃枷朐O(shè)計(jì)出軟件體系結(jié)構(gòu)---系統(tǒng)概要設(shè)計(jì)分析現(xiàn)實(shí)的可獲取的技術(shù)資源,分解出軟件的各個(gè)組件,安排好開(kāi)發(fā)任務(wù)流程---系統(tǒng)詳細(xì)設(shè)計(jì)OOD的成果2021/7/319系統(tǒng)中有多少個(gè)類?系統(tǒng)中這些類間有什么關(guān)系(系統(tǒng)靜態(tài)特性)?系統(tǒng)中這些類生成的對(duì)象如何協(xié)作來(lái)完成工作(系統(tǒng)動(dòng)態(tài)特性)?系統(tǒng)中如何管理這些類和對(duì)象?OOP2021/7/3110Object-oriented
Program
(OOP)用一種面向?qū)ο蟮恼Z(yǔ)言來(lái)實(shí)現(xiàn)OOD完成的系統(tǒng)設(shè)計(jì)流行的面向?qū)ο笳Z(yǔ)言Java、C++、ObjectPascal、C#、……關(guān)于OOP2021/7/3111用面向?qū)ο蟮恼Z(yǔ)言編程不是OOP!OOP最重要的特征是面向?qū)ο罄碚摰膹V泛應(yīng)用OOP的成果是可運(yùn)行的實(shí)際系統(tǒng)OOP中摻雜著OOD,OOP與OOD你中有我,我中有你,OOP是具體的OOD,二者的區(qū)別就在于應(yīng)用范圍的不同。OOA、OOD、OOP與真實(shí)世界2021/7/3112面向?qū)ο罄碚摰脑僬J(rèn)識(shí)封裝封裝體現(xiàn)了數(shù)據(jù)信息的隱藏,從而使不同模塊的信息互不影響,這是
OO的一大優(yōu)點(diǎn),因?yàn)樗鼜念愡@一程序基本單位開(kāi)始就支持信息隱藏。2021/7/3113面向?qū)ο罄碚摰脑僬J(rèn)識(shí)繼承相對(duì)于結(jié)構(gòu)化編程中的模塊重用,面向?qū)ο笾械睦^承體系顯得更靈活,對(duì)代碼的控制手段更多,從而推動(dòng)了代碼復(fù)用的程度,但卻加大了學(xué)習(xí)掌握的難度。2021/7/3114面向?qū)ο罄碚摰脑僬J(rèn)識(shí)2021/7/3115多態(tài)的特點(diǎn):所有可以發(fā)給baseclass對(duì)象的消息,也都同樣可以發(fā)給derivedclass。這是了解面向?qū)ο笳嫠璧年P(guān)鍵之一。C++中的面向?qū)ο筇匦?021/7/3116四種編程風(fēng)范:結(jié)構(gòu)化編程、基于對(duì)象、面向?qū)ο?、泛型編程C程序員易犯的毛?。涸贑++中寫(xiě)C程序。軟件源代碼復(fù)用的方式2021/7/3117組合(composition)與聚合(aggregation)繼承(inherit)其基本思想是以現(xiàn)有的類為基礎(chǔ)創(chuàng)建新的類STL2021/7/3118Standard
Template
Library,標(biāo)準(zhǔn)模板庫(kù)STL是容器,算法和其他一些組件的集合泛型編程在OOD中的應(yīng)用2021/7/3119一種獨(dú)特的平面型編程風(fēng)范,大量使用C++的模板技巧典型案例:STL在標(biāo)準(zhǔn)的OOD設(shè)計(jì)方案中引入泛型編程技術(shù),可以起到減少類數(shù)目的作用泛型技術(shù)可以看成是C++類的“合并同類項(xiàng)”。統(tǒng)一建模語(yǔ)言UML2021/7/3120UML圖形化的建模語(yǔ)言開(kāi)發(fā)者用來(lái)為面向?qū)ο笙到y(tǒng)建立模型具有靈活性與可擴(kuò)展性統(tǒng)一軟件過(guò)程RUP2021/7/3121三大特點(diǎn):用例驅(qū)動(dòng)、迭代開(kāi)發(fā)和增量開(kāi)發(fā)OOAD的強(qiáng)大工具---ROSE2021/7/3122ROSE是采用UML進(jìn)行軟件系統(tǒng)設(shè)計(jì)的一個(gè)CASE工具,還有其他工具比如
Visio,JBuilder7等。ROSE支持雙向工程正向:UML模型軟件代碼框架逆向:軟件代碼UML模型使用ROSE可以保證源代碼與系統(tǒng)模型的一致性,這在軟件開(kāi)發(fā)過(guò)程中是非常有用的ROSE對(duì)軟件開(kāi)發(fā)全過(guò)程的參與4+1視圖LogicalViewImplementationViewProgrammersSoftwaremanagementProcessViewSystem
IntegratorsPerformanceScalabilityThroughputDeploymentViewSystemEngineeringSystem
topologyDelivery,
installationcommunicationUse-Case2021/7/3123ViewAnalysts/DesignersStructureEnd-userFunctionality用ROSE表達(dá)系統(tǒng)功能2021/7/3124用ROSE表達(dá)軟件的靜態(tài)結(jié)構(gòu)類圖Class
Diagram:表明了一個(gè)軟件中的各個(gè)類之間的關(guān)系2021/7/3125用ROSE表達(dá)軟件的靜態(tài)結(jié)構(gòu)2021/7/3126用ROSE表達(dá)軟件的靜態(tài)結(jié)構(gòu)2021/7/3127用ROSE表達(dá)軟件的靜態(tài)結(jié)構(gòu)2021/7/3128用ROSE表達(dá)軟件的靜態(tài)結(jié)構(gòu)2021/7/3129小結(jié):用Rose來(lái)描述一個(gè)軟件的靜態(tài)結(jié)構(gòu),首先應(yīng)將整個(gè)系統(tǒng)劃分為若干子系統(tǒng)或幾個(gè)組成部分,每個(gè)組成部分以一個(gè)包來(lái)表示。接著,需要設(shè)計(jì)具體的類,并用各種關(guān)聯(lián)符號(hào)表達(dá)出類間的關(guān)系,注意,每個(gè)類都必須歸屬于某一個(gè)包,這樣才便于查找某個(gè)類用組件圖描述軟件組件一般用組件圖來(lái)生成代碼2021/7/3130用ROSE表達(dá)軟件的動(dòng)態(tài)特性1:PerformResponsibility消息:Client:Supplier調(diào)用周期說(shuō)明……反身消息對(duì)象生命線1.1:2021/7/3131PerformAnotherResponsibility序列圖客戶對(duì)象
供應(yīng)者對(duì)象t序列圖用于表達(dá)對(duì)象之間是如何發(fā)送消息,何時(shí)
new一個(gè)對(duì)象,何時(shí)delete它,非常適合表達(dá)一種代碼流程。用ROSE表達(dá)軟件的動(dòng)態(tài)特性1:
PerformResponsibilityClient
ObjectSupplier
ObjectLink:Client2021/7/3132:Supplier協(xié)作圖Message協(xié)作圖比較適合表達(dá)類之間的依賴關(guān)聯(lián)用ROSE表達(dá)軟件的動(dòng)態(tài)特性狀態(tài)圖2021/7/3133當(dāng)系統(tǒng)可以明顯地劃分為幾個(gè)不同狀態(tài)時(shí),狀態(tài)圖可以大顯身手,最明顯的是ADO
記錄集的狀態(tài)轉(zhuǎn)換例如:需要給水分子的三種物理狀態(tài)建模用ROSE表達(dá)軟件的動(dòng)態(tài)特性活動(dòng)圖活動(dòng)圖最適合表達(dá)出一種處理流程2021/7/3134用ROSE表達(dá)軟件的動(dòng)態(tài)特性2021/7/3135小結(jié):所有圖的最根本目的是要對(duì)系統(tǒng)運(yùn)行過(guò)程中的各個(gè)對(duì)象之間的關(guān)系作出確定性的唯一性的描述,從而保證所有開(kāi)發(fā)人員都能對(duì)系統(tǒng)有一個(gè)統(tǒng)一的認(rèn)識(shí)。一般在確定了軟件的靜態(tài)結(jié)構(gòu)之后才進(jìn)行描述系統(tǒng)的動(dòng)態(tài)特性在任何情況下,保證ROSE模型與實(shí)際代碼的一致都是至關(guān)重要的!要根據(jù)實(shí)際情況選擇一種合適的圖來(lái)表達(dá)系統(tǒng),不要強(qiáng)行要求用上所有類型的圖,牢記:我們的目的是為了交流!參考資料2021/7/3136參考資料2021/7/3137參考資料2021/7/3138參考資料2021/7/3139參考資料2021/7/3140參考資料2021/7/3141參考資料2021/7/3142案例研究一再造一個(gè)WinZip麻雀雖小,五臟俱全2021/7/3143緣起:2021/7/3144用一個(gè)規(guī)模小的工具軟件來(lái)說(shuō)明OOD的實(shí)際應(yīng)用整個(gè)軟件完成周期:四天開(kāi)發(fā)過(guò)程2021/7/3145形成軟件總體想法:5分鐘形成軟件技術(shù)想法:5分鐘實(shí)驗(yàn)技術(shù)想法:1天設(shè)計(jì)系統(tǒng)詳細(xì)設(shè)計(jì)方案:1天正式編碼和測(cè)試:半天感觸:只要有技術(shù)積累,再加上合理的OOD,開(kāi)發(fā)一個(gè)軟件會(huì)成為一種很有成就感的創(chuàng)作!基于組件的用戶界面設(shè)計(jì)標(biāo)準(zhǔn)的分層體系結(jié)構(gòu):用戶界面類系統(tǒng)外部功能類系統(tǒng)底層基本功能類2021/7/3146功能設(shè)想2021/7/3147技術(shù)方案考慮2021/7/3148采用C++流技術(shù)采用Borland
C++
Builder開(kāi)發(fā)BCB
vs
VC軟件的工作原理(一)2021/7/3149要編寫(xiě)一個(gè)軟件,首先要知道人是如何完成某項(xiàng)工作的;接著,必須分析如何用計(jì)算機(jī)來(lái)完成這
個(gè)工作,其結(jié)果是形成一個(gè)計(jì)算機(jī)算法,這要求有相關(guān)領(lǐng)域的理論知識(shí)軟件的工作原理(二)計(jì)算機(jī)中文件的基本類型2021/7/3150軟件的工作原理(三)計(jì)算機(jī)中文件的基本類型2021/7/3151軟件的工作原理(四)考慮軟件的內(nèi)部總體數(shù)據(jù)處理流程2021/7/3152設(shè)計(jì)過(guò)程(一)---資源選擇2021/7/3153選擇可以復(fù)用的代碼資源:C函數(shù)庫(kù):用fopen()、fclose()等打開(kāi)和關(guān)閉文件,然后,直接在內(nèi)存中對(duì)字節(jié)流進(jìn)行處理STL:用標(biāo)準(zhǔn)模板庫(kù)(STL)中的iostream類VCL:用TStream類設(shè)計(jì)過(guò)程(二)---接口設(shè)計(jì)設(shè)計(jì)基本的流操作類接口請(qǐng)參看源代碼文件:
FileStreamOpt.hFileStreamOpt.cpp2021/7/3154設(shè)計(jì)過(guò)程(三)---利用多態(tài)VCL的TStream類繼承樹(shù)圖注意:接口設(shè)計(jì)中采用了TStream*
以利用多態(tài)2021/7/3155設(shè)計(jì)過(guò)程(四)---數(shù)據(jù)結(jié)構(gòu)2021/7/3156Struct
VS
Class數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)結(jié)果2021/7/3157設(shè)計(jì)過(guò)程(五)---數(shù)據(jù)對(duì)象的管理?2021/7/3158OO軟件的顯著特點(diǎn)之一是如何管理對(duì)象vector
VS
listSTL在數(shù)據(jù)結(jié)構(gòu)方面有強(qiáng)大的表達(dá)能力!C++技術(shù)難點(diǎn):=運(yùn)算符重載利用VCL的現(xiàn)有特性改善設(shè)計(jì)設(shè)計(jì)過(guò)程(六)---功能實(shí)現(xiàn)2021/7/3159設(shè)計(jì)結(jié)果2021/7/3160Key:2021/7/3161先進(jìn)行非可視化功能類的設(shè)計(jì)設(shè)計(jì)過(guò)程中要綜合考慮各方面的要求,作出綜合平衡,然后才能形成可行的設(shè)計(jì)方案界面設(shè)計(jì)放在功能設(shè)計(jì)方案之后,它的目的是提供一個(gè)用戶接口以驅(qū)動(dòng)功能類的運(yùn)作.界面設(shè)計(jì)案例:界面與功能代碼的完全分離2021/7/3162用戶界面設(shè)計(jì)(一)---窗體2021/7/3163用戶界面設(shè)計(jì)(二)---靈活性2021/7/3164用戶界面編碼的分層原則:(1)不在控件的事件處理過(guò)程中書(shū)寫(xiě)大量的代碼!(2)盡可能減少代碼對(duì)具體控件的依賴重復(fù)使用的某種功能的控件應(yīng)被封裝成新的控件考慮窗體間的相似性,巧妙利用窗體的OO特性:繼承,多態(tài)與重載一個(gè)復(fù)雜的控件原則上應(yīng)新建一個(gè)控制類以便于使用,這個(gè)控制類的接口成員應(yīng)是按邏輯來(lái)劃分而不是按技術(shù)來(lái)劃分的用戶界面設(shè)計(jì)(三)---健壯性2021/7/3165避免一個(gè)窗體過(guò)于復(fù)雜保證用戶界面層以正確的順序調(diào)用功能類提高軟件健壯性2021/7/3166每一個(gè)函數(shù)都盡可能地保證是獨(dú)立完備的、安全的。程序基本完成后,從最底層的類開(kāi)始,逐步找出每個(gè)對(duì)外接口的前條件(前提)和后條件(結(jié)果),然后,判斷有無(wú)可能發(fā)生錯(cuò)誤,并且決定這些錯(cuò)誤應(yīng)該如何處理開(kāi)發(fā)高容錯(cuò)程序三原則2021/7/3167預(yù)防所有可以預(yù)料和防止的錯(cuò)誤;處理所有可以預(yù)料但不能防止的錯(cuò)誤;捕獲所有不能預(yù)料的錯(cuò)誤;代碼實(shí)例分析使用ROSE進(jìn)行正向代碼生成2021/7/3168設(shè)計(jì)類接口新建一個(gè)組件將類賦與組件生成代碼使用ROSE進(jìn)行正向代碼生成(1)設(shè)計(jì)類接口2021/7/3169使用ROSE進(jìn)行正向代碼生成(2)新建一個(gè)組件2021/7/3170使用ROSE進(jìn)行正向代碼生成(3)選定組件的語(yǔ)言2021/7/3171使用ROSE進(jìn)行正向代碼生成(4)給組件分配類2021/7/3172使用ROSE進(jìn)行正向代碼生成(5)分配了類的組件2021/7/3173使用ROSE進(jìn)行正向代碼生成(6)生成代碼2021/7/3174使用ROSE進(jìn)行逆向更新逆向更新的目的是用更改后的代碼刷新系統(tǒng)模型文件,以保證系統(tǒng)文檔與真實(shí)代碼的一致性2021/7/3175使用ROSE進(jìn)行逆向轉(zhuǎn)換2021/7/3176選擇組件打開(kāi)Ansi
C++
specification窗口選擇文件生成模型用已有代碼進(jìn)行逆向轉(zhuǎn)換(1)新建組件2021/7/3177用已有代碼進(jìn)行逆向轉(zhuǎn)換(2)打開(kāi)ANSI
C++參數(shù)設(shè)置窗口2021/7/3178用已有代碼進(jìn)行逆向轉(zhuǎn)換(3)加入C++頭文件和CPP文件2021/7/3179用已有代碼進(jìn)行逆向轉(zhuǎn)換(4)從菜單中選逆向工程命令2021/7/3180用已有代碼進(jìn)行逆向轉(zhuǎn)換(5)ROSE工程資源瀏覽器中新生成的類2021/7/3181用已有代碼進(jìn)行逆向轉(zhuǎn)換(6)新生成的類的屬性窗口2021/7/3182用已有代碼進(jìn)行逆向轉(zhuǎn)換(7)在類圖中顯示逆向工程生成的類2021/7/3183OOAD理論總結(jié)與思索2021/7/3184軟件開(kāi)發(fā)的最重要思維方式2021/7/3185軟件開(kāi)發(fā)的最重要思維方式是什么?抽象!結(jié)構(gòu)化編程時(shí)代程序=數(shù)據(jù)結(jié)構(gòu)+算法面向?qū)ο筌浖r(shí)代,軟件=?軟件=對(duì)象+對(duì)象之間的關(guān)系組件化時(shí)代的軟件設(shè)計(jì)2021/7/3186什么是軟件組件?可以復(fù)用的,具備一定功能的類的組合。單個(gè)類不夠資格成為軟件組件!軟件組件可以以源代碼方式存在,也可以以二進(jìn)制形式存在注意:區(qū)分ROSE中的組件與軟件理論領(lǐng)域中的組件組件化時(shí)代的軟件設(shè)計(jì)2021/7/3187OOD設(shè)計(jì)師制定組件的規(guī)范,高級(jí)程序員實(shí)現(xiàn)這些可復(fù)用的組件現(xiàn)代軟件開(kāi)發(fā)已成為組裝已有組件的過(guò)程,最典型的例子是Java與.net類庫(kù)設(shè)計(jì)模式2021/7/3188大型系統(tǒng)中良好的設(shè)計(jì)是關(guān)鍵設(shè)計(jì)模式(Design
patterns)為開(kāi)發(fā)面向?qū)ο蟮能浖峁┮粋€(gè)架構(gòu)減少了軟件設(shè)計(jì)的復(fù)雜度為軟件設(shè)計(jì)方案的重用提供了可能性可以避免犯一些常規(guī)性的錯(cuò)誤使設(shè)計(jì)獨(dú)立于語(yǔ)言建立了一套軟件架構(gòu)設(shè)計(jì)師的“通用語(yǔ)言”在軟件開(kāi)發(fā)周期中縮短了設(shè)計(jì)周期使用設(shè)計(jì)模式2021/7/3189熟悉模式才能知道如何使用模式我們用UML來(lái)描述模式,ROSE是畫(huà)圖工具用模式的最好方法就是設(shè)計(jì)時(shí)忘掉所有的模式名,只從實(shí)踐出發(fā)尋找可行的方案,必要時(shí)才去翻模式書(shū)以獲得靈感。設(shè)計(jì)模式經(jīng)典書(shū)籍2021/7/3190四個(gè)老外權(quán)威:Gamma,Helm,
Johnson
andVlissides“Gang
of
Four”——四人幫Design
Patterns,
Elements
of
ReusableObject-Oriented
Software
(Addison
Wesley:
1995)提出23種設(shè)計(jì)模式創(chuàng)建型設(shè)計(jì)模式:解決如何創(chuàng)建對(duì)象的問(wèn)題結(jié)構(gòu)型設(shè)計(jì)模式:解決類和對(duì)象間的結(jié)構(gòu)關(guān)系問(wèn)題行為型設(shè)計(jì)模式:解決對(duì)象間的動(dòng)態(tài)關(guān)系問(wèn)題參考資料2021/7/3191參考資料2021/7/3192關(guān)于設(shè)計(jì)模式2021/7/3193應(yīng)仔細(xì)研究成熟的設(shè)計(jì)模式,將其活學(xué)活用設(shè)計(jì)模式運(yùn)用時(shí),心中要無(wú)模式;關(guān)鍵在于把握其思想。模式不是數(shù)學(xué)公式!結(jié)構(gòu)化編程與面向?qū)ο缶幊?021/7/3194面向?qū)ο蟮年P(guān)鍵是抽象面向?qū)ο蠓治鲈O(shè)計(jì)的成功實(shí)施要求更高,難度更大:在理解對(duì)象基本理論和開(kāi)發(fā)技術(shù)的前提下,加上豐富的程序開(kāi)發(fā)實(shí)踐,才行。結(jié)構(gòu)化與面向?qū)ο蠓椒☉?yīng)該相輔相成,在合適的地方用合適的方法。結(jié)構(gòu)化編程與面向?qū)ο缶幊?021/7/3195在類的內(nèi)部代碼實(shí)現(xiàn)上采用結(jié)構(gòu)化編程的方式:比如:將一個(gè)太長(zhǎng)的函數(shù)按功能分解為若干個(gè)小函數(shù),做為類的私有函數(shù)只有在調(diào)試代碼清除BUG中,才發(fā)覺(jué)OO的妙處和軟件工程理論的無(wú)比正確!最重要的是兩點(diǎn):代碼隔離;控制模塊規(guī)模;對(duì)象的存儲(chǔ)2021/7/3196對(duì)象的存儲(chǔ)不應(yīng)直接與數(shù)據(jù)庫(kù)打交道對(duì)象的管理通常都設(shè)計(jì)控制類采用STL容器進(jìn)行管理從數(shù)據(jù)庫(kù)記錄集生成對(duì)象,然后把對(duì)象放入STL容器中,是一個(gè)很好的設(shè)計(jì)方案數(shù)據(jù)庫(kù)表的一對(duì)多關(guān)聯(lián),表現(xiàn)為對(duì)象之間的組合,多對(duì)多關(guān)聯(lián)如何處理?請(qǐng)思索!對(duì)象與關(guān)系數(shù)據(jù)庫(kù)2021/7/3197對(duì)象實(shí)例的數(shù)據(jù)保存在數(shù)據(jù)庫(kù)表中,一般一條記錄對(duì)應(yīng)一個(gè)對(duì)象實(shí)例,盡量避免一個(gè)對(duì)象實(shí)例的數(shù)據(jù)分布在不同的表中,這樣就加大了移植的難度;對(duì)象與數(shù)據(jù)庫(kù)之間的關(guān)系問(wèn)題是OOD與OOP必須解決的問(wèn)題之一。數(shù)據(jù)庫(kù)表關(guān)聯(lián)與對(duì)象的對(duì)應(yīng)表的一對(duì)一關(guān)聯(lián)可直接映射到對(duì)象間的一對(duì)一關(guān)聯(lián)2021/7/3198數(shù)據(jù)庫(kù)表關(guān)聯(lián)與對(duì)象的對(duì)應(yīng)一對(duì)多關(guān)聯(lián)2021/7/3199數(shù)據(jù)庫(kù)表關(guān)聯(lián)與對(duì)象的對(duì)應(yīng)多對(duì)多關(guān)聯(lián)需拆成兩個(gè)一對(duì)多的關(guān)聯(lián)2021/7/31100分而治之的設(shè)計(jì)方法2021/7/31101“分而治之”是一個(gè)基本的方法,簡(jiǎn)單
地說(shuō),就是將一個(gè)復(fù)雜的系統(tǒng)劃分為幾
個(gè)子系統(tǒng),然后,分別處理這些子系統(tǒng),最后再合成一個(gè)完整的系統(tǒng)。這是西方科學(xué)的主要思維方法之一:重
視局部與細(xì)節(jié),用放大鏡去研究大象。橫向與縱向2021/7/31102可以利用多態(tài)、模板等機(jī)制簡(jiǎn)化設(shè)計(jì)繼承是縱向的設(shè)計(jì)方案,STL是橫向的解決方案,繼承可以復(fù)用代碼,模板可以減少類的數(shù)量,相互配合才是良好的設(shè)計(jì)?;诮M件的“搭積木”過(guò)程可以看成是將橫向與縱向設(shè)計(jì)相結(jié)合的典范OOD的指導(dǎo)原則2021/7/31103為特定問(wèn)題產(chǎn)生一個(gè)class,然后讓它在解決其他問(wèn)題時(shí),漸漸成長(zhǎng)而成熟;設(shè)計(jì)Class及其接口,是OOD的主要任務(wù);開(kāi)始寫(xiě)程序,讓一部分先動(dòng)起來(lái),以驗(yàn)證設(shè)計(jì),或找出難點(diǎn)所在;保持類的小而簡(jiǎn)潔,功能明確——《Thinking
in
Java》p82OOAD的哲學(xué)方法論2021/7/31104真學(xué)問(wèn)把復(fù)雜的問(wèn)題弄得簡(jiǎn)單,它的目的是讓你能夠理解;偽學(xué)問(wèn)把簡(jiǎn)單的問(wèn)題弄得復(fù)雜,它的目的是讓你感到神秘。不做就學(xué)不到OOAD的哲學(xué)方法論2021/7/31105一切都要從實(shí)際出發(fā),不迷信老外的一切,相信自己的直覺(jué)。采用“拿來(lái)主義”現(xiàn)在的OOD,大多是在采用已有的系統(tǒng)架構(gòu)基礎(chǔ)上修修補(bǔ)補(bǔ),以達(dá)到最大限度地利用現(xiàn)有資源的目的。所以,OOD不是獨(dú)立于語(yǔ)言
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智慧農(nóng)業(yè)項(xiàng)目承包合同10篇
- 2025年度海參養(yǎng)殖基地環(huán)境保護(hù)與生態(tài)補(bǔ)償合同3篇
- 2025年度昌平區(qū)校園食堂承包項(xiàng)目競(jìng)爭(zhēng)性磋商合同3篇
- 2025年度新能源汽車(chē)充電車(chē)位分期付款租賃合同4篇
- 2025年度現(xiàn)代化豬欄設(shè)施租賃合同3篇
- 2025年度商業(yè)物業(yè)承包經(jīng)營(yíng)合同范本4篇
- 2025年度新能源汽車(chē)融資租賃合同范本3篇
- 2025年度寵物店寵物購(gòu)買(mǎi)合同附寵物用品租賃服務(wù)合同3篇
- 2025年度海綿城市建設(shè)項(xiàng)目特許經(jīng)營(yíng)合同3篇
- 2025年度商業(yè)步行街?jǐn)偽蛔赓U及商業(yè)管理合同4篇
- OQC培訓(xùn)資料教學(xué)課件
- 2024年8月CCAA國(guó)家注冊(cè)審核員OHSMS職業(yè)健康安全管理體系基礎(chǔ)知識(shí)考試題目含解析
- 體育賽事組織與實(shí)施操作手冊(cè)
- 2024年浙江省公務(wù)員考試結(jié)構(gòu)化面試真題試題試卷答案解析
- 2023年航空公司招聘:機(jī)場(chǎng)安檢員基礎(chǔ)知識(shí)試題(附答案)
- 皮膚儲(chǔ)存新技術(shù)及臨床應(yīng)用
- 外研版七年級(jí)英語(yǔ)上冊(cè)《閱讀理解》專項(xiàng)練習(xí)題(含答案)
- 《現(xiàn)在完成時(shí)》語(yǔ)法復(fù)習(xí)課件(共44張-)
- 二年級(jí)下冊(cè)語(yǔ)文《第3單元 口語(yǔ)交際:長(zhǎng)大以后做什么》課件
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)必考題
- 上海市復(fù)旦大學(xué)附中2024屆高考沖刺模擬數(shù)學(xué)試題含解析
評(píng)論
0/150
提交評(píng)論