UML、OOAD和OOP的實(shí)踐與思索UML課件_第1頁(yè)
UML、OOAD和OOP的實(shí)踐與思索UML課件_第2頁(yè)
UML、OOAD和OOP的實(shí)踐與思索UML課件_第3頁(yè)
UML、OOAD和OOP的實(shí)踐與思索UML課件_第4頁(yè)
UML、OOAD和OOP的實(shí)踐與思索UML課件_第5頁(yè)
已閱讀5頁(yè),還剩108頁(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)介

1、OOA、OOD和UML面向?qū)ο蠹夹g(shù)的開發(fā)實(shí)踐北京理工大學(xué)信息學(xué)院計(jì)算機(jī)科學(xué)系 金旭亮2022/8/41第1頁(yè),共113頁(yè)。主要內(nèi)容OOA、OOD與UML基礎(chǔ)Rose如何介入軟件開發(fā)的全過(guò)程案例:編寫一個(gè)自己的簡(jiǎn)化版WinZip軟件開發(fā)的哲學(xué)思考待研究的課題2022/8/42第2頁(yè),共113頁(yè)。第一部分OOA與OOD基礎(chǔ)2022/8/43第3頁(yè),共113頁(yè)。OOAObject-Oriented Analysis (OOA):面向?qū)ο蟮姆治?OOA的側(cè)重點(diǎn)是業(yè)務(wù)領(lǐng)域分析,與軟件所要應(yīng)用的行業(yè)領(lǐng)域相關(guān),而與軟件技術(shù)關(guān)系不大,需要由領(lǐng)域?qū)<疫M(jìn)行。這一部分的工作被稱為“需求分析”。2022/8/44第4

2、頁(yè),共113頁(yè)。OOA的成果業(yè)務(wù)領(lǐng)域用例圖活動(dòng)圖協(xié)作圖大量的業(yè)務(wù)文檔資料2022/8/45第5頁(yè),共113頁(yè)。OODObject-oriented design (OOD)用面向?qū)ο蟮姆椒檎鎸?shí)世界建立一個(gè)計(jì)算機(jī)中的虛擬模型2022/8/46第6頁(yè),共113頁(yè)。OOD的地位OOD的主要任務(wù)是跨越業(yè)務(wù)領(lǐng)域模型與可實(shí)際運(yùn)行的軟件系統(tǒng)之間的鴻溝。OOD的難度是非常大的,負(fù)責(zé)OOD工作的人被稱為系統(tǒng)架構(gòu)設(shè)計(jì)師2022/8/47第7頁(yè),共113頁(yè)。系統(tǒng)架構(gòu)設(shè)計(jì)師的任務(wù)確定系統(tǒng)的總體框架-大多采用已有的領(lǐng)域框架正確理解需求分析得出的領(lǐng)域模型,用面向?qū)ο蟮乃枷朐O(shè)計(jì)出軟件體系結(jié)構(gòu)-系統(tǒng)概要設(shè)計(jì)分析現(xiàn)實(shí)的可獲取

3、的技術(shù)資源,分解出軟件的各個(gè)組件,安排好開發(fā)任務(wù)流程-系統(tǒng)詳細(xì)設(shè)計(jì)2022/8/48第8頁(yè),共113頁(yè)。OOD的成果系統(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ì)象?2022/8/49第9頁(yè),共113頁(yè)。OOP流行的面向?qū)ο笳Z(yǔ)言O(shè)bject-oriented Program (OOP)用一種面向?qū)ο蟮恼Z(yǔ)言來(lái)實(shí)現(xiàn)OOD完成的系統(tǒng)設(shè)計(jì)Java、C+、Object Pascal、C#、VB.net2022/8/410第10頁(yè),共113頁(yè)。關(guān)于OOP用面向?qū)ο蟮恼Z(yǔ)言編程不是OOP!OOP最重要的特征是面向?qū)?/p>

