国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 課堂 > 技術(shù)開(kāi)發(fā) > 正文

面向?qū)ο笤O(shè)計(jì)的11原則

2023-06-23 14:40:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

面向?qū)ο笤O(shè)計(jì)是什么?都包含了哪些內(nèi)容?它所帶來(lái)的好處是什么?需要你為之付出些什么?在如今這個(gè)年代,問(wèn)這些問(wèn)題似乎顯得很愚蠢,因?yàn)檫@年頭幾乎每位軟件開(kāi)發(fā)人員都知道如何使用某種面向?qū)ο缶幊陶Z(yǔ)言。可是這個(gè)問(wèn)題還是很重要,因?yàn)樵谖铱磥?lái),絕大多數(shù)人在使用這些語(yǔ)言的時(shí)候并不知道為什么,而且也不知該如何最充分的運(yùn)用它們。

軟件業(yè)曾經(jīng)爆發(fā)過(guò)的所有變革里,其中曾經(jīng)有兩個(gè)派系如此廣泛的深入人心,它們就是結(jié)構(gòu)化編程和面向?qū)ο缶幊獭K兄髁鞯默F(xiàn)代編程語(yǔ)言都被它們兩個(gè)激烈的影響著。實(shí)際上,要想不像結(jié)構(gòu)化和面向?qū)ο缶幊痰臉幼觼?lái)編寫程序都是一件難事。我們的主流編程語(yǔ)言都沒(méi)有g(shù)oto,因此它們服從了結(jié)構(gòu)化編程中最重要的禁令。我們的大多數(shù)主流編程語(yǔ)言都是基于類的,而且不支持在類以外定義函數(shù)或是變量,因此也避免了面向?qū)ο缶幊讨凶钊菀讐嬋氲南葳濉?/p>

用這些編程語(yǔ)言所編寫的程序可能看起來(lái)是結(jié)構(gòu)化的或是面向?qū)ο蟮模墒?ldquo;看起來(lái)”是會(huì)欺騙人的。當(dāng)今的編程語(yǔ)言經(jīng)常不顧他們所從屬那種派系的編程語(yǔ)言的基本原則。我會(huì)在另篇blog中再探討結(jié)構(gòu)化編程的原則,本篇,我想要談?wù)摰氖敲嫦驅(qū)ο缶幊痰幕驹瓌t。

在1995年的三月,我寫了一篇文章并發(fā)表在comp.object上,那是我第一次寫OOD(譯注1)原則的文章,此后就一發(fā)不可收拾的寫了很多。你可以在我的PPP一書(譯注2)中看到它們,在object mentor的很多文章中也都有,其中就有那篇眾所周知的綱要(近期會(huì)譯為中文,請(qǐng)關(guān)注)。

這些原則著重于OOD中的依賴管理方面,而淡化抽象與建模方面。這并不是說(shuō)OO在抽象方面不夠強(qiáng)大,或是OO不適合構(gòu)建模型。當(dāng)然有很多人都在使用OO的這些部分,只是這些原則集中關(guān)注于依賴管理。

依賴管理是我們每個(gè)人都要面對(duì)的問(wèn)題,每當(dāng)我們?cè)谄聊幻媲按蜷_(kāi)那些彼此糾結(jié)又令人作嘔的代碼,我們就會(huì)遭受不良的依賴管理所帶來(lái)的惡果。不良的依賴管理導(dǎo)致代碼難以改變,易被破壞,而且不可重用。實(shí)際上,我在PPP一書中談?wù)撨^(guò)很多不同的設(shè)計(jì)壞味道,而這些都與依賴管理有關(guān)。從另一方面來(lái)說(shuō),如果依賴經(jīng)過(guò)了良性的管理,代碼就可以保持靈活性、健壯性和重用性。所以依賴管理和這些相關(guān)原則是程序員們渴求的讓軟件保持優(yōu)良架構(gòu)的基石。

頭五項(xiàng)原則是關(guān)于類設(shè)計(jì)的,它們是:

