国产精品一久久香蕉产线看-国产精品一区在线播放-国产精品自线在线播放-国产毛片久久国产-一级视频在线-一级视频在线观看免费

軟件技術(shù)方案設(shè)計(jì)原則

時(shí)間:2022-07-03 07:11:43 輔助設(shè)計(jì)與工程計(jì)算 我要投稿
  • 相關(guān)推薦

軟件技術(shù)方案設(shè)計(jì)原則

  軟件開(kāi)發(fā)是一項(xiàng)高強(qiáng)度的腦力勞動(dòng)過(guò)程,到目前為止尚沒(méi)有辦法使軟件開(kāi)發(fā)完全機(jī)械化,只能靠人腦去設(shè)計(jì),也無(wú)法保證一個(gè)軟件完全沒(méi)有錯(cuò)誤。同硬件產(chǎn)品相比,一方面是同功能的軟件產(chǎn)品不再需要一個(gè)生產(chǎn)過(guò)程,只需要拷貝就行了,而硬件產(chǎn)品卻需要重復(fù)生產(chǎn);另一方面,軟件產(chǎn)品功能需求的變化遠(yuǎn)比硬件產(chǎn)品多。這就造成軟件產(chǎn)品和硬件產(chǎn)品在成型之后面臨的問(wèn)題是不同的,軟件產(chǎn)品主要是應(yīng)付用戶功能需求的變化和擴(kuò)展,硬件產(chǎn)品主要著眼于如何大規(guī)模地生產(chǎn)。硬件產(chǎn)品的大規(guī)模生產(chǎn)可以交給機(jī)器去執(zhí)行,而軟件產(chǎn)品的需求變化還是要靠人腦去完成。以下是軟件技術(shù)方案設(shè)計(jì)原則,歡迎閱讀。

