版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
引言什么是面向?qū)ο蠓椒??結(jié)構(gòu)化方法和面向?qū)ο蠓椒ㄓ泻尾煌?.1結(jié)構(gòu)化方法的一個(gè)例子設(shè)計(jì)并實(shí)現(xiàn)一個(gè)四則運(yùn)算軟件,輸入兩個(gè)數(shù)和運(yùn)算符號(hào),輸出運(yùn)算結(jié)果。用數(shù)據(jù)流程圖來(lái)表示,只有三個(gè)處理:“數(shù)據(jù)錄入”,“計(jì)算”,“結(jié)果輸出”,轉(zhuǎn)換成設(shè)計(jì)模塊也只有“主模塊”“數(shù)據(jù)錄入”“計(jì)算”“結(jié)果輸出”4個(gè)簡(jiǎn)單的模塊。注:模塊太簡(jiǎn)單,畫(huà)圖略去,直接進(jìn)入編碼如下。模塊名稱:input功能:輸入運(yùn)算數(shù)和運(yùn)算符輸入模塊主要代碼輸出/返回?zé)o提示輸入信息:"請(qǐng)輸入數(shù)字A、B和運(yùn)算符:"讀入NumberA、NumberB和OperateNumberA,NumberB,Operate輸入模塊主要代碼輸出/返回NumberANumberBOperateStringResult="";Switch(Operate){case"+":Result=string(NumberA+NumberB);break;case"?":Result=string(NumberA?NumberB);break;case"*":Result=string(NumberA×NumberB);break;case"/":if(NumberB!="0")Result=string(NumberA÷NumberB);else Result="除數(shù)不能為0"break;}Result模塊名稱:compute功能:計(jì)算輸入模塊主要代碼輸出/返回ResultConsole.WriteLine("運(yùn)算結(jié)果:"+Result);無(wú)模塊名稱:output功能:輸出結(jié)果當(dāng)需求發(fā)生變化,例如,增加一個(gè)平方運(yùn)算或開(kāi)根運(yùn)算時(shí),需要修改計(jì)算模塊,這就要求程序員對(duì)計(jì)算模塊的代碼非常了解。這對(duì)于功能簡(jiǎn)單的軟件比較容易實(shí)現(xiàn),當(dāng)軟件規(guī)模比較大,功能復(fù)雜時(shí),非常容易出錯(cuò),并且軟件的維護(hù)量很大。用面向?qū)ο蠓椒▽?shí)現(xiàn)首先設(shè)計(jì)一個(gè)計(jì)算類operation,有兩個(gè)私有的操作數(shù)numberA和numberB、三個(gè)方法:NumberA(),NumberB()和GetResult()類圖如下:點(diǎn)評(píng):在客戶端主程序直接調(diào)用實(shí)例化工廠類創(chuàng)建相應(yīng)的運(yùn)算類對(duì)象,工廠返回相應(yīng)的運(yùn)算類對(duì)象指針。例如:Operationoper;oper=OperationFactory.createOperate("+");oper.NumberA=1;oper.NumberB=2;double.result=oper.GetResult();每個(gè)計(jì)算分別設(shè)計(jì)為一個(gè)子類,如果要增加新的運(yùn)算,只需添加子類,同時(shí)在實(shí)例化工廠類中添加相應(yīng)的switch分支,其他的處理不受影響。也就是說(shuō),程序員不必了解其他運(yùn)算的處理代碼,程序的整體結(jié)構(gòu)沒(méi)有變化。結(jié)構(gòu)化方法的特點(diǎn):數(shù)據(jù)流程圖和軟件模塊結(jié)構(gòu)圖之間需要進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換有一定的隨意性。功能變化就會(huì)導(dǎo)致軟件模塊結(jié)構(gòu)發(fā)生變化,造成了軟件結(jié)構(gòu)不穩(wěn)定。不適合大規(guī)模的軟件開(kāi)發(fā)。結(jié)構(gòu)化方法的問(wèn)題(續(xù)):將數(shù)據(jù)定義與處理數(shù)據(jù)的過(guò)程相分離,不利于軟件復(fù)用。例如,在圖書(shū)館信息管理系統(tǒng)中,對(duì)圖書(shū)基本信息進(jìn)行處理的典型方法是:在數(shù)據(jù)說(shuō)明中定義圖書(shū)基本信息,并設(shè)計(jì)圖書(shū)信息添加模塊、修改模塊、刪除模塊等功能模塊,實(shí)現(xiàn)對(duì)圖書(shū)信息的處理。當(dāng)新的系統(tǒng)要復(fù)用圖書(shū)處理功能時(shí),要分別復(fù)制數(shù)據(jù)說(shuō)明定義和各個(gè)功能處理模塊。5.2面向?qū)ο蟮母拍钍裁词菍?duì)象?在現(xiàn)實(shí)世界中的任何有屬性的單個(gè)實(shí)體或概念,都可看做對(duì)象。學(xué)生張三是一個(gè)對(duì)象,具有姓名、學(xué)號(hào)、班級(jí)等屬性;一個(gè)銀行賬戶是一個(gè)對(duì)象,具有用戶名、余額等屬性;一份訂單也是一個(gè)對(duì)象,具有貨品名、單價(jià)、數(shù)量等屬性。對(duì)象可以有屬性和操作。屬性是靜態(tài)特征,操作是動(dòng)態(tài)特征。什么是類?類是具有相同屬性和相同行為的對(duì)象集合。學(xué)生是一個(gè)類,其中的一名學(xué)生張三是學(xué)生類的一個(gè)實(shí)例,其屬性有:姓名=張三,學(xué)號(hào)=J20080101,班級(jí)=計(jì)算機(jī)08-1:具有的操作可以是獲得或設(shè)置屬性值,或與其他對(duì)象用消息通信。例如,獲得學(xué)生的姓名、修改班級(jí)號(hào),向其他對(duì)象發(fā)送消息。類和對(duì)象的關(guān)系?面向?qū)ο笃渌拍睿≒161)消息機(jī)制封裝性繼承性多態(tài)性4種面向?qū)ο蟮拈_(kāi)發(fā)方法Booch方法Coad方法OOSE方法OMT方法5.4UML語(yǔ)言Booch、Rumbaugh和Jacobson三人創(chuàng)建了統(tǒng)一建模語(yǔ)言UML。不是一種可視化的程序設(shè)計(jì)語(yǔ)言,而是一種可視化的建模語(yǔ)言;不是工具或知識(shí)庫(kù)的規(guī)格說(shuō)明,而是一種建模語(yǔ)言規(guī)格說(shuō)明,是一種表示的標(biāo)準(zhǔn);不是過(guò)程,也不是方法,但允許任何一種過(guò)程和方法使用它。UML中的各種視圖(View)參見(jiàn)P167,自學(xué)剩下內(nèi)容面向?qū)ο蠓椒ǖ幕倦A段:面向?qū)ο蠓治觯悍治龊蜆?gòu)造問(wèn)題域的對(duì)象模型,區(qū)分類和對(duì)象,整體和部分關(guān)系;定義屬性、服務(wù),確定約束。面向?qū)ο笤O(shè)計(jì):根據(jù)面向?qū)ο蠓治觯O(shè)計(jì)交互過(guò)程和用戶接口,設(shè)計(jì)任務(wù)管理,配置資源,確定邊界條件,劃分子系統(tǒng),確定軟、硬件元素分配;面向?qū)ο髮?shí)現(xiàn):使用面向?qū)ο笳Z(yǔ)言實(shí)現(xiàn)面向?qū)ο笤O(shè)計(jì)。6.1面向?qū)ο笮枨蠓治龈攀雒嫦驅(qū)ο蠓治龊驮O(shè)計(jì)涉及到3方面內(nèi)容:一套完善的建模符號(hào)目前流行的建模符號(hào)采用UML的一套圖形符號(hào);一系列有效的分析步驟從描述用戶需求的文件中,抽象出目標(biāo)系統(tǒng)的本質(zhì)屬性,建立以用例模型、對(duì)象模型和動(dòng)態(tài)模型為核心的分析模型;一個(gè)方便易用的建模工具。RationalROSE等。面向?qū)ο笮枨蠓治龅娜蝿?wù)以用例和場(chǎng)景為基礎(chǔ),建立簡(jiǎn)潔、精確、可理解的模型。在此基礎(chǔ)上,開(kāi)發(fā)人員和用戶一起檢查模型,保證模型的正確、一致、完整和可行。循序漸進(jìn),多次循環(huán)迭代完成。建立用例模型用例模型是用來(lái)描述用戶需求的模型第1步:確定角色系統(tǒng)發(fā)生交互活動(dòng)的所有角色,如使用者、外部系統(tǒng)、外部設(shè)備、時(shí)間(定時(shí)器、觸發(fā)器等)第2步確定用例從每個(gè)角色出發(fā)研究該角色要干什么?把要做的事情映射到用例分析過(guò)程中,研究過(guò)程中需要弄清的幾個(gè)問(wèn)題:角色要求系統(tǒng)提供哪些功能(使用者需要做什么)?角色需要了解和處理的信息有哪些類型?必須提醒角色的系統(tǒng)事件有哪些?角色必須提醒系統(tǒng)的事件有哪些?怎樣把這些事件表示成用例中的功能?第3步確定用例模型使用用例圖展示系統(tǒng)的用例模型。第4步用例模型說(shuō)明包括角色說(shuō)明;用例總覽和詳述。第5步用例模型評(píng)價(jià)(評(píng)審)第6步優(yōu)化用例模型第7步構(gòu)造用戶界面的原型整個(gè)步驟詳細(xì)參見(jiàn)P186頁(yè)建立對(duì)象模型第1步:識(shí)別分析類。分析用例模型的每個(gè)用例,確定實(shí)現(xiàn)用例的類,分析每個(gè)類的職責(zé)、屬性和關(guān)聯(lián)。將參與用例實(shí)現(xiàn)的類收集到一個(gè)類圖中。分析類分為:邊界類——描述系統(tǒng)與外部角色之間的接口。控制類——在分析模型內(nèi)表示協(xié)調(diào)、順序、事務(wù)處理以及控制其他對(duì)象的類。實(shí)體型——為需要長(zhǎng)久保存的信息進(jìn)行建模的類。邊界類控制類建立對(duì)象模型(續(xù))第2步構(gòu)造類圖建立動(dòng)態(tài)模型用交互圖來(lái)描述分析類如何相互協(xié)作實(shí)現(xiàn)用例的功能。交互圖如活動(dòng)圖、狀態(tài)圖和順序圖等例如,圖書(shū)館信息管理系統(tǒng)“借書(shū)”用例的順序圖。圖8-10借書(shū)的基本順序圖圖8-11借書(shū)失敗的順序圖面向?qū)ο笤O(shè)計(jì)的概念面向?qū)ο蠓治龊驮O(shè)計(jì)的界限是模糊的,從面向?qū)ο蠓治龅矫嫦驅(qū)ο笤O(shè)計(jì)是一個(gè)逐漸擴(kuò)充模型的過(guò)程。分析的結(jié)果通過(guò)細(xì)化直接生成設(shè)計(jì)結(jié)果,在設(shè)計(jì)過(guò)程中逐步加深對(duì)需求的理解,從而進(jìn)一步完善需求分析的結(jié)果。分析和設(shè)計(jì)活動(dòng)是一個(gè)反復(fù)迭代的過(guò)程。面向?qū)ο笤O(shè)計(jì)的四個(gè)層次:確定系統(tǒng)的總體結(jié)構(gòu)和風(fēng)格,構(gòu)造系統(tǒng)的物理模型,將系統(tǒng)劃分成不同的子系統(tǒng)。中層設(shè)計(jì):對(duì)每個(gè)用例進(jìn)行設(shè)計(jì),規(guī)劃實(shí)現(xiàn)用例功能的關(guān)鍵類,確定類之間的關(guān)系。進(jìn)行底層設(shè)計(jì):對(duì)每個(gè)類進(jìn)行詳細(xì)設(shè)計(jì),設(shè)計(jì)類的屬性和操作,優(yōu)化類之間的關(guān)系。補(bǔ)充實(shí)現(xiàn)非功能性需求所需要的類。設(shè)計(jì)要點(diǎn):對(duì)接口進(jìn)行設(shè)計(jì)發(fā)現(xiàn)變化并且封裝它先考慮聚合然后考慮繼承高內(nèi)聚、低耦合類內(nèi)聚——設(shè)計(jì)類的原則是一個(gè)類的屬性和操作全部都是完成某個(gè)任務(wù)所必須的,其中不包括無(wú)用的屬性和操作。應(yīng)該通過(guò)類的公共接口實(shí)現(xiàn)耦合,不應(yīng)該依賴于類的具體實(shí)現(xiàn)細(xì)節(jié)。在設(shè)計(jì)時(shí)應(yīng)該盡量減少對(duì)象之間發(fā)送的消息數(shù)和消息中的參數(shù)個(gè)數(shù),降低消息連接的復(fù)雜程度。設(shè)計(jì)時(shí)應(yīng)該適當(dāng)使用繼承耦合可重用性重用性有兩個(gè)方面的含義:盡量使用已有的類,包括開(kāi)發(fā)環(huán)境提供的類庫(kù)和已有的相似的類;如果確實(shí)需要?jiǎng)?chuàng)建新類,則在設(shè)計(jì)這些新類時(shí)考慮將來(lái)的可重用性。設(shè)計(jì)一個(gè)可重用的軟件比設(shè)計(jì)一個(gè)普通軟件的代價(jià)要高,但是隨著這些軟件被重用次數(shù)的增加,分?jǐn)偟剿脑O(shè)計(jì)和實(shí)現(xiàn)成本就會(huì)降低。框架框架是一組可用于不同應(yīng)用的類的集合。例如,Java應(yīng)用程序接口(API)就是一個(gè)成功的框架包,為眾多的應(yīng)用提供服務(wù)。一般不會(huì)直接去修改框架的類,而是通過(guò)繼承等為應(yīng)用創(chuàng)建合適的類。軟件架構(gòu)和軟件框架有何區(qū)別?軟件架構(gòu)和軟件框架有何區(qū)別?軟件框架是一特殊的軟件,由實(shí)際的代碼構(gòu)建而成,是軟件系統(tǒng)、子系統(tǒng)的半成品。軟件框架為具體的解決方案提供了基礎(chǔ),提供了基礎(chǔ)服務(wù)和可擴(kuò)展點(diǎn),同時(shí)也建立了一些約束,開(kāi)發(fā)人員在此基礎(chǔ)上進(jìn)行特定業(yè)務(wù)功能的定制開(kāi)發(fā)。例如,在J2EE企業(yè)級(jí)應(yīng)用程序開(kāi)發(fā)中,經(jīng)常使用struts+spring+hibernate來(lái)搭建一個(gè)基本的項(xiàng)目結(jié)構(gòu)。軟件架構(gòu)決定了軟件系統(tǒng)如何劃分,在一定程度上描述了被劃分的各個(gè)部分之間的靜態(tài)、動(dòng)態(tài)關(guān)系。軟件架構(gòu)的決策體現(xiàn)在軟件系統(tǒng)的框架中。7.2構(gòu)架設(shè)計(jì)(參見(jiàn)P220)構(gòu)架設(shè)計(jì)的目的是要勾畫(huà)出系統(tǒng)的總體結(jié)構(gòu),這項(xiàng)工作由經(jīng)驗(yàn)豐富的構(gòu)架設(shè)計(jì)師主持完成。該活動(dòng)以用例模型、分析模型為輸入。輸出:物理結(jié)構(gòu)、子系統(tǒng)及其接口、概要的設(shè)計(jì)類。設(shè)計(jì)模式所謂Pattern就是一種規(guī)則,或是一種模型,或是一種習(xí)慣。Pattern這個(gè)東西到處都是,并不只有技術(shù)圏子里才有。比如:詩(shī)歌總是抒情的,論文總是死板的,講稿總是高談的,漫畫(huà)總是幽默的,……經(jīng)濟(jì)領(lǐng)域:溫州模式,電商的商業(yè)模式等設(shè)計(jì)模式軟件設(shè)計(jì)模式每種模式解決一種特定問(wèn)題設(shè)計(jì)模式并不是只在OO中獨(dú)有理解每種模式的意圖,適用的場(chǎng)景,使用的限制參考P209面向?qū)ο箢愒O(shè)計(jì)原則可參見(jiàn)P2091.開(kāi)閉原則(OpenClosedPrinciple)簡(jiǎn)稱OCP在擴(kuò)展性方面是開(kāi)放的,而對(duì)內(nèi)部的更改應(yīng)該是封閉的(外部看不到)。因此在進(jìn)行面向?qū)ο笤O(shè)計(jì)時(shí)要盡量考慮接口封裝機(jī)制、抽象機(jī)制和多態(tài)技術(shù)。老式收音機(jī)旋鈕式收音機(jī)按鍵式收音機(jī)問(wèn)題描述:開(kāi)關(guān)、調(diào)臺(tái)、音量不同收音機(jī),實(shí)現(xiàn)的細(xì)節(jié)不同處理方式:用一個(gè)類來(lái)處理各種不同類型收音機(jī)的操作方式定義一個(gè)接口類,提供開(kāi)機(jī)、關(guān)機(jī)、增加頻率、降低頻率、增加音量、降低音量這六個(gè)抽象方法。不同的收音機(jī)繼承并實(shí)現(xiàn)這六個(gè)抽象方法。點(diǎn)評(píng):前者要新增一中收音機(jī)的控制方式時(shí),需要整個(gè)程序都讀一遍,整體的修改;后者新增收音機(jī)類型不會(huì)影響其它原有的收音機(jī)類型,收音機(jī)類型擴(kuò)展極為方便。已存在的收音機(jī)類型在修改其操作方法時(shí)也不會(huì)影響到其它類型的收音機(jī)。設(shè)計(jì)的收音機(jī)處理軟件類圖2.替換原則(LiskovSubstitutionPrinciple)簡(jiǎn)稱LSP子類可以替換父類,并可以出現(xiàn)在父類能夠出現(xiàn)的任何地方。圓形—子類橢圓—父類運(yùn)用替換原則時(shí),應(yīng)該盡量把類B設(shè)計(jì)為抽象類或者接口類,讓C類繼承B,并實(shí)現(xiàn)操作A和操作B。運(yùn)行時(shí),類C實(shí)例替換B,這樣即可進(jìn)行新類的擴(kuò)展,同時(shí)無(wú)須對(duì)類A進(jìn)行修改。3.依賴原則(DependencyInversionPrinciple)簡(jiǎn)稱DIP。類之間的依賴關(guān)系盡量依賴接口和抽象類,不要依賴于具體類(具體類只負(fù)責(zé)相關(guān)業(yè)務(wù)的實(shí)現(xiàn))修改具體類不影響上層的抽象類。4.單一職責(zé)原則(SingleResponsibilityPrinciple)簡(jiǎn)稱為SRP。一個(gè)類應(yīng)該有且僅有
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 家庭教育中的睡眠質(zhì)量與健康
- 2025年度三人區(qū)塊鏈技術(shù)應(yīng)用合作協(xié)議范本3篇
- 2025年度新能源車(chē)輛推廣與應(yīng)用連帶責(zé)任擔(dān)保合同3篇
- 小學(xué)數(shù)學(xué)教學(xué)評(píng)價(jià)體系與教研能力提高
- 心理健康教育在家庭教育中的多元融合與創(chuàng)新應(yīng)用研究報(bào)告
- 學(xué)校實(shí)驗(yàn)室建設(shè)的政策支持與資金保障
- 家長(zhǎng)會(huì)報(bào)告制作攻略培養(yǎng)孩子的社會(huì)責(zé)任感
- 探索安全意識(shí)教育在高校教育的角色
- 商業(yè)大廈LED節(jié)能照明系統(tǒng)建設(shè)方案
- 2025年度環(huán)保檢測(cè)試劑批發(fā)代理協(xié)議3篇
- (最新)信息科技風(fēng)險(xiǎn)管理辦法
- 大學(xué)英語(yǔ)教師試講20分鐘范例
- 雨雪天氣安全教育PPT
- 圍手術(shù)期血糖管理專家共識(shí)
- 環(huán)境社會(huì)學(xué)整本書(shū)課件完整版電子教案全套課件最全教學(xué)教程ppt(最新)
- 采購(gòu)管理實(shí)務(wù)全套教學(xué)課件
- 魯教版高中地理必修一第一學(xué)期總復(fù)習(xí)課件(共141張PPT)
- 酒店項(xiàng)目投資分析報(bào)告可行性報(bào)告
- 煙花爆竹零售店(點(diǎn))安全技術(shù)規(guī)范.ppt課件
- 視頻監(jiān)控臺(tái)賬參考模板
- 浦江郊野公園任務(wù)書(shū)
評(píng)論
0/150
提交評(píng)論