版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章軟件設(shè)計(jì)模式基礎(chǔ)內(nèi)容簡(jiǎn)介?本章教學(xué)目標(biāo):
了解軟件設(shè)計(jì)模式的產(chǎn)生背景;
掌握軟件設(shè)計(jì)模式的概念、意義和基本要素;
明白GoF的23種設(shè)計(jì)模式的分類與特點(diǎn);
理解UML類之間的關(guān)系,并學(xué)會(huì)類圖的畫法;
正確理解面向?qū)ο蟮钠叻N設(shè)計(jì)原則。?本章價(jià)值引領(lǐng):
通過(guò)23種設(shè)計(jì)模式的簡(jiǎn)單介紹,讓學(xué)生明白提高自己的科學(xué)精神和科學(xué)意識(shí)的重要性;通過(guò)6種類關(guān)系的介紹,讓學(xué)生理解社會(huì)主義核心價(jià)值,增強(qiáng)學(xué)生科技強(qiáng)國(guó)的責(zé)任感與使命感;通過(guò)7種設(shè)計(jì)原則的介紹,培養(yǎng)學(xué)生遵守軟件工程規(guī)范,提高自己的職業(yè)素養(yǎng)和工匠精神。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.1軟件設(shè)計(jì)模式概述1.1.1軟件設(shè)計(jì)模式的產(chǎn)生背景
“設(shè)計(jì)模式”這個(gè)術(shù)語(yǔ)最初并不是出現(xiàn)在軟件設(shè)計(jì)中,而是被用于建筑領(lǐng)域的設(shè)計(jì)中。1977年,美國(guó)著名建筑大師、加利福尼亞大學(xué)伯克利分校環(huán)境結(jié)構(gòu)中心主任ChristopherAlexander(克里斯托弗?亞歷山大)在他的著作《建筑模式語(yǔ)言:城鎮(zhèn)、建筑、構(gòu)造》中描述了一些常見(jiàn)的建筑設(shè)計(jì)問(wèn)題,并提出了253種關(guān)于城鎮(zhèn)、鄰里、住宅、花園和房間等進(jìn)行設(shè)計(jì)的基本模式。
1987年,肯特·貝克和沃德·坎寧安首先將克里斯托佛·亞歷山大的模式思想應(yīng)用在Smalltalk中的圖形用戶接口的生成中。直到1990年,軟件工程界才開始研討設(shè)計(jì)模式的話題,后來(lái)召開了多次關(guān)于設(shè)計(jì)模式的研討會(huì)。直到1995年,ErichGamma,RichardHelm,RalphJohnson,JohnVlissides等四位作者合作出版了《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》一書,在此書中共收錄了23個(gè)設(shè)計(jì)模式,這是設(shè)計(jì)模式領(lǐng)域里程碑的事件,導(dǎo)致了軟件設(shè)計(jì)模式的突破。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱ISBN:978-7-115-47788-0人民郵電出版社(和)1.1軟件設(shè)計(jì)模式概述(續(xù))1.1.2軟件設(shè)計(jì)模式的概念與意義
1.什么是軟件設(shè)計(jì)模式?軟件設(shè)計(jì)模式(SoftwareDesignpattern),又稱設(shè)計(jì)模式,是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。
2.學(xué)習(xí)設(shè)計(jì)模式的意義⑴可以提高程序員的思維能力、編程能力和設(shè)計(jì)能力。⑵使程序設(shè)計(jì)更加標(biāo)準(zhǔn)化、代碼編制更加工程化,使軟件開發(fā)效率大大提高,從而縮短軟件的開發(fā)周期。⑶使設(shè)計(jì)的代碼可重用性高、可讀性強(qiáng)、可靠性高、靈活性好、可維護(hù)性強(qiáng)。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱ISBN:978-7-115-47788-0人民郵電出版社(和)1.1軟件設(shè)計(jì)模式概述(續(xù))1.1.3軟件設(shè)計(jì)模式的基本要素
其基本要素有:模式名稱、別名、動(dòng)機(jī)、問(wèn)題、解決方案、結(jié)構(gòu)、模式角色、合作關(guān)系、實(shí)現(xiàn)方法、效果、適用性、已知應(yīng)用、例程、模式擴(kuò)展和相關(guān)模式等,其中最關(guān)鍵的元素包括以下四個(gè)主要部分:
1.模式名稱與特點(diǎn)2.問(wèn)題與解決方案3.實(shí)現(xiàn)方法與效果4.應(yīng)用環(huán)境與擴(kuò)展軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱ISBN:978-7-115-47788-0人民郵電出版社(和)1.1軟件設(shè)計(jì)模式概述(續(xù))1.1.4GoF的23種設(shè)計(jì)模式簡(jiǎn)介設(shè)計(jì)模式有兩種分類方法,即:根據(jù)目的分和根據(jù)作用的范圍分。
1.根據(jù)目的來(lái)分⑴創(chuàng)建型模式:用于描述“怎樣創(chuàng)建對(duì)象”,它的主要特點(diǎn)是“將對(duì)象的創(chuàng)建與使用分離”。GoF中提供了5種創(chuàng)建型模式。⑵結(jié)構(gòu)型模式:用于描述如何將類或?qū)ο蟀茨撤N布局組成更大的結(jié)構(gòu),GoF中提供了7種結(jié)構(gòu)型模式。⑶行為型模式:用于描述類或?qū)ο笾g怎樣相互協(xié)作共同完成單個(gè)對(duì)象都無(wú)法單獨(dú)完成的任務(wù),以及怎樣分配職責(zé)。GoF中提供了11種行為型模式。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱ISBN:978-7-115-47788-0人民郵電出版社(和)1.1軟件設(shè)計(jì)模式概述(續(xù))1.1.4GoF的23種設(shè)計(jì)模式簡(jiǎn)介(續(xù))
2.根據(jù)作用范圍來(lái)分⑴類模式:用于處理類與子類之間的繼承關(guān)系,這些關(guān)系是靜態(tài)的。⑵對(duì)象模式:用于處理對(duì)象之間的組合或聚合關(guān)系,具動(dòng)態(tài)性。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱ISBN:978-7-115-47788-0人民郵電出版社(和)1.1軟件設(shè)計(jì)模式概述(續(xù))軟件設(shè)計(jì)模式(Java版)(ISDN:9787564740634)、作者:程細(xì)柱人民郵電出版社()ISBN:978-7-115-47788-01.1軟件設(shè)計(jì)模式概述(續(xù))1.1.4GoF的23種設(shè)計(jì)模式簡(jiǎn)介(續(xù))
3.GoF的23種設(shè)計(jì)模式的功能?單例(Singleton)模式:某個(gè)類只能生成一個(gè)實(shí)例,該類提供了一個(gè)全局訪問(wèn)點(diǎn)供外部獲取該實(shí)例,其拓展是有限多例模式。?原型(Prototype)模式:將一個(gè)對(duì)象作為原型,通過(guò)對(duì)其進(jìn)行復(fù)制而克隆出多個(gè)和原型類似的新實(shí)例。?工廠方法(FactoryMethod)模式:定義一個(gè)用于創(chuàng)建產(chǎn)品的接口,由子類決定生產(chǎn)什么產(chǎn)品。?抽象工廠(AbstractFactory)模式:提供一個(gè)創(chuàng)建產(chǎn)品族的接口,其每個(gè)子類可以生產(chǎn)一系列相關(guān)的產(chǎn)品。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱ISBN:978-7-115-47788-0人民郵電出版社(和)1.1軟件設(shè)計(jì)模式概述(續(xù))1.1.4GoF的23種設(shè)計(jì)模式簡(jiǎn)介(續(xù))
3.GoF的23種設(shè)計(jì)模式的功能(續(xù))?建造者(Builder)模式:將一個(gè)復(fù)雜對(duì)象分解成多個(gè)相對(duì)簡(jiǎn)單的部分,然后根據(jù)不同需要分別創(chuàng)建它們,最后構(gòu)建成該復(fù)雜對(duì)象。?代理(Proxy)模式:為某對(duì)象提供一種代理以控制對(duì)該對(duì)象的訪問(wèn)。即客戶端通過(guò)代理間接地訪問(wèn)該對(duì)象,從而限制、增強(qiáng)或修改該對(duì)象的一些特性。?適配器(Adapter)模式:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,使得原本由于接口不兼容而不能一起工作的那些類能一起工作。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱ISBN:978-7-115-47788-0人民郵電出版社(和)1.1軟件設(shè)計(jì)模式概述(續(xù))1.1.4GoF的23種設(shè)計(jì)模式簡(jiǎn)介(續(xù))
3.GoF的23種設(shè)計(jì)模式的功能(續(xù))?橋接(Bridge)模式:將抽象與實(shí)現(xiàn)分離,使他們可以獨(dú)立的變化。它是用組合關(guān)系代替繼承關(guān)系來(lái)實(shí)現(xiàn),從而降低了抽象和實(shí)現(xiàn)這2個(gè)可變維度的耦合度。?裝飾(Decorator)模式:動(dòng)態(tài)的給對(duì)象增加一些職責(zé),即增加其額外的功能。?外觀(Facade)模式:為多個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)一致的接口,使這些子系統(tǒng)更加容易被訪問(wèn)。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話學(xué)資源網(wǎng)址:/book/details/84021.1軟件設(shè)計(jì)模式概述(續(xù))1.1.4GoF的23種設(shè)計(jì)模式簡(jiǎn)介(續(xù))
3.GoF的23種設(shè)計(jì)模式的功能(續(xù))?享元(Flyweight)模式:運(yùn)用共享技術(shù)來(lái)有效地支持大量細(xì)粒度對(duì)象的復(fù)用。?組合(Composite)模式:將對(duì)象組合成樹狀層次結(jié)構(gòu),使用戶對(duì)單個(gè)對(duì)象和組合對(duì)象具有一致的訪問(wèn)性。?模板方法(TemplateMethod)模式:定義一個(gè)操作中的算法骨架,而將算法的一些步驟延遲到子類中,使得子類可以不改變?cè)撍惴ńY(jié)構(gòu)的情況下重定義該算法的某些特定步驟。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話學(xué)資源網(wǎng)址:/book/details/84021.1軟件設(shè)計(jì)模式概述(續(xù))1.1.4GoF的23種設(shè)計(jì)模式簡(jiǎn)介(續(xù))
3.GoF的23種設(shè)計(jì)模式的功能(續(xù))?策略(Strategy)模式:定義了一系列算法,并將每個(gè)算法封裝起來(lái),使他們可以相互替換,且算法的改變不會(huì)影響到使用算法的客戶。?命令(Command)模式:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,使發(fā)出請(qǐng)求的責(zé)任和執(zhí)行請(qǐng)求的責(zé)任分割開。?職責(zé)鏈(ChainofResponsibility)模式:把請(qǐng)求從鏈中的一個(gè)對(duì)象傳到下一個(gè)對(duì)象,直到請(qǐng)求被響應(yīng)為止。通過(guò)這種方式去除對(duì)象之間的耦合。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話學(xué)資源網(wǎng)址:/book/details/84021.1軟件設(shè)計(jì)模式概述(續(xù))1.1.4GoF的23種設(shè)計(jì)模式簡(jiǎn)介(續(xù))
3.GoF的23種設(shè)計(jì)模式的功能(續(xù))?狀態(tài)(State)模式:允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)發(fā)生改變時(shí)改變其行為能力。?觀察者(Observer)模式:多個(gè)對(duì)象間存在一對(duì)多關(guān)系,當(dāng)一個(gè)對(duì)象發(fā)生改變時(shí),把這種改變通知給其它多個(gè)對(duì)象,從而影響其它對(duì)象的行為。?中介者(Mediator)模式:定義一個(gè)中介對(duì)象來(lái)簡(jiǎn)化原有對(duì)象之間的交互關(guān)系,降低系統(tǒng)中對(duì)象間的耦合度,使原有對(duì)象之間不必相互了解。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.1軟件設(shè)計(jì)模式概述(續(xù))1.1.4GoF的23種設(shè)計(jì)模式簡(jiǎn)介(續(xù))
3.GoF的23種設(shè)計(jì)模式的功能(續(xù))?迭代器(Iterator)模式:提供一種方法來(lái)順序訪問(wèn)聚合對(duì)象中的一系列數(shù)據(jù),而不暴露聚合對(duì)象的內(nèi)部表示。?訪問(wèn)者(Visitor)模式:在不改變集合元素的前提下,為一個(gè)集合中的每個(gè)元素提供多種訪問(wèn)方式,即每個(gè)元素有多個(gè)訪問(wèn)者對(duì)象訪問(wèn)。?備忘錄(Memento)模式:在不破壞封裝性的前提下,獲取并保存一個(gè)對(duì)象的內(nèi)部狀態(tài),以便以后恢復(fù)它。?解釋器(Interpreter)模式:提供如何定義語(yǔ)言的文法,以及對(duì)語(yǔ)言句子的解釋方法,即解釋器。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.2UML中的類圖1.2.1統(tǒng)一建模語(yǔ)言簡(jiǎn)介
?統(tǒng)一建模語(yǔ)言(UnifiedModelingLanguage,簡(jiǎn)稱:UML):是用來(lái)設(shè)計(jì)軟件藍(lán)圖的可視化建模語(yǔ)言,1997年被國(guó)際對(duì)象組織OMG采納為為面向?qū)ο蟮慕UZ(yǔ)言的國(guó)際標(biāo)準(zhǔn)。?它的特點(diǎn):是簡(jiǎn)單、統(tǒng)一、圖形化、能表達(dá)軟件設(shè)計(jì)中的動(dòng)態(tài)與靜態(tài)信息。?UML從目標(biāo)系統(tǒng)的不同角度出發(fā),定義了:用例圖、類圖、對(duì)象圖、狀態(tài)圖、活動(dòng)圖、序列圖、協(xié)作圖、構(gòu)件圖、部署圖等9種圖。注:本教材主要介紹軟件設(shè)計(jì)模式中經(jīng)常用到的類圖,以及類之間的關(guān)系。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.2UML中的類圖(續(xù))1.2.2類、接口和類圖
1.類(Class)類是指具有相同屬性、方法和關(guān)系的對(duì)象的抽象,它具有封裝性、繼承性和多態(tài)性等三大特性。在UML中類包含:⑴類名(Name)是一個(gè)字符串,如:Student。⑵屬性(Attribute)是指類的特性,即類的成員變量。格式:
[可見(jiàn)性]屬性名:類型[=缺省值]注意:“可見(jiàn)性”表示該屬性對(duì)于類外的元素而言是否可見(jiàn),在類圖中分別用符號(hào)+、-、#、~表示。如:-name:String⑶操作(Operations)是類的成員方法。格式:
[可見(jiàn)性]名稱(參數(shù)列表)[:返回類型]軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.2UML中的類圖(續(xù))下圖是學(xué)生類的UML表示:軟件設(shè)計(jì)模式(Java版)(ISDN:9787564740634)、作者:程細(xì)柱人民郵電出版社()銷售電話:010-810552561.2UML中的類圖(續(xù))1.2.2類、接口和類圖
2.接口(Interface)接口是一種特殊的類,它包含抽象操作,但不包含屬性。它描述了類或組件對(duì)外可見(jiàn)的動(dòng)作。下圖是圖形類接口的UML表示:軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.2UML中的類圖(續(xù))1.2.2類、接口和類圖
3.類圖(ClassDiagram)類圖是用來(lái)顯示系統(tǒng)中的類、接口、協(xié)作以及它們之間的靜態(tài)結(jié)構(gòu)和關(guān)系的一種靜態(tài)模型。右邊是“計(jì)算長(zhǎng)方形和圓形的周長(zhǎng)與面積”的類圖:軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.2UML中的類圖(續(xù))1.2.3類之間的關(guān)系
1.依賴(Dependency)關(guān)系依賴關(guān)系是一種使用關(guān)系,它是對(duì)象之間耦合度最弱的一種關(guān)聯(lián)方式。在代碼中,某個(gè)類的方法通過(guò)局部變量、方法的參數(shù)或者對(duì)靜態(tài)方法的調(diào)用來(lái)訪問(wèn)另一個(gè)類(被依賴類)中的某些方法來(lái)完成一些職責(zé)。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.2UML中的類圖(續(xù))1.2.3類之間的關(guān)系
2.關(guān)聯(lián)(Association)關(guān)系關(guān)聯(lián)關(guān)系是對(duì)象之間的一種引用關(guān)系,用于表示一類對(duì)象與另一類對(duì)象之間的聯(lián)系,如老師和學(xué)生、師傅和徒弟、丈夫和妻子等。關(guān)聯(lián)關(guān)系分為一般關(guān)聯(lián)關(guān)系、聚合關(guān)系和組合關(guān)系,我們先介紹一般關(guān)聯(lián)。關(guān)聯(lián)可以是雙向的,也可以是單向的。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.2UML中的類圖(續(xù))1.2.3類之間的關(guān)系
3.聚合(Aggregation)關(guān)系聚合關(guān)系是強(qiáng)關(guān)聯(lián)關(guān)系,是整體和部分之間的關(guān)系,是has-a的關(guān)系。聚合關(guān)系也是通過(guò)成員對(duì)象來(lái)實(shí)現(xiàn)的,其中成員對(duì)象是整體對(duì)象的一部分,但是成員對(duì)象可以脫離整體對(duì)象而獨(dú)立存在。例如,學(xué)校與老師的關(guān)系,學(xué)校包含老師,但如果學(xué)校停辦了,老師依然存在。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.2UML中的類圖(續(xù))1.2.3類之間的關(guān)系
4.組合(Composition)關(guān)系組合關(guān)系也表示類之間的整體與部分的關(guān)系,但它是一種更強(qiáng)烈的聚合關(guān)系,是contains-a關(guān)系。整體對(duì)象可以控制部分對(duì)象的生命周期,一旦整體對(duì)象不存在,部分對(duì)象也將不存在,部分對(duì)象不能脫離整體對(duì)象而存在。例如,頭和嘴的關(guān)系,沒(méi)有了頭,嘴也就不存在了。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.2UML中的類圖(續(xù))1.2.3類之間的關(guān)系
5.泛化(Generalization)關(guān)系泛化關(guān)系是對(duì)象之間耦合度最大的一種關(guān)系,表示一般與特殊的關(guān)系,是父類與子類之間的關(guān)系,是一種繼承關(guān)系,是is-a的關(guān)系。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.2UML中的類圖(續(xù))1.2.3類之間的關(guān)系
6.實(shí)現(xiàn)(Realization)關(guān)系實(shí)現(xiàn)關(guān)系是接口與實(shí)現(xiàn)類之間的關(guān)系。在UML類圖中,實(shí)現(xiàn)關(guān)系使用帶空心三角箭頭的虛線來(lái)表示,箭頭從實(shí)現(xiàn)類指向接口。例如,汽車和船實(shí)現(xiàn)了交通工具,其類圖如下:軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則1.3.1開閉原則
1.開閉原則的定義開閉原則(OCP):軟件實(shí)體應(yīng)當(dāng)對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。勃蘭特·梅耶(BertrandMeyer)在1988年的著作《面向?qū)ο筌浖?gòu)造》中提出,這里的軟件實(shí)體包括以下幾個(gè)部分:1)項(xiàng)目中劃分出的模塊;2)類與接口;3)方法。
2.開閉原則的重要性⑴對(duì)軟件測(cè)試的影響,軟件測(cè)試時(shí)只需要對(duì)擴(kuò)展的代碼進(jìn)行測(cè)試就。⑵可以提高代碼的可復(fù)用性。⑶可以提高軟件的可維護(hù)性,易于擴(kuò)展和維護(hù)。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))3.開閉原則的實(shí)現(xiàn)方法可以通過(guò)“抽象約束、封裝變化”來(lái)實(shí)現(xiàn)開閉原則,即通過(guò)接口或者抽象類為軟件實(shí)體定義一個(gè)相對(duì)穩(wěn)定的抽象層,而將相同的可變因素封裝在相同的具體實(shí)現(xiàn)類中。
【例1.1】操作系統(tǒng)的桌面主題設(shè)計(jì)實(shí)例(代碼略)。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))1.3.2里氏替換原則
1.里氏替換原則的定義里氏替換原則(LSP):繼承必須確保超類所擁有的性質(zhì)在子類中仍然成立。由麻省理工學(xué)院計(jì)算機(jī)科學(xué)實(shí)驗(yàn)室的Liskov女士在1987年的OOPSLA(面向?qū)ο蠹夹g(shù)的高峰會(huì)議)上發(fā)表的一篇文章《數(shù)據(jù)抽象和層次》里面提出來(lái)的。
2.里氏替換原則的重要性⑴里氏替換原則是實(shí)現(xiàn)開閉原則的重要方式之一。⑵它克服了繼承中重寫父類造成的可復(fù)用性變差的缺點(diǎn)。⑶它是動(dòng)作正確性的保證。即類的擴(kuò)展不會(huì)給已有的系統(tǒng)引入新的錯(cuò)誤,降低了代碼出錯(cuò)的可能性。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))3.里氏替換原則的實(shí)現(xiàn)方法
子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能。
【例1.2】里氏替換原則在“幾維鳥不是鳥”實(shí)例中的應(yīng)用。
分析:鳥一般都會(huì)飛行,它們的飛行速度一般在每小時(shí)30至60千米之間。但是新西蘭的“幾維鳥”,由于翅膀退化,因此無(wú)法飛行。//程序代碼見(jiàn)附件軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)說(shuō)明:以上類圖違背了“里氏替換原則”,要改。1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))以上程序運(yùn)行錯(cuò)誤的原因是:幾維鳥類重寫了鳥類的setSpeed(doublespeed)方法,這違背了里氏替換原則。正確的做法是:取消幾維鳥原來(lái)的繼承關(guān)系,定義鳥和幾維鳥的更一般的父類,如動(dòng)物類,它們都有奔跑的能力。右邊是其類圖://修改代碼見(jiàn)附件軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))1.3.3依賴倒置原則
1.依賴倒置原則的定義依賴倒置原則(DIP)的含義是:高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象。其核心思想是:要面向接口編程,不要面向?qū)崿F(xiàn)編程。是ObjectMentor公司總裁RobertC.Martin于1996年在C++Report上發(fā)表的文章中提出的。
2.依賴倒置原則的重要性⑴依賴倒置原則可以降低類間的耦合性。⑵依賴倒置原則可以提高系統(tǒng)的穩(wěn)定性。⑶依賴倒置原則可以減少并行開發(fā)引起的風(fēng)險(xiǎn)。⑷依賴倒置原則可以提高代碼的可讀性和可維護(hù)性。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))3.依賴倒置原則的實(shí)現(xiàn)方法我們?cè)趯?shí)際編程中只要遵循以下四點(diǎn),就能在項(xiàng)目中滿足這個(gè)規(guī)則:
⑴每個(gè)類盡量提供接口或抽象類,或者兩者都具備。⑵變量的聲明類型盡量是接口或者是抽象類。⑶任何類都不應(yīng)該從具體類派生。⑷使用繼承時(shí)盡量遵循里氏替換原則。
【例1.3】依賴倒置原則在農(nóng)村土特產(chǎn)售賣程序中的應(yīng)用。
分析:如顧客類的shopping(ShaoguanShopshop)方法只訪問(wèn)韶關(guān)網(wǎng)店,如果該顧客想從另外一家商店(如:婺源網(wǎng)店WuyuanShop)購(gòu)物,就要修改該方法的參數(shù)類型,這違背了“依賴倒置”原則。解決方法是:定義一個(gè)商店接口Shop,顧客類面向該接口編程,其類圖如下。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))下面是顧客購(gòu)物程序的類圖,其程序源代碼見(jiàn)附件。軟件設(shè)計(jì)模式(Java版)(ISDN:9787564740634)、作者:程細(xì)柱人民郵電出版社()銷售電話:010-810552561.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))1.3.4單一職責(zé)原則
1.單一職責(zé)原則的定義單一職責(zé)原則(SRP)規(guī)定一個(gè)類應(yīng)該有且僅有一個(gè)引起它變化的原因,否則類應(yīng)該被拆分。由羅伯特·C·馬丁(RobertC.Martin)于《敏捷軟件開發(fā):原則、模式和實(shí)踐》一書中給出的。
2.單一職責(zé)原則的重要性⑴降低類的復(fù)雜度。⑵提高類的可讀性。復(fù)雜性降低,自然其可讀性會(huì)提高。⑶提高系統(tǒng)的可維護(hù)性。可讀性提高,那自然更容易維護(hù)了。⑷變更引起的風(fēng)險(xiǎn)降低。變更是必然的,如果單一職責(zé)原則遵守得好,當(dāng)修改一個(gè)功能時(shí),可以顯著降低對(duì)其他功能的影響。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))3.單一職責(zé)原則的實(shí)現(xiàn)方法單一職責(zé)原則是最簡(jiǎn)單但又最難運(yùn)用的原則,需要設(shè)計(jì)人員發(fā)現(xiàn)類的不同職責(zé)并將其分離,再封裝到不同的類或模塊中。而發(fā)現(xiàn)類的多重職責(zé)需要設(shè)計(jì)人員具有較強(qiáng)的分析設(shè)計(jì)能力和相關(guān)重構(gòu)經(jīng)驗(yàn)。
【例1.4】大學(xué)的學(xué)生指導(dǎo)工作管理程序設(shè)計(jì)。
分析:大學(xué)學(xué)生工作主要包括學(xué)生生活輔導(dǎo)和學(xué)生學(xué)業(yè)指導(dǎo)兩個(gè)方面的工作,其中生活輔導(dǎo)主要包括班委建設(shè)、出勤統(tǒng)計(jì)、心理輔導(dǎo)、費(fèi)用催繳、班級(jí)管理等工作,學(xué)業(yè)指導(dǎo)主要包括專業(yè)引導(dǎo)、學(xué)習(xí)輔導(dǎo)、科研指導(dǎo)、學(xué)習(xí)總結(jié)等工作。如果將這些工作交給一位老師負(fù)責(zé)顯然不合理,正確的做法是生活輔導(dǎo)由輔導(dǎo)員負(fù)責(zé),學(xué)業(yè)指導(dǎo)由學(xué)業(yè)導(dǎo)師負(fù)責(zé),其類圖如下。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))大學(xué)學(xué)生工作管理程序的類圖如下:軟件設(shè)計(jì)模式(Java版)(ISDN:9787564740634)、作者:程細(xì)柱人民郵電出版社()銷售電話:010-810552561.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))1.3.5接口隔離原則
1.接口隔離原則的定義接口隔離原則(ISP)含義是:客戶端不應(yīng)該被迫依賴于它不使用的方法。2002年羅伯特·C·馬丁在《敏捷軟件開發(fā):原則、模式和實(shí)踐》一書中提出,它要求程序員盡量將臃腫龐大的接口拆分成更小的和更具體的接口,讓接口中只包含客戶感興趣的方法。
2.接口隔離原則的重要性⑴將臃腫龐大的接口分解,可以預(yù)防外來(lái)變更的擴(kuò)散。⑵接口隔離提高了系統(tǒng)的內(nèi)聚性,減少了對(duì)外交互。⑶如果接口的粒度大小定義合理,能夠保證系統(tǒng)的穩(wěn)定性。⑷使用多個(gè)專門的接口還能夠體現(xiàn)對(duì)象的層次。⑸能減少項(xiàng)目工程中的代碼冗余。過(guò)大的接口里面通常放置許多不用的方法。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))3.接口隔離原則的實(shí)現(xiàn)方法在具體應(yīng)用接口隔離原則時(shí),應(yīng)該根據(jù)以下幾個(gè)規(guī)則來(lái)衡量:
⑴接口盡量小,但是要有限度。⑵只提供調(diào)用者需要的方法,屏蔽不需要的方法。⑶了解環(huán)境,拒絕盲從。⑷提高內(nèi)聚,減少對(duì)外交互。
【例1.5】學(xué)生成績(jī)管理程序。
分析:學(xué)生成績(jī)管理程序一般包含插入成績(jī)、刪除成績(jī)、修改成績(jī)、計(jì)算總分、計(jì)算均分、打印成績(jī)信息、查詢成績(jī)信息等功能,如果將這些功能全部放到一個(gè)接口中顯然不太合理,正確的做法是將它們分別放在輸入模塊、統(tǒng)計(jì)模塊和打印模塊等3個(gè)模塊中,其類圖如下。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))3.接口隔離原則的實(shí)現(xiàn)方法右邊是學(xué)生成績(jī)管理程序的類圖://其程序代碼見(jiàn)附件軟件設(shè)計(jì)模式(Java版)(ISDN:9787564740634)、作者:程細(xì)柱人民郵電出版社()銷售電話:010-810552561.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))1.3.6迪米特法則
1.迪米特法則的定義迪米特法則(LoD)又叫作最少知識(shí)原則(LKP),其定義是:只與你的直接朋友交談,不跟“陌生人”說(shuō)話。1987年美國(guó)東北大學(xué)的IanHolland提出,后來(lái)又因?yàn)樵诮?jīng)典著作《程序員修煉之道》而廣為人知。迪米特法則中的“朋友”是指:當(dāng)前對(duì)象本身、當(dāng)前對(duì)象的成員對(duì)象、當(dāng)前對(duì)象所創(chuàng)建的對(duì)象、當(dāng)前對(duì)象的方法參數(shù)等,這些對(duì)象同當(dāng)前對(duì)象存在關(guān)聯(lián)、聚合或組合關(guān)系,可以直接訪問(wèn)這些對(duì)象的方法。
2.迪米特法則的重要性⑴降低了類之間的耦合度,提高了模塊的相對(duì)獨(dú)立性。⑵由于耦合度降低,從而提高了類的可復(fù)用率和系統(tǒng)的擴(kuò)展性。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))3.迪米特法則的實(shí)現(xiàn)方法在運(yùn)用迪米特法則時(shí)要注意以下六點(diǎn):
⑴在類的劃分上,應(yīng)該創(chuàng)建弱耦合的類。⑵在類的結(jié)構(gòu)設(shè)計(jì)上,盡量降低類成員的訪問(wèn)權(quán)限。⑶在類的設(shè)計(jì)上,優(yōu)先考慮將一個(gè)類設(shè)置成不變類。⑷在對(duì)其他類的引用上,將引用其它對(duì)象的次數(shù)降到最低。⑸不暴露類的屬性成員,而應(yīng)該提供相應(yīng)的訪問(wèn)器(set和get方法)。⑹謹(jǐn)慎使用序列化(Serializable)功能。軟件設(shè)計(jì)模式(Java版)、作者:程細(xì)柱銷售電話民郵電出版社(和)1.3面向?qū)ο蟮脑O(shè)計(jì)原則(續(xù))
【例1.6】迪米特法則在科學(xué)家的社交活動(dòng)中的應(yīng)用。
分析:科學(xué)家由于全身心投入科研工作,所以許多社交活動(dòng)由研究助理負(fù)責(zé)聯(lián)系和安排
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 46758-2025紙漿硫酸鹽法蒸煮液總堿、活性堿和有效堿的測(cè)定(電位滴定法)
- 2025年大學(xué)農(nóng)學(xué)(作物研究)試題及答案
- 2025年大學(xué)安全教育(人身安全防護(hù))試題及答案
- 2025年中職(物聯(lián)網(wǎng)技術(shù)應(yīng)用)傳感器應(yīng)用試題及解析
- 2025年大學(xué)本科一年級(jí)(臨床醫(yī)學(xué))人體解剖基礎(chǔ)測(cè)試題及答案
- 2025年高職(園林管理)園林景區(qū)運(yùn)營(yíng)管理綜合測(cè)試題及答案
- 2025年大學(xué)大一(康復(fù)治療學(xué))康復(fù)心理學(xué)基礎(chǔ)階段測(cè)試題及答案
- 2025年大學(xué)工業(yè)工程(工業(yè)4.0研發(fā))試題及答案
- 2025年大學(xué)森林消防(森林滅火技術(shù))試題及答案
- 2025年中職(學(xué)前教育)幼兒教育學(xué)階段測(cè)試題及答案
- ISO27001信息安全管理體系培訓(xùn)資料
- 四年級(jí)語(yǔ)文國(guó)測(cè)模擬試題 (1)附有答案
- 2024-2030年墨西哥數(shù)碼打印機(jī)墨水市場(chǎng)前景分析
- 固定式、車載式、便攜式反無(wú)人機(jī)實(shí)施方案
- 餐飲投資項(xiàng)目計(jì)劃書
- 廣州小學(xué)英語(yǔ)單詞分類識(shí)記表-注音版
- 男朋友打游戲申請(qǐng)表
- 危險(xiǎn)化學(xué)品經(jīng)營(yíng)許可證變更申請(qǐng)書(附件2)
- 職業(yè)培訓(xùn)師的8堂私房課:修訂升級(jí)版
- 18621客運(yùn)服務(wù)禮儀題庫(kù)(114道)
- 多園區(qū)管理模式下的機(jī)制建設(shè)
評(píng)論
0/150
提交評(píng)論