軟件技術(shù)方案設(shè)計(jì)原則

  如何快速開(kāi)發(fā)出符合用戶功能需求的軟件,如何保證開(kāi)發(fā)出的軟件盡可能少地出現(xiàn)錯(cuò)誤,如何使開(kāi)發(fā)出的軟件能夠容易地適應(yīng)用戶功能需求的變化和擴(kuò)展,是所有軟件開(kāi)發(fā)人員追求的目標(biāo);我想,也正是為了實(shí)現(xiàn)上述目標(biāo),才有了軟件設(shè)計(jì)原則和設(shè)計(jì)模式。

  軟件開(kāi)發(fā)是起始于面向過(guò)程的,為什么會(huì)這樣呢?我想是因?yàn)槊嫦蜻^(guò)程地解決問(wèn)題更直接,軟件本身就是一個(gè)解決問(wèn)題的過(guò)程;面向過(guò)程的最大問(wèn)題就是不容易把問(wèn)題進(jìn)行分解,再大的問(wèn)題都要在一個(gè)過(guò)程里面解決,從第一步直到最后一步;最多是把一個(gè)大過(guò)程分解成幾個(gè)順序執(zhí)行的小過(guò)程,很考驗(yàn)人的邏輯推理能力,開(kāi)發(fā)出的軟件不容易維護(hù)、重用和擴(kuò)展。面象對(duì)象的方法沒(méi)那么直接,需要有一個(gè)抽象的過(guò)程,要把問(wèn)題抽象成一個(gè)個(gè)對(duì)象,每個(gè)對(duì)象解決一個(gè)小問(wèn)題,不同對(duì)象的組合就可解決不同的大問(wèn)題;而且把對(duì)象跟日常的事物聯(lián)系起來(lái),產(chǎn)生了屬性、事件、方法這樣的概念,增加了對(duì)象的直觀性。

  設(shè)計(jì)原則和設(shè)計(jì)模式都是針對(duì)面向?qū)ο蟮脑O(shè)計(jì)方法而提出來(lái)的,如果在軟件開(kāi)發(fā)中還完全采用面向過(guò)程的方法,是無(wú)所謂設(shè)計(jì)原則和設(shè)計(jì)模式的。在軟件開(kāi)發(fā)中,面向過(guò)程是起步,是基礎(chǔ),沒(méi)什么好研究的了;面向?qū)ο蟛攀巧钊,是王道,需要不斷地去總結(jié)方法;下面的軟件設(shè)計(jì)都是指面向?qū)ο蟮脑O(shè)計(jì)方法。

  根據(jù)前人總結(jié)的經(jīng)驗(yàn),在軟件開(kāi)發(fā)中,遵循一定的設(shè)計(jì)原則,靈活地采用一些設(shè)計(jì)模式,可以提高軟件的易維護(hù)性、可擴(kuò)展性以及重用的機(jī)率。關(guān)于這方面最權(quán)威的著作恐怕就是Robert C. Martin寫(xiě)的敏捷軟件開(kāi)發(fā)一書(shū)了;關(guān)于這本書(shū),個(gè)人閱讀的理解如下:

  一、設(shè)計(jì)原則,該書(shū)提出了如下設(shè)計(jì)原則:

  1、單一職責(zé)原則(SRP):一個(gè)類只實(shí)現(xiàn)一個(gè)功能;換一種說(shuō)法,一個(gè)類只能有一個(gè)引起它變化的原因;在軟件工程中有一個(gè)要求,叫做高內(nèi)聚;一個(gè)類只實(shí)現(xiàn)一個(gè)功能,無(wú)凝內(nèi)聚度是最高的了;這一原則可以使一個(gè)類更好地被重用;當(dāng)然,“一個(gè)功能”是相對(duì)的,在某種情況下,MODEM功能是一個(gè)單一功能,而在另一種情況下,可能就要把MODEM功能再分解成多個(gè)小功能;

  2、開(kāi)放封閉原則(OCP):開(kāi)放是指一個(gè)類能夠擴(kuò)展功能,封閉是指這個(gè)類對(duì)于功能修改是封閉的,也就是說(shuō)不能修改其已有的代碼和功能;要實(shí)現(xiàn)這一目標(biāo),關(guān)鍵是抽象;在客戶類中只使用抽象基類,在應(yīng)用中子類繼承基類,并按實(shí)際需要擴(kuò)展基類的功能;按更通俗的說(shuō)法就是:接口不能改變,功能可以擴(kuò)展;

  3、子類替換原則(LSP):就是一個(gè)子類在任何情況下,都能替換掉它的基類;這是面向?qū)ο笤O(shè)計(jì)方法中實(shí)現(xiàn)繼承和多態(tài)必須遵循的一條基本原則,顯然也是開(kāi)放封閉原則能夠?qū)崿F(xiàn)的基礎(chǔ);如何實(shí)現(xiàn)這一原則呢?那就是子類必須要有比基類相同或更弱的前置條件,相同或更強(qiáng)的后置條件;前置條件就是調(diào)用一個(gè)方法之前必須滿足的條件,后置條件就是一個(gè)方法執(zhí)行之滿足的條件;為了更清楚地說(shuō)明這一個(gè)問(wèn)題,見(jiàn)下面的函數(shù)表達(dá)式:

  Y = F(X);

  F是一個(gè)函數(shù),X是一個(gè)整型的輸入?yún)?shù),Y是一個(gè)整型的返回值,如果F要求X>0,返回值Y>1,則X>0和Y>1就分別是F的前置條件和后置條件;如果F是基類A中的一個(gè)函數(shù),B是A的一個(gè)子類,并擴(kuò)展了F的功能,則B類中F的前置條件必須跟A類中的相同或更弱,也就B類中的F必須至少能接受X>0,如果能同時(shí)接收X<=0的條件更好,但不能要求X>1,這是一個(gè)X>0更強(qiáng)的條件;B類中的F必須保證返回值Y>1,當(dāng)然如果能保證Y>10更好,但不能使返回值Y<=1,這樣就不滿足A類中F返回值Y>1的條件;不滿足子類替換原則最直接的后果就是使應(yīng)用程序產(chǎn)生BUG;必須說(shuō)明的是,在實(shí)際中是很難完全遵循子類替換原則的,必須作合理的假設(shè),在這個(gè)假設(shè)的前提下遵循子類替換原則,這就是所謂契約設(shè)計(jì);

  4、依賴倒置原則(DIP):就是上層模塊不能依賴于下層模塊,兩者都應(yīng)該依賴抽象;抽象不能依賴細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象;對(duì)這一原則要靈活看待,因?yàn)檫@一原則和當(dāng)前開(kāi)發(fā)中常用組件開(kāi)發(fā)方式看起來(lái)是相矛盾的;首先明確定義一下上層模塊和下層模塊,所謂上層模塊是調(diào)用別人的模塊,也可稱之為客戶模塊,下層模塊是被別人調(diào)用的模塊,也可稱之為服務(wù)模塊;顯然這是一個(gè)相對(duì)的概念,因?yàn)橐粋(gè)模塊很可能同時(shí)即調(diào)用別的模塊,又被另外的模塊調(diào)用;依賴倒置原則告訴我們客戶模塊和服務(wù)模塊不能互相依賴,而只能依賴于一個(gè)抽象的基類;另外這個(gè)抽象基類的接口是由客戶模塊決定,而不是由服務(wù)模塊決定;也就是說(shuō)客戶模塊需要什么,服務(wù)模塊就提供什么,而不是服務(wù)模塊提供什么,客戶模塊就使用什么;這頗有點(diǎn)當(dāng)前企業(yè)信奉的一個(gè)原則:客戶就是上帝,客戶需要什么,我們就提供什么;而我們當(dāng)前常用的組件編程中,每一個(gè)組件都是一個(gè)被別人調(diào)用的具體類,顯然是屬于細(xì)節(jié)和服務(wù)模塊,我們調(diào)用組件,實(shí)際上就依賴了這些組件的模塊;根據(jù)依賴倒置原則是不是就不能調(diào)用這些組件呢?當(dāng)然不能這么呆板,在設(shè)計(jì)中還有另一條原則,穩(wěn)定依賴是沒(méi)有害處的;說(shuō)到底,這些組件也是根據(jù)客戶需求制定出來(lái)的,只不過(guò)是已經(jīng)固化了的需求;而且這些組件經(jīng)過(guò)了嚴(yán)密測(cè)試,是穩(wěn)定的,依賴它們沒(méi)有害處;依賴倒置原則是針對(duì)我們自己的設(shè)計(jì)來(lái)說(shuō)的;當(dāng)然,如果我們自己設(shè)計(jì)的某一個(gè)服務(wù)類經(jīng)過(guò)了嚴(yán)格的測(cè)試和大量的使用,都已經(jīng)驗(yàn)證沒(méi)有問(wèn)題,也可以作為一個(gè)通用的組件,別人可以調(diào)用它,依賴它,沒(méi)有問(wèn)題;

  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、共同封閉原則:這是針對(duì)包的;一個(gè)包對(duì)應(yīng)用一個(gè)程序文件,包含一到多個(gè)類,這些類具有共同的封閉性,要么是都不能修改,要么是只能由同一原因引起修改;

  7、共同重用原則:也是針對(duì)包的;不同類的通用性也是不一樣的,通用性最高的就是在所有項(xiàng)目中都可使用,比如我們用到的集成開(kāi)發(fā)工具中的組件;有些類可能包含些行業(yè)特征,只能這一行業(yè)類的軟件中使用,有些類包含了某一個(gè)項(xiàng)目的特征,就可能在該項(xiàng)目中使用;但是一個(gè)包中的所有類的通用性都應(yīng)該是一樣的,這樣才能保證包的重用度最大化;

  二、設(shè)計(jì)模式,該書(shū)列出了以下常用的設(shè)計(jì)模式;

  1、策略模式(STRATEGY):在一個(gè)擁有通用算法的具體類中,把一些調(diào)用的方法委托給一個(gè)接口類實(shí)現(xiàn),通過(guò)接口的不同實(shí)現(xiàn),擴(kuò)展不同的功能;策略模式能夠重用通用具體類,又易于擴(kuò)展功能;

  2、工廠模式(FACTORY):在一個(gè)工廠類中,傳入不同的參數(shù),可生成不同的類(相同的接口,不同的實(shí)現(xiàn));工廠模式易于擴(kuò)展功能;

  3、封裝模式(FAADE):對(duì)一個(gè)具有復(fù)雜接口的類(或API函數(shù))進(jìn)行封裝,并提供幾個(gè)簡(jiǎn)單的接口供外部調(diào)用;封裝模式可以隔離復(fù)雜的接口,并使其使用變得簡(jiǎn)單;

  4、命令模式(COMMAND):上層模塊要操作一組COMMAND對(duì)象,這些COMMAND對(duì)象都具有同樣的方法(不同的實(shí)現(xiàn)),上層模塊在操作COMMAND對(duì)象時(shí),只需要調(diào)用它們的方法,而不用關(guān)心方法的實(shí)現(xiàn);在某些情況下,這種模式會(huì)極大地簡(jiǎn)化系統(tǒng);

  5、組合模式(COMPOSITE):當(dāng)A調(diào)用B,一對(duì)一的關(guān)系,需要改變?yōu)锳調(diào)用多個(gè)B(或B的子類對(duì)象)時(shí),不更改A的代碼(比如在A中創(chuàng)建一個(gè)B或B的子類對(duì)象的列表,再依次從列表中取出對(duì)象調(diào)用),而是從B繼續(xù)一個(gè)子類C,在C類中創(chuàng)建B或B的子類對(duì)象的列表,重寫(xiě)C類中相應(yīng)的方法為依次調(diào)用列表中對(duì)象的方法,從而用A和C一對(duì)一的關(guān)系代替A和B之間一對(duì)多的關(guān)系,并保持A的代碼不用更改;

  6、觀察者模式(OBSERVER):在被觀察者中提供注冊(cè)接口(Register)用于注冊(cè)觀察者,所有注冊(cè)的觀察者都放入一個(gè)列表中,在觀察者中提供觀察接口(Update),用于接收被觀察者發(fā)出的通知;當(dāng)被觀察者發(fā)生變化時(shí),依次調(diào)用列表中的觀察者的觀察接口(Update),觀察者在觀察接口(Update)中,對(duì)感興趣的被觀察者變化進(jìn)行處理;

  7、代理模式(PROXY):主要用于代理數(shù)據(jù)庫(kù)操作,可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作和業(yè)務(wù)操作的代碼分離;實(shí)現(xiàn)模式如下:

  應(yīng)用程序調(diào)用一個(gè)接口A,B和C都實(shí)現(xiàn)A中的所有接口,其中B是知曉數(shù)據(jù)庫(kù)的代現(xiàn),利用一個(gè)數(shù)據(jù)庫(kù)類D進(jìn)行數(shù)據(jù)庫(kù)操作,然后委托相應(yīng)的方法給C;代理模式使用不多,主要是在B類中把方法再委托給C,在大多數(shù)情況下都沒(méi)有必要;

  8、適配器模式(ADAPTER):在一個(gè)穩(wěn)定的架構(gòu)中,增加一個(gè)外部組件,但該組件的接口不符合架構(gòu)的規(guī)范,這時(shí)就可創(chuàng)建一個(gè)適配器類對(duì)外部組件進(jìn)行封裝,適配器的接口符合架構(gòu)的規(guī)范(這樣才能納入架構(gòu)),相應(yīng)的方法委托給外部組件實(shí)現(xiàn);這樣就可把外部組件納入到已有的架構(gòu)中;另外,也可能是需要提供一個(gè)具有不同接口的組件給另外的客戶端使用,同時(shí)又要把該組合件的功能納入到已有的架構(gòu)中,通過(guò)一個(gè)適配器把組件納入架構(gòu),另外的客戶端直接使用組件;

  最后說(shuō)明:使用設(shè)計(jì)模式是有代價(jià)的,可能需要增加新的類,編寫(xiě)額外的代碼,增加復(fù)雜度;優(yōu)勢(shì)就是,可以使系統(tǒng)更適應(yīng)于功能需求的變化,包括功能修改和擴(kuò)展,隔離變化等;可以提高代碼的重用率;所以對(duì)于設(shè)計(jì)模式,不能生搬硬套,而應(yīng)是順勢(shì)而為。