4、象理論的廣泛應(yīng)用OOP的成果是可運(yùn)行的實(shí)際系統(tǒng)OOP中摻雜著OOD,OOP與OOD你中有我,我中有你,OOP是具體的OOD,二者的區(qū)別就在于應(yīng)用范圍的不同。2022/8/411第11頁(yè),共113頁(yè)。OOA、OOD、OOP與真實(shí)世界2022/8/412第12頁(yè),共113頁(yè)。面向?qū)ο罄碚摰脑僬J(rèn)識(shí)封裝封裝體現(xiàn)了數(shù)據(jù)信息的隱藏,從而使不同模塊的信息互不影響,這是OO的一大優(yōu)點(diǎn),因?yàn)樗鼜念愡@一程序基本單位開始就支持信息隱藏。2022/8/413第13頁(yè),共113頁(yè)。面向?qū)ο罄碚摰脑僬J(rèn)識(shí)繼承相對(duì)于結(jié)構(gòu)化編程中的模塊重用,面向?qū)ο笾械睦^承體系顯得更靈活,對(duì)代碼的控制手段更多,從而推動(dòng)了代碼復(fù)用的程度,但卻加

5、大了學(xué)習(xí)掌握的難度。2022/8/414第14頁(yè),共113頁(yè)。面向?qū)ο罄碚摰脑僬J(rèn)識(shí)多態(tài)的特點(diǎn):所有可以發(fā)給base class對(duì)象的消息,也都同樣可以發(fā)給derived class。這是了解面向?qū)ο笳嫠璧年P(guān)鍵之一。2022/8/415第15頁(yè),共113頁(yè)。C+中的面向?qū)ο筇匦运姆N編程風(fēng)范:結(jié)構(gòu)化編程、基于對(duì)象、面向?qū)ο?、泛型編程C程序員易犯的毛病:在C+中寫C程序。2022/8/416第16頁(yè),共113頁(yè)。軟件源代碼復(fù)用的方式組合(composition)與聚合(aggregation)繼承(inherit)其基本思想是以現(xiàn)有的類為基礎(chǔ)創(chuàng)建新的類2022/8/417第17頁(yè),共113頁(yè)。STL

6、Standard Template Library,標(biāo)準(zhǔn)模板庫(kù)STL是容器,算法和其他一些組件的集合2022/8/418第18頁(yè),共113頁(yè)。泛型編程在OOD中的應(yīng)用一種獨(dú)特的平面型編程風(fēng)范,大量使用C+的模板技巧典型案例:STL在標(biāo)準(zhǔn)的OOD設(shè)計(jì)方案中引入泛型編程技術(shù),可以起到減少類數(shù)目的作用泛型技術(shù)可以看成是C+類的“合并同類項(xiàng)”。2022/8/419第19頁(yè),共113頁(yè)。統(tǒng)一建模語(yǔ)言UMLUML圖形化的建模語(yǔ)言開發(fā)者用來(lái)為面向?qū)ο笙到y(tǒng)建立模型具有靈活性與可擴(kuò)展性2022/8/420第20頁(yè),共113頁(yè)。統(tǒng)一軟件過(guò)程RUP三大特點(diǎn):用例驅(qū)動(dòng)、迭代開發(fā)和增量開發(fā)2022/8/421第21頁(yè),

7、共113頁(yè)。OOAD的強(qiáng)大工具-ROSEROSE是采用UML進(jìn)行軟件系統(tǒng)設(shè)計(jì)的一個(gè)CASE工具,還有其他工具比如Visio,JBuilder7等。使用ROSE可以保證源代碼與系統(tǒng)模型的一致性,這在軟件開發(fā)過(guò)程中是非常有用的正向:UML模型軟件代碼框架逆向:軟件代碼UML模型ROSE支持雙向工程2022/8/422第22頁(yè),共113頁(yè)。ROSE對(duì)軟件開發(fā)全過(guò)程的參與4+1視圖Process ViewDeployment ViewLogical ViewImplementation ViewProgrammers Software management PerformanceScalability

8、Throughput System IntegratorsSystem topology Delivery, installationcommunicationSystem EngineeringUse-Case ViewStructure Analysts/DesignersEnd-user Functionality2022/8/423第23頁(yè),共113頁(yè)。用ROSE表達(dá)系統(tǒng)功能2022/8/424第24頁(yè),共113頁(yè)。用ROSE表達(dá)軟件的靜態(tài)結(jié)構(gòu)類圖Class Diagram: 表明了一個(gè)軟件中的各個(gè)類之間的關(guān)系2022/8/425第25頁(yè),共113頁(yè)。用ROSE表達(dá)軟件的靜態(tài)結(jié)構(gòu)202

