软件设计原则总结
軟件設(shè)計(jì)基本原則:
(1) 可靠性
用軟件系統(tǒng)規(guī)模越做越大越復(fù)雜,其可靠性越來(lái)越難保證。應(yīng)用本身對(duì)系統(tǒng)運(yùn)行的可靠性要求越來(lái)越高,軟件系統(tǒng)的可靠性也直接關(guān)系到設(shè)計(jì)自身的聲譽(yù)和生存發(fā)展競(jìng)爭(zhēng)能力。軟件可靠性意味著該軟件在測(cè)試運(yùn)行過(guò)程中避免可能發(fā)生故障的能力,且一旦發(fā)生故障后,具有解脫和排除故障的能力。
(2) 健壯性
健壯性又稱魯棒性,是指軟件對(duì)于規(guī)范要求以外的輸入能夠判斷出這個(gè)輸入不符合規(guī)范要求,并能有合理的處理方式。
(3) 可修改性
要求以科學(xué)的方法設(shè)計(jì)軟件,使之有良好的結(jié)構(gòu)和完備的文檔,系統(tǒng)性能易于調(diào)整。
(4) 容易理解
軟件的可理解性是其可靠性和可修改性的前提。它并不僅僅是文檔清晰可讀的問(wèn)題,更要求軟件本身具有簡(jiǎn)單明了的結(jié)構(gòu)。這在很大程度上取決于設(shè)計(jì)者的洞察力和創(chuàng)造性,以及對(duì)設(shè)計(jì)對(duì)象掌握得透徹程度,當(dāng)然它還依賴于設(shè)計(jì)工具和方法的適當(dāng)運(yùn)用。
(5) 程序簡(jiǎn)便
(6) 可測(cè)試性
可測(cè)試性就是設(shè)計(jì)一個(gè)適當(dāng)?shù)臄?shù)據(jù)集合,用來(lái)測(cè)試所建立的系統(tǒng),并保證系統(tǒng)得到全面的檢驗(yàn)。
(7) 效率性
軟件的效率性一般用程序的執(zhí)行時(shí)間和所占用的內(nèi)存容量來(lái)度量。在達(dá)到原理要求功能指標(biāo)的前提下,程序運(yùn)行所需時(shí)間愈短和占用存儲(chǔ)容量愈小,則效率愈高。
(8) 標(biāo)準(zhǔn)化原則
在結(jié)構(gòu)上實(shí)現(xiàn)開放,基于業(yè)界開放式標(biāo)準(zhǔn),符合國(guó)家和信息產(chǎn)業(yè)部的規(guī)范。
9)先進(jìn)性
滿足客戶需求,系統(tǒng)性能可靠,易于維護(hù)。
10)可擴(kuò)展性
軟件設(shè)計(jì)完要留有升級(jí)接口和升級(jí)空間。對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。
軟件設(shè)計(jì)七大重要原則:
1、單一職責(zé)原則(SRP)
就一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因。如果一個(gè)類承擔(dān)的職責(zé)過(guò)多,就等于把這些職責(zé)耦合在一起,一個(gè)職責(zé)的變化可能會(huì)削弱或者抑制這個(gè)類完成其他職責(zé)的能力。這種耦合會(huì)導(dǎo)致脆弱的設(shè)計(jì),當(dāng)變化發(fā)生時(shí),設(shè)計(jì)會(huì)遭受到意想不到破壞。軟件真正要做的許多內(nèi)容,就是發(fā)現(xiàn)職責(zé)并把那些職責(zé)相互分離。如果你能夠想到多于一個(gè)的動(dòng)機(jī)去改變一個(gè)類,那么這個(gè)類就具有多于一個(gè)的職責(zé),就應(yīng)該考慮類的職責(zé)分離。
2、開放封閉原則(OCP)
軟件實(shí)體(類、模塊、函數(shù)等)應(yīng)該可以擴(kuò)展,但是不可以修改,即對(duì)于擴(kuò)展是開放的,對(duì)于更改是封閉的。運(yùn)用開放-封閉原則可以使得軟件面對(duì)需求的改變卻可以保持相對(duì)穩(wěn)定,從而使得軟件可以在第一個(gè)版本以后不斷推出新的版本。換句話說(shuō),當(dāng)面對(duì)需求,對(duì)程序的改動(dòng)是通過(guò)增加新的代碼進(jìn)行的,而不是更改現(xiàn)有的代碼。無(wú)論模塊多么封閉,都會(huì)存在一些無(wú)法對(duì)之封閉的變化。既然不可能完全封閉,設(shè)計(jì)人員必須對(duì)于他設(shè)計(jì)的模塊應(yīng)該對(duì)哪種變化封閉做出選擇。他必須先猜測(cè)出最有可能發(fā)生的變化種類,然后構(gòu)造抽象來(lái)隔離這些變化,等到變化發(fā)生時(shí)立即采取行動(dòng)。于是,在我們最初編寫代碼時(shí),假設(shè)變化不會(huì)發(fā)生。當(dāng)變化發(fā)生時(shí),我們就創(chuàng)建抽象來(lái)隔離以后發(fā)生的同類變化。
開放-封閉原則是面向?qū)ο笤O(shè)計(jì)的核心所在,遵循這個(gè)原則可以帶來(lái)面向?qū)ο蠹夹g(shù)所聲稱的巨大好處,也就是可維護(hù)、可擴(kuò)展、可復(fù)用、靈活性好。開發(fā)人員應(yīng)該僅對(duì)程序中呈現(xiàn)出頻繁變化的那些部分做出抽象,然后,對(duì)于應(yīng)用程序中的每個(gè)部分都刻意地進(jìn)行抽象同樣不是一個(gè)好主意。拒絕不成熟的抽象和抽象本身一樣重要。
3、里氏代換原則(LSP)
定義:子類型必須能夠替換掉它們的父類型。也就是說(shuō),一個(gè)軟件實(shí)體如果使用的是一個(gè)父類的話,那么一定適用于其子類,而且它覺(jué)察不出父類對(duì)象和子類對(duì)象的區(qū)別,即在軟件里面,把父類都替換成它的子類,程序的行為沒(méi)有變化。只有當(dāng)子類可以替換掉父類,軟件單位的功能不受到影響時(shí),父類才能真正被復(fù)用,而子類也能夠在父類的基礎(chǔ)上增加新的行為。
4. 依賴倒置原則(DIP)
1、高層模塊不應(yīng)該依賴低層模塊,兩個(gè)都應(yīng)該依賴抽象。
2、抽象不應(yīng)該依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴抽象。
換句話說(shuō),就是要針對(duì)接口編程,不要對(duì)實(shí)現(xiàn)編程。依賴倒置原則是面向?qū)ο笤O(shè)計(jì)的標(biāo)志,用哪種語(yǔ)言編寫程序不重要,如果編寫時(shí)考慮的都是如何針對(duì)抽象編程而不是針對(duì)細(xì)節(jié)編程,即程序中所有的依賴關(guān)系都是終止于抽象類或者接口,那就是面向?qū)ο蟮脑O(shè)計(jì),反之就是過(guò)程化的設(shè)計(jì)了。
正是有了里氏代換原則,才使得依賴倒置原則成為可能。由于子類型的可替換性才使得使用父類類型的模塊在無(wú)需修改的情況下就可以擴(kuò)展。
5、接口隔離原則(ISP)
這一原則好象是單一職責(zé)原則的升級(jí)版,接口隔離原則強(qiáng)調(diào)的是當(dāng)一個(gè)服務(wù)類需要被即有共同功能需求又有不同功能需求的客戶類使用時(shí),不能在服務(wù)類中加進(jìn)它的客戶不需要的方法,比如在服務(wù)類A的客戶中, B類客戶需要F方法,而C類客戶則不需要F方法,這時(shí)不能簡(jiǎn)單地把F方法加到服務(wù)類A中以滿足B類客戶的需求,而應(yīng)分離接口;比如另設(shè)計(jì)一個(gè)服務(wù)類D,其中包含F(xiàn)方法,并把共用的功能委托給A實(shí)現(xiàn),這樣B客戶可以使用D,而C客戶繼續(xù)使用A;對(duì)這一原則我有所保留的是:如果F方法對(duì)C類沒(méi)有影響,直接加到A類中也無(wú)防,而且這種情況是很普遍。
6.合成/聚合復(fù)用原則
在一個(gè)新的對(duì)象里面使用一些已有的對(duì)象,使之成為新對(duì)象的一部分;新的對(duì)象通過(guò)這些向?qū)ο蟮奈蛇_(dá)到復(fù)用已有功能的目的.這個(gè)設(shè)計(jì)原則有另一個(gè)簡(jiǎn)短的表述:要盡量使用合成/聚合,盡量不要使用繼承。
7.迪米特法則
又叫最少知識(shí)原則。如果兩個(gè)類不必彼此直接通信,那么這兩個(gè)類就不應(yīng)當(dāng)發(fā)生直接的相互作用。如果其中一個(gè)類需要調(diào)用另一個(gè)類的某一個(gè)方法的話,可以通過(guò)第三者轉(zhuǎn)發(fā)這個(gè)調(diào)用。該法則首先強(qiáng)調(diào)的前提是在類的結(jié)構(gòu)設(shè)計(jì)上,每一個(gè)類都應(yīng)該盡量降低成員的訪問(wèn)權(quán)限,即一個(gè)類包裝好自己的private狀態(tài),不需要讓別的類知道的字段或行為就不要公開。迪米特法則的根本思想,是強(qiáng)調(diào)了類之間的松耦合。類之間的耦合越弱,越有利于復(fù)用,一個(gè)處在弱耦合的類被修改,不會(huì)對(duì)有關(guān)系的類造成波及。
總結(jié)
- 上一篇: 大腿根疼是要入盆了吗
- 下一篇: 如何能变成电视又如何变成电脑显示器电脑显