【軟件技術(shù)方案設(shè)計(jì)原則】相關(guān)文章:

技術(shù)方案設(shè)計(jì)原則04-25

軟件技術(shù)專業(yè)自我評(píng)價(jià)07-05

選股票的原則07-04

MBA的面試原則07-01

股票成交原則07-02

股票的成交原則07-02

春分養(yǎng)生原則07-12

立冬養(yǎng)生原則07-05

面試的原則解析07-13

堅(jiān)持HR的原則07-09

主站蜘蛛池模板: 精品小视频在线观看 | 天天爱天天做天天爽天天躁 | 国产精品久久久久久久人热 | 日韩专区亚洲精品欧美专区 | 日韩欧美一区二区三区在线视频 | 亚洲大尺码专区影院 | 欧美猛交xxxx免费看 | 99精品视频在线观看 | 在线国产视频观看 | 欧美成人性生活视频 | 高清三级毛片 | 日韩精品网址 | 欧美亚洲国产成人不卡 | 亚洲视频在线观看免费视频 | 人操人碰| 一个人看的www高清免费 | 一级一级人与动毛片 | 欧美日韩一区二区视频免费看 | 成人黄色片在线观看 | 91精品一区二区三区久久久久 | 精品一区二区三区高清免费观看 | 国产色啪午夜免费视频 | 国产成人精品免费视 | 一个人在线观看www视频 | 亚州激情视频 | 国产一区二区三区欧美精品 | 无遮挡在线观看 | 精品亚洲成a人片在线观看 精品亚洲成a人在线播放 | 日韩大片免费观看视频播放 | 国产一卡2卡3卡四卡网站 | 日韩在线视频第一页 | 99久久中文字幕 | 青草久久精品 | 在线播放色| 在线免费观看www视频 | 亚洲成人免费看 | 国产人人干 | 欧美日韩精品一区二区三区四区 | 午夜精品视频在线观看 | 成人小视频在线观看免费 | 日本欧美黄色 |