9、2/8/426第26頁(yè),共113頁(yè)。用ROSE表達(dá)軟件的靜態(tài)結(jié)構(gòu)2022/8/427第27頁(yè),共113頁(yè)。用ROSE表達(dá)軟件的靜態(tài)結(jié)構(gòu)2022/8/428第28頁(yè),共113頁(yè)。用ROSE表達(dá)軟件的靜態(tài)結(jié)構(gòu)小結(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è)類2022/8/429第29頁(yè),共113頁(yè)。用組件圖描述軟件組件一般用組件圖來(lái)生成代碼2022/8/430第30頁(yè),共113頁(yè)。用ROSE表達(dá)軟件的動(dòng)態(tài)特性1: Per

10、formResponsibility客戶對(duì)象供應(yīng)者對(duì)象t消息:Client:Supplier調(diào)用周期說(shuō)明 反身消息對(duì)象生命線1.1: PerformAnotherResponsibility序列圖序列圖用于表達(dá)對(duì)象之間是如何發(fā)送消息,何時(shí)new一個(gè)對(duì)象,何時(shí)delete它,非常適合表達(dá)一種代碼流程。2022/8/431第31頁(yè),共113頁(yè)。用ROSE表達(dá)軟件的動(dòng)態(tài)特性1: PerformResponsibilityClient ObjectSupplier ObjectMessageLink:Client:Supplier協(xié)作圖協(xié)作圖比較適合表達(dá)類之間的依賴關(guān)聯(lián)2022/8/432第32頁(yè),共

11、113頁(yè)。用ROSE表達(dá)軟件的動(dòng)態(tài)特性狀態(tài)圖當(dāng)系統(tǒng)可以明顯地劃分為幾個(gè)不同狀態(tài)時(shí),狀態(tài)圖可以大顯身手,最明顯的是ADO 記錄集的狀態(tài)轉(zhuǎn)換例如:需要給水分子的三種物理狀態(tài)建模2022/8/433第33頁(yè),共113頁(yè)。用ROSE表達(dá)軟件的動(dòng)態(tài)特性活動(dòng)圖活動(dòng)圖最適合表達(dá)出一種處理流程2022/8/434第34頁(yè),共113頁(yè)。用ROSE表達(dá)軟件的動(dòng)態(tài)特性小結(jié):(1)所有圖的最根本目的是要對(duì)系統(tǒng)運(yùn)行過(guò)程中的各個(gè)對(duì)象之間的關(guān)系作出確定性的唯一性的描述,從而保證所有開發(fā)人員都能對(duì)系統(tǒng)有一個(gè)統(tǒng)一的認(rèn)識(shí)。(2)一般在確定了軟件的靜態(tài)結(jié)構(gòu)之后才進(jìn)行描述系統(tǒng)的動(dòng)態(tài)特性(3)在任何情況下,保證ROSE模型與實(shí)際代碼的

12、一致都是至關(guān)重要的?。?)要根據(jù)實(shí)際情況選擇一種合適的圖來(lái)表達(dá)系統(tǒng),不要強(qiáng)行要求用上所有類型的圖,牢記:我們的目的是為了交流!2022/8/435第35頁(yè),共113頁(yè)。參考資料2022/8/436第36頁(yè),共113頁(yè)。參考資料2022/8/437第37頁(yè),共113頁(yè)。參考資料2022/8/438第38頁(yè),共113頁(yè)。參考資料2022/8/439第39頁(yè),共113頁(yè)。參考資料2022/8/440第40頁(yè),共113頁(yè)。參考資料2022/8/441第41頁(yè),共113頁(yè)。參考資料2022/8/442第42頁(yè),共113頁(yè)。案例研究一再造一個(gè)WinZip麻雀雖小,五臟俱全2022/8/443第43頁(yè),共1

13、13頁(yè)。緣起:用一個(gè)規(guī)模小的工具軟件來(lái)說(shuō)明OOD的實(shí)際應(yīng)用整個(gè)軟件完成周期:四天2022/8/444第44頁(yè),共113頁(yè)。開發(fā)過(guò)程形成軟件總體想法:5分鐘形成軟件技術(shù)想法:5分鐘實(shí)驗(yàn)技術(shù)想法:1天設(shè)計(jì)系統(tǒng)詳細(xì)設(shè)計(jì)方案:1天正式編碼和測(cè)試:半天感觸:只要有技術(shù)積累,再加上合理的OOD,開發(fā)一個(gè)軟件會(huì)成為一種很有成就感的創(chuàng)作!2022/8/445第45頁(yè),共113頁(yè)?;诮M件的用戶界面設(shè)計(jì)標(biāo)準(zhǔn)的分層體系結(jié)構(gòu):用戶界面類系統(tǒng)外部功能類系統(tǒng)底層基本功能類2022/8/446第46頁(yè),共113頁(yè)。功能設(shè)想2022/8/447第47頁(yè),共113頁(yè)。技術(shù)方案考慮采用C+流技術(shù)采用Borland C+ Bui