(1)SRP,單一職責(zé)原則,一個(gè)類應(yīng)該有且只有一個(gè)改變的理由。

(2)OCP,開(kāi)放封閉原則,你應(yīng)該能夠不用修改原有類就能擴(kuò)展一個(gè)類的行為。

(3)LSP,Liskov替換原則,派生類要與其基類自相容。

(4)DIP,依賴倒置原則,依賴于抽象而不是實(shí)現(xiàn)。

(5)ISP,接口隔離原則,客戶只要關(guān)注它們所需的接口。

另外的六項(xiàng)是關(guān)于包的設(shè)計(jì)原則。在本文中,包是指一個(gè)二進(jìn)制的可發(fā)布文件,比如.jar文件、或dll文件,而不是Java包或是C++的命名空間(譯注3)。

頭三項(xiàng)包原則是關(guān)于包內(nèi)聚性的,它們會(huì)告訴我們?cè)摪咽裁磩澐值桨校?/p>

(1)REP,重用發(fā)布等價(jià)原則,重用的粒度就是發(fā)布的粒度。

(2)CCP,共同封閉原則,包中的所有類對(duì)于同一類性質(zhì)的變化應(yīng)該是共同封閉的。

(3)CRP,共同重用原則,一個(gè)包中的所有類應(yīng)該是共同重用的。

最后的三項(xiàng)原則是關(guān)于包之間的耦合性原則的,并且論述了評(píng)價(jià)系統(tǒng)中包結(jié)構(gòu)優(yōu)良與否的評(píng)判標(biāo)準(zhǔn)。

(1)ADP,無(wú)環(huán)依賴原則,在包的依賴關(guān)系圖中不允許存在環(huán)。

(2)SDP,穩(wěn)定依賴原則,朝著穩(wěn)定的方向進(jìn)行依賴。

(3)SAP,穩(wěn)定抽象原則,包的抽象程度應(yīng)該和其穩(wěn)定程度一致。 

譯注:

【1】OOD,全稱Object Oriented Design,即面向?qū)ο笤O(shè)計(jì)。

【2】PPP,即Bob大叔的著作《敏捷軟件開(kāi)發(fā) 原則、模式與實(shí)踐》一書以及其相關(guān)書籍,因都有“原則、模式與實(shí)踐”,即Priciples, Patterns and Practices,故常簡(jiǎn)稱為PPP。

【3】命名空間,原文為namespace,也譯作名字空間。它是一種特殊的作用域,它包含了處于該作用域內(nèi)的所有標(biāo)示符,且本身也用一個(gè)標(biāo)示符來(lái)表示,這樣便于將一系列在邏輯上相關(guān)的標(biāo)示符用一個(gè)標(biāo)示符來(lái)組織。就Java編程語(yǔ)言來(lái)說(shuō),命名空間是通過(guò)java包來(lái)表達(dá)的,所有代碼都?xì)w屬與一個(gè)包。來(lái)自其他包中的代碼要通過(guò)指定包名來(lái)引用某項(xiàng)特定的標(biāo)示符,例如,包java.lang中的String類要通過(guò)java.lang.String的形式引用。在C++中,命名空間常用來(lái)避免命名沖突,盡管現(xiàn)今的C++語(yǔ)言對(duì)命名空間做出了擴(kuò)展,但過(guò)去的C++代碼很少使用此項(xiàng)功能。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 神农架林区| 思南县| 兰州市| 湖南省| 丹江口市| 垫江县| 双牌县| 同德县| 阳城县| 静乐县| 台东县| 商城县| 兴业县| 隆德县| 大冶市| 图木舒克市| 雷波县| 井陉县| 太白县| 奉化市| 东安县| 漯河市| 乐至县| 习水县| 博爱县| 靖边县| 黄龙县| 饶平县| 望江县| 攀枝花市| 邛崃市| 阿合奇县| 白朗县| 汶上县| 靖远县| 资溪县| 慈溪市| 融水| 增城市| 鄄城县| 绥中县|