14、lder開發(fā)BCB vs VC2022/8/448第48頁(yè),共113頁(yè)。軟件的工作原理(一)要編寫一個(gè)軟件,首先要知道人是如何完成某項(xiàng)工作的;接著,必須分析如何用計(jì)算機(jī)來(lái)完成這個(gè)工作,其結(jié)果是形成一個(gè)計(jì)算機(jī)算法,這要求有相關(guān)領(lǐng)域的理論知識(shí)2022/8/449第49頁(yè),共113頁(yè)。軟件的工作原理(二)計(jì)算機(jī)中文件的基本類型2022/8/450第50頁(yè),共113頁(yè)。軟件的工作原理(三)計(jì)算機(jī)中文件的基本類型2022/8/451第51頁(yè),共113頁(yè)。軟件的工作原理(四)考慮軟件的內(nèi)部總體數(shù)據(jù)處理流程2022/8/452第52頁(yè),共113頁(yè)。設(shè)計(jì)過(guò)程(一)-資源選擇選擇可以復(fù)用的代碼資源:C函數(shù)庫(kù):用

15、fopen()、fclose()等打開和關(guān)閉文件,然后,直接在內(nèi)存中對(duì)字節(jié)流進(jìn)行處理 STL:用標(biāo)準(zhǔn)模板庫(kù)(STL)中的iostream類 VCL:用TStream類2022/8/453第53頁(yè),共113頁(yè)。設(shè)計(jì)過(guò)程(二)-接口設(shè)計(jì)設(shè)計(jì)基本的流操作類接口請(qǐng)參看源代碼文件:FileStreamOpt.hFileStreamOpt.cpp2022/8/454第54頁(yè),共113頁(yè)。設(shè)計(jì)過(guò)程(三)-利用多態(tài)VCL的TStream類繼承樹圖注意:接口設(shè)計(jì)中采用了TStream* 以利用多態(tài)2022/8/455第55頁(yè),共113頁(yè)。設(shè)計(jì)過(guò)程(四)-數(shù)據(jù)結(jié)構(gòu)Struct VS Class2022/8/456

16、第56頁(yè),共113頁(yè)。數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)結(jié)果2022/8/457第57頁(yè),共113頁(yè)。設(shè)計(jì)過(guò)程(五)-數(shù)據(jù)對(duì)象的管理?OO軟件的顯著特點(diǎn)之一是如何管理對(duì)象C+技術(shù)難點(diǎn):=運(yùn)算符重載STL在數(shù)據(jù)結(jié)構(gòu)方面有強(qiáng)大的表達(dá)能力! vector VS list利用VCL的現(xiàn)有特性改善設(shè)計(jì)2022/8/458第58頁(yè),共113頁(yè)。設(shè)計(jì)過(guò)程(六)-功能實(shí)現(xiàn)2022/8/459第59頁(yè),共113頁(yè)。設(shè)計(jì)結(jié)果2022/8/460第60頁(yè),共113頁(yè)。Key:先進(jìn)行非可視化功能類的設(shè)計(jì)設(shè)計(jì)過(guò)程中要綜合考慮各方面的要求,作出綜合平衡,然后才能形成可行的設(shè)計(jì)方案界面設(shè)計(jì)放在功能設(shè)計(jì)方案之后,它的目的是提供一個(gè)用戶接口以驅(qū)動(dòng)功

17、能類的運(yùn)作.2022/8/461第61頁(yè),共113頁(yè)。界面設(shè)計(jì)案例:界面與功能代碼的完全分離2022/8/462第62頁(yè),共113頁(yè)。用戶界面設(shè)計(jì)(一)-窗體2022/8/463第63頁(yè),共113頁(yè)。用戶界面設(shè)計(jì)(二)-靈活性用戶界面編碼的分層原則 :(1)不在控件的事件處理過(guò)程中書寫大量的代碼!(2)盡可能減少代碼對(duì)具體控件的依賴(3)重復(fù)使用的某種功能的控件應(yīng)被封裝成新的控件(4)考慮窗體間的相似性,巧妙利用窗體的OO特性:繼承,多態(tài)與重載一個(gè)復(fù)雜的控件原則上應(yīng)新建一個(gè)控制類以便于使用,這個(gè)控制類的接口成員應(yīng)是按邏輯來(lái)劃分而不是按技術(shù)來(lái)劃分的2022/8/464第64頁(yè),共113頁(yè)。用戶界

18、面設(shè)計(jì)(三)-健壯性保證用戶界面層以正確的順序調(diào)用功能類 避免一個(gè)窗體過(guò)于復(fù)雜2022/8/465第65頁(yè),共113頁(yè)。提高軟件健壯性每一個(gè)函數(shù)都盡可能地保證是獨(dú)立完備的、安全的。程序基本完成后,從最底層的類開始,逐步找出每個(gè)對(duì)外接口的前條件(前提)和后條件(結(jié)果),然后,判斷有無(wú)可能發(fā)生錯(cuò)誤,并且決定這些錯(cuò)誤應(yīng)該如何處理2022/8/466第66頁(yè),共113頁(yè)。開發(fā)高容錯(cuò)程序三原則預(yù)防所有可以預(yù)料和防止的錯(cuò)誤;處理所有可以預(yù)料但不能防止的錯(cuò)誤;捕獲所有不能預(yù)料的錯(cuò)誤;代碼實(shí)例分析2022/8/467第67頁(yè),共113頁(yè)。使用ROSE進(jìn)行正向代碼生成設(shè)計(jì)類接口新建一個(gè)組件將類賦與組件生成代碼2

19、022/8/468第68頁(yè),共113頁(yè)。使用ROSE進(jìn)行正向代碼生成(1)設(shè)計(jì)類接口2022/8/469第69頁(yè),共113頁(yè)。使用ROSE進(jìn)行正向代碼生成(2)新建一個(gè)組件2022/8/470第70頁(yè),共113頁(yè)。使用ROSE進(jìn)行正向代碼生成(3)選定組件的語(yǔ)言2022/8/471第71頁(yè),共113頁(yè)。使用ROSE進(jìn)行正向代碼生成(4)給組件分配類2022/8/472第72頁(yè),共113頁(yè)。使用ROSE進(jìn)行正向代碼生成(5)分配了類的組件2022/8/473第73頁(yè),共113頁(yè)。使用ROSE進(jìn)行正向代碼生成(6)生成代碼2022/8/474第74頁(yè),共113頁(yè)。使用ROSE進(jìn)行逆向更新逆向更新的

20、目的是用更改后的代碼刷新系統(tǒng)模型文件,以保證系統(tǒng)文檔與真實(shí)代碼的一致性2022/8/475第75頁(yè),共113頁(yè)。使用ROSE進(jìn)行逆向轉(zhuǎn)換選擇組件打開Ansi C+ specification窗口選擇文件生成模型2022/8/476第76頁(yè),共113頁(yè)。用已有代碼進(jìn)行逆向轉(zhuǎn)換(1)新建組件2022/8/477第77頁(yè),共113頁(yè)。用已有代碼進(jìn)行逆向轉(zhuǎn)換(2)打開ANSI C+參數(shù)設(shè)置窗口2022/8/478第78頁(yè),共113頁(yè)。用已有代碼進(jìn)行逆向轉(zhuǎn)換(3)加入C+頭文件和CPP文件2022/8/479第79頁(yè),共113頁(yè)。用已有代碼進(jìn)行逆向轉(zhuǎn)換(4)從菜單中選逆向工程命令2022/8/480第8

21、0頁(yè),共113頁(yè)。用已有代碼進(jìn)行逆向轉(zhuǎn)換(5)ROSE工程資源瀏覽器中新生成的類2022/8/481第81頁(yè),共113頁(yè)。用已有代碼進(jìn)行逆向轉(zhuǎn)換(6)新生成的類的屬性窗口2022/8/482第82頁(yè),共113頁(yè)。用已有代碼進(jìn)行逆向轉(zhuǎn)換(7)在類圖中顯示逆向工程生成的類2022/8/483第83頁(yè),共113頁(yè)。OOAD理論總結(jié)與思索2022/8/484第84頁(yè),共113頁(yè)。軟件開發(fā)的最重要思維方式軟件開發(fā)的最重要思維方式是什么?抽象!軟件=對(duì)象+對(duì)象之間的關(guān)系結(jié)構(gòu)化編程時(shí)代程序=數(shù)據(jù)結(jié)構(gòu)+算法面向?qū)ο筌浖r(shí)代,軟件=?2022/8/485第85頁(yè),共113頁(yè)。組件化時(shí)代的軟件設(shè)計(jì)什么是軟件組件?

22、注意:區(qū)分ROSE中的組件與軟件理論領(lǐng)域中的組件可以復(fù)用的,具備一定功能的類的組合。單個(gè)類不夠資格成為軟件組件!軟件組件可以以源代碼方式存在,也可以以二進(jìn)制形式存在2022/8/486第86頁(yè),共113頁(yè)。組件化時(shí)代的軟件設(shè)計(jì)OOD設(shè)計(jì)師制定組件的規(guī)范,高級(jí)程序員實(shí)現(xiàn)這些可復(fù)用的組件現(xiàn)代軟件開發(fā)已成為組裝已有組件的過(guò)程,最典型的例子是Java與.net類庫(kù)2022/8/487第87頁(yè),共113頁(yè)。設(shè)計(jì)模式大型系統(tǒng)中良好的設(shè)計(jì)是關(guān)鍵 為開發(fā)面向?qū)ο蟮能浖峁┮粋€(gè)架構(gòu)減少了軟件設(shè)計(jì)的復(fù)雜度為軟件設(shè)計(jì)方案的重用提供了可能性可以避免犯一些常規(guī)性的錯(cuò)誤使設(shè)計(jì)獨(dú)立于語(yǔ)言建立了一套軟件架構(gòu)設(shè)計(jì)師的“通用語(yǔ)言

23、”在軟件開發(fā)周期中縮短了設(shè)計(jì)周期設(shè)計(jì)模式(Design patterns)2022/8/488第88頁(yè),共113頁(yè)。使用設(shè)計(jì)模式熟悉模式才能知道如何使用模式用模式的最好方法就是設(shè)計(jì)時(shí)忘掉所有的模式名,只從實(shí)踐出發(fā)尋找可行的方案,必要時(shí)才去翻模式書以獲得靈感。我們用UML來(lái)描述模式,ROSE是畫圖工具2022/8/489第89頁(yè),共113頁(yè)。設(shè)計(jì)模式經(jīng)典書籍四個(gè)老外權(quán)威:Gamma, Helm, Johnson and Vlissides“Gang of Four”四人幫Design Patterns, Elements of Reusable Object-Oriented Software

24、(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)題2022/8/490第90頁(yè),共113頁(yè)。參考資料2022/8/491第91頁(yè),共113頁(yè)。參考資料2022/8/492第92頁(yè),共113頁(yè)。關(guān)于設(shè)計(jì)模式設(shè)計(jì)模式運(yùn)用時(shí),心中要無(wú)模式;關(guān)鍵在于把握其思想。應(yīng)仔細(xì)研究成熟的設(shè)計(jì)模式,將其活學(xué)活用模式不是數(shù)學(xué)公式!2022/8/493第93頁(yè),共113頁(yè)。結(jié)構(gòu)化編程與面向?qū)ο缶幊堂嫦驅(qū)ο蟮年P(guān)鍵是抽象面向?qū)ο蠓治鲈O(shè)計(jì)的成功實(shí)施要求更高,難度更大:在理解對(duì)象基本理論和開發(fā)

25、技術(shù)的前提下,加上豐富的程序開發(fā)實(shí)踐,才行。結(jié)構(gòu)化與面向?qū)ο蠓椒☉?yīng)該相輔相成,在合適的地方用合適的方法。2022/8/494第94頁(yè),共113頁(yè)。結(jié)構(gòu)化編程與面向?qū)ο缶幊淘陬惖膬?nèi)部代碼實(shí)現(xiàn)上采用結(jié)構(gòu)化編程的方式:比如:將一個(gè)太長(zhǎng)的函數(shù)按功能分解為若干個(gè)小函數(shù),做為類的私有函數(shù)只有在調(diào)試代碼清除BUG中,才發(fā)覺(jué)OO的妙處和軟件工程理論的無(wú)比正確!最重要的是兩點(diǎn):(1)代碼隔離;(2)控制模塊規(guī)模;2022/8/495第95頁(yè),共113頁(yè)。對(duì)象的存儲(chǔ)對(duì)象的存儲(chǔ)不應(yīng)直接與數(shù)據(jù)庫(kù)打交道對(duì)象的管理通常都設(shè)計(jì)控制類采用STL容器進(jìn)行管理從數(shù)據(jù)庫(kù)記錄集生成對(duì)象,然后把對(duì)象放入STL容器中,是一個(gè)很好的設(shè)計(jì)方

26、案數(shù)據(jù)庫(kù)表的一對(duì)多關(guān)聯(lián),表現(xiàn)為對(duì)象之間的組合,多對(duì)多關(guān)聯(lián)如何處理?請(qǐng)思索!2022/8/496第96頁(yè),共113頁(yè)。對(duì)象與關(guān)系數(shù)據(jù)庫(kù)對(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)題之一。2022/8/497第97頁(yè),共113頁(yè)。數(shù)據(jù)庫(kù)表關(guān)聯(lián)與對(duì)象的對(duì)應(yīng)表的一對(duì)一關(guān)聯(lián)可直接映射到對(duì)象間的一對(duì)一關(guān)聯(lián)2022/8/498第98頁(yè),共113頁(yè)。數(shù)據(jù)庫(kù)表關(guān)聯(lián)與對(duì)象的對(duì)應(yīng)一對(duì)多關(guān)聯(lián)2022/8/499第99頁(yè),共113頁(yè)。數(shù)據(jù)庫(kù)表關(guān)聯(lián)與對(duì)象的對(duì)應(yīng)多對(duì)多關(guān)聯(lián)需拆成兩個(gè)一對(duì)

27、多的關(guān)聯(lián)2022/8/4100第100頁(yè),共113頁(yè)。分而治之的設(shè)計(jì)方法“分而治之”是一個(gè)基本的方法,簡(jiǎn)單地說(shuō),就是將一個(gè)復(fù)雜的系統(tǒng)劃分為幾個(gè)子系統(tǒng),然后,分別處理這些子系統(tǒng),最后再合成一個(gè)完整的系統(tǒng)。這是西方科學(xué)的主要思維方法之一:重視局部與細(xì)節(jié),用放大鏡去研究大象。2022/8/4101第101頁(yè),共113頁(yè)。橫向與縱向可以利用多態(tài)、模板等機(jī)制簡(jiǎn)化設(shè)計(jì)繼承是縱向的設(shè)計(jì)方案,STL是橫向的解決方案,繼承可以復(fù)用代碼,模板可以減少類的數(shù)量,相互配合才是良好的設(shè)計(jì)?;诮M件的“搭積木”過(guò)程可以看成是將橫向與縱向設(shè)計(jì)相結(jié)合的典范2022/8/4102第102頁(yè),共113頁(yè)。OOD的指導(dǎo)原則為特定問(wèn)

28、題產(chǎn)生一個(gè)class,然后讓它在解決其他問(wèn)題時(shí),漸漸成長(zhǎng)而成熟;設(shè)計(jì)Class及其接口,是OOD的主要任務(wù);開始寫程序,讓一部分先動(dòng)起來(lái),以驗(yàn)證設(shè)計(jì),或找出難點(diǎn)所在;保持類的小而簡(jiǎn)潔,功能明確Thinking in Javap822022/8/4103第103頁(yè),共113頁(yè)。OOAD的哲學(xué)方法論真學(xué)問(wèn)把復(fù)雜的問(wèn)題弄得簡(jiǎn)單,它的目的是讓你能夠理解;偽學(xué)問(wèn)把簡(jiǎn)單的問(wèn)題弄得復(fù)雜,它的目的是讓你感到神秘。不做就學(xué)不到2022/8/4104第104頁(yè),共113頁(yè)。OOAD的哲學(xué)方法論一切都要從實(shí)際出發(fā),不迷信老外的一切,相信自己的直覺(jué)。采用“拿來(lái)主義”現(xiàn)在的OOD,大多是在采用已有的系統(tǒng)架構(gòu)基礎(chǔ)上修修補(bǔ)補(bǔ),以達(dá)到最大限度地利用現(xiàn)有資源的目的。所以,OOD不是獨(dú)立于語(yǔ)言與開發(fā)工具的。不存在界限分明的OOD

溫馨提示

  • 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)論