一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

編程核心思想:模塊的抽象、分解與組合,及實現(xiàn)其高內(nèi)聚、低耦合

 山峰云繞 2022-10-10 發(fā)布于貴州

https://m.toutiao.com/is/MF1LP21/?=編程核心思想 



代碼的易復(fù)用、易擴(kuò)展、易維護(hù)是代碼組織的最高目標(biāo)。

1 應(yīng)對復(fù)雜性:抽象(abstract)、分解(decompose)

問題的數(shù)據(jù)抽象與功能(function)抽象,抽象出模塊及模塊分解。

從模塊四要素去理解模塊:

① 接口:模塊的輸入輸出,隱藏實現(xiàn),暴露接口;

② 功能:模塊實現(xiàn)需要的功能;

③ 邏輯:功能如何實現(xiàn)及需要的數(shù)據(jù);

④ 狀態(tài):模塊的調(diào)用與被調(diào)用關(guān)系;

一個系統(tǒng)可以劃分為不同的子系統(tǒng),一個模塊可以劃分為更小的模塊。

模塊可以是函數(shù)(功能、方法、接口)、類、由函數(shù)、類組成的模塊、模塊的模塊、子系統(tǒng)、系統(tǒng)。

盡量實現(xiàn)模塊的可復(fù)用性。

計算機(jī)系統(tǒng)就是一個分層抽象的系統(tǒng)。其中的編程語言也有不同的抽象層次,其中的C語言相對Java來說,抽象層次較低。

2 應(yīng)對需求變化(功能增改),易于維護(hù)和擴(kuò)展

2.1 功能增加時,不需要修改現(xiàn)有代碼;

2.2 功能修改時,不影響其它代碼;

要實現(xiàn)這兩個目標(biāo),要求模塊的高內(nèi)聚、低耦合,模塊滿足七大設(shè)計原則。

也就是要避免'城門失火,殃及池魚',避免“牽一發(fā)而動全身”。

① 內(nèi)聚:模塊內(nèi)部元素的相似程度;

② 耦合:本模塊對其它模塊的依賴程度。

3 模塊耦合關(guān)系

分解操作形成模塊,模塊結(jié)合會形成模塊依賴關(guān)系,也就是模塊耦合關(guān)系。

編程中的各類關(guān)系所形成的依賴無處不在:

類的6類關(guān)系:

相對于繼承(Inheritance),組合(Composition)具有較低的耦合關(guān)系,聚合(Aggregation)及其它關(guān)系的耦合性最低:

4 設(shè)計原則與設(shè)計模式

設(shè)計模式是以設(shè)計原則為基礎(chǔ)。設(shè)計模式重點在于管理變化,提高復(fù)用,如果變化沒有顯現(xiàn),模塊沒有利用價值時,就沒有必要使用設(shè)計模式。Framework相對于Application,具有使用設(shè)計模式的更多場景。

設(shè)計原則以高內(nèi)聚、低耦合為目標(biāo)。

設(shè)計模式在什么地方應(yīng)用:尋找變化點,在變化點應(yīng)用模式。(將變化隔離,封裝(C++封裝為virtual函數(shù)),使得變化發(fā)生時,其它部分不受影響。)

Template Method定義一個操作中的算法的骨架(穩(wěn)定),而將一些步驟延遲(變化)到子類中。Template Method使得子類可以不改變(復(fù)用)一個算法的結(jié)構(gòu)(接口)即可重定義(override重寫)該算法的某些特定步驟(如使用一個框架(以虛函數(shù)做為擴(kuò)展點)時只需要重寫某些虛函數(shù)即可)。

設(shè)計模式在什么時間應(yīng)用:一般沒有一步到位的設(shè)計模式,而是重構(gòu)到模式,如常見的重構(gòu)技法:

靜態(tài)綁定→動態(tài)綁定(→表示轉(zhuǎn)變?yōu)?,下同?/p>

編譯時依賴→運(yùn)行時依賴

早綁定→晚綁定(如虛函數(shù)和函數(shù)指針)

繼承→組合

緊耦合→松耦合

5 七大設(shè)計原則 — SOLID & LC

這七大設(shè)計原則是業(yè)界在面向?qū)ο笤O(shè)計中經(jīng)過總結(jié)精煉得出,在英文表示下各個原則首字母縮寫就是 SOLID。

  • Single Responsibility Principle:單一職責(zé)原則
  • Open Closed Principle:開閉原則
  • Liskov Substitution Principle:里氏替換原則
  • Interface Segregation Principle:接口隔離原則
  • Dependence Inversion Principle:依賴倒置原則

另外還有兩個設(shè)計原則。

  • Law of Demeter:迪米特法則
  • Composite/Aggregate Reuse Principle:組合/聚合復(fù)用原則

5.1 單一職責(zé)原則(Single Responsibility Principle)

一個類只做一件事(一個類應(yīng)該僅有一個引起它變化的原因,變化的方向隱含著類的責(zé)任。)。

業(yè)務(wù)對象(BO business object)、業(yè)務(wù)邏輯(BL business logic)拆解到單一職責(zé)的模塊。

5.2 開放封閉原則(Open closed principle)

對外擴(kuò)展開放,對內(nèi)修改封閉。

擴(kuò)展某類的功能時應(yīng)該通過添加新的代碼來實現(xiàn)而不是修改其內(nèi)部的代碼。

用抽象構(gòu)建架構(gòu),用實現(xiàn)確保擴(kuò)展。

5.3 里氏替換原則(LSP liskov substitution principle)

子類可以擴(kuò)展父類的功能,但不能改變原有父類的功能。

子類必須能夠替換它們的基類(is-a)。

繼承表達(dá)類型抽象。

實際項目中,每個子類對應(yīng)不同的業(yè)務(wù)含義,使父類作為參數(shù),傳遞不同的子類完成不同的業(yè)務(wù)邏輯。如實現(xiàn)多態(tài)。

5.4 接口隔離(Interface segregation principle)

建立單一接口(擴(kuò)展為類也是一種接口,一切皆接口)。

不應(yīng)該強(qiáng)迫客戶程序依賴它們不用的方法(客戶端不應(yīng)該依賴它不需要的接口)。

該暴露的暴露(訪問屬性設(shè)置為public),該隱藏的隱藏(訪問屬性設(shè)置為private,類內(nèi)部使用)。

接口應(yīng)該小而完備。

一個類對另一個類的依賴應(yīng)該建立在最小的接口上。

避免大接口被許多子類實現(xiàn),造成耦合。降低了耦合,代碼也變得好維護(hù)。

接口的設(shè)計粒度越小,系統(tǒng)越靈活,但是靈活的同時結(jié)構(gòu)復(fù)雜性提高,開發(fā)難度也會變大,維護(hù)性降低。

5.5 依賴倒置原則(Dependence inversion principle)

高層模塊(穩(wěn)定)不應(yīng)該依賴于低層模塊(變化),二者都應(yīng)該依賴于抽象(穩(wěn)定)。

抽象(穩(wěn)定)不應(yīng)該依賴于實現(xiàn)細(xì)節(jié)(變化),實現(xiàn)細(xì)節(jié)應(yīng)該依賴于抽象(穩(wěn)定),實現(xiàn)抽象時便會相互獨立,這樣就降低了模塊的耦合度。

面向接口編程(通過接口作為參數(shù)實現(xiàn)應(yīng)用場景)。

抽象就是接口或者抽象類,細(xì)節(jié)就是實現(xiàn)類(隱藏)。

也就是上面說的“隔離或封裝變化”。

5.6 迪米特原則(Law of demeter LOD)

最少知道原則(Least Knowledge Principle 簡寫 LKP),盡量降低類與類之間的耦合;

一個對象應(yīng)該對其他對象有最少的了解。如果對象 A 知道對象 B 的所有細(xì)節(jié),那么對象 A 就可能會去使用到這些細(xì)節(jié)。如果你修改了其中對象 B 中的細(xì)節(jié),就會不經(jīng)意影響到 A。

5.7 組合/聚合復(fù)用原則(Composite/Aggregate Reuse Principle)

優(yōu)先使用對象組合,而不是類繼承。

類繼承通常為“白箱復(fù)用”,對象組合通常為“黑箱復(fù)用”。

繼承屬于一種硬編碼。如果沒有遵守里氏替換原則,父類一旦修改,所有子類都需要進(jìn)行改變。

繼承在某種程序上破壞了封裝性,子類父類耦合度高。而對象組合則只要求組合的對象具有良好定義的接口。

以上七大設(shè)計原則的擴(kuò)展:

5.8 封裝變化點

使用封裝來創(chuàng)建對象之間的分界層,讓設(shè)計者可以在分界一側(cè)進(jìn)行修改,而不會對另一側(cè)產(chǎn)生不良的影響,從而實現(xiàn)分界層之間的松耦合。

5.9 針對接口編程,而不是針對實現(xiàn)編程

不將變量類型聲明為某個特定的具體類,而是聲明為某個接口。

客戶程序無需獲知對象的具體類型,只需要知道對象所具有的接口。

減少系統(tǒng)中各部分的依賴關(guān)系,從而實現(xiàn)“高內(nèi)聚、松耦合”的類型設(shè)計方案。

6 23個設(shè)計模式的分類

根據(jù)設(shè)計模式的參考書 《Design Patterns - Elements of Reusable Object-Oriented Software》(《設(shè)計模式 - 可復(fù)用的面向?qū)ο筌浖亍罚┲兴岬降?,總共?23 種設(shè)計模式。這些模式可以分為三大類:創(chuàng)建型模式(Creational Patterns)、結(jié)構(gòu)型模式(Structural Patterns)、行為型模式(Behavioral Patterns)。

另一種細(xì)分的標(biāo)識:① 對象創(chuàng)建;② 對象性能;③ 單一職責(zé);④ 組件協(xié)作;⑤ 接口隔離;⑥ 狀態(tài)變化;⑦ 數(shù)據(jù)結(jié)構(gòu);⑧ 行為變化; ⑨ 領(lǐng)域問題

6.1 創(chuàng)建型模式(Creational Patterns)

這些設(shè)計模式提供了一種在創(chuàng)建對象的同時隱藏創(chuàng)建邏輯的方式,而不是使用 new 運(yùn)算符直接實例化對象。這使得程序在判斷針對某個給定實例需要創(chuàng)建哪些對象時更加靈活。

創(chuàng)建型模式的主要關(guān)注點是“怎樣創(chuàng)建對象?”,它的主要特點是“將對象的創(chuàng)建與使用分離”。這樣可以降低系統(tǒng)的耦合度,使用者不需要關(guān)注對象的創(chuàng)建細(xì)節(jié),對象的創(chuàng)建由相關(guān)的工廠來完成。就像我們?nèi)ド虉鲑徺I商品時,不需要知道商品是怎么生產(chǎn)出來的一樣,因為它們由專門的廠商生產(chǎn)。

(1) 簡單工廠模式(Factory Pattern)①

(2) 工廠方式模式(Factory Pattern)①

(3) 抽象工廠模式(Abstract Factory Pattern)①

(4) 單例模式(Singleton Pattern)[② 對象性能]

(5) 建造者模式(Builder Pattern)①

(6) 原型模式(Prototype Pattern)①

6.2 結(jié)構(gòu)型模式(Structural Patterns)

這些設(shè)計模式關(guān)注類和對象的組合。繼承的概念被用來組合接口和定義組合對象獲得新功能的方式。

結(jié)構(gòu)型模式描述如何將類或?qū)ο蟀茨撤N布局組成更大的結(jié)構(gòu)。它分為類結(jié)構(gòu)型模式和對象結(jié)構(gòu)型模式,前者采用繼承機(jī)制來組織接口和類,后者釆用組合或聚合來組合對象。

由于組合關(guān)系或聚合關(guān)系比繼承關(guān)系耦合度低,滿足“合成復(fù)用原則”,所以對象結(jié)構(gòu)型模式比類結(jié)構(gòu)型模式具有更大的靈活性。

(7) 適配器模式(Adapter Pattern)[⑤ 接口隔離]

(8) 橋接模式(Bridge Pattern)[③ 單一職責(zé)]

過濾器模式(Filter、Criteria Pattern)

(9) 組合模式(Composite Pattern)[⑦ 數(shù)據(jù)結(jié)構(gòu)]

(10) 裝飾器模式(Decorator Pattern)[③ 單一職責(zé)]

(11) 外觀模式(Facade Pattern)[⑤ 接口隔離]

(12) 享元模式(Flyweight Pattern)[② 對象性能]

(13 代理模式(Proxy Pattern)[⑤ 接口隔離]

6.3 行為型模式(Behavioral Patterns)

這些設(shè)計模式特別關(guān)注對象之間的通信。

行為型模式用于描述程序在運(yùn)行時復(fù)雜的流程控制,即描述多個類或?qū)ο笾g怎樣相互協(xié)作共同完成單個對象都無法單獨完成的任務(wù),它涉及算法與對象間職責(zé)的分配。

行為型模式分為類行為模式和對象行為模式,前者采用繼承機(jī)制來在類間分派行為,后者采用組合或聚合在對象間分配行為。由于組合關(guān)系或聚合關(guān)系比繼承關(guān)系耦合度低,滿足“合成復(fù)用原則”,所以對象行為模式比類行為模式具有更大的靈活性。

(14) 責(zé)任鏈模式(Chain of Responsibility Pattern)[⑦ 數(shù)據(jù)結(jié)構(gòu)]

(15) 命令模式(Command Pattern)[⑧ 行為變化]

(16) 解釋器模式(Interpreter Pattern)[⑨ 領(lǐng)域問題]

(17 迭代器模式(Iterator Pattern)[⑦ 數(shù)據(jù)結(jié)構(gòu)]

(18) 中介者模式(Mediator Pattern)[⑤ 接口隔離]

(19) 備忘錄模式(Memento Pattern)[⑥ 狀態(tài)變化]

(20) 觀察者模式(Observer Pattern)[④ 組件協(xié)作]

(21) 狀態(tài)模式(State Pattern)[⑥ 狀態(tài)變化]

空對象模式(Null Object Pattern)

(22) 策略模式(Strategy Pattern)[④ 組件協(xié)作]

(23) 訪問者模式(Visitor Pattern)[⑧ 行為變化]

(24) 模板模式(Template Pattern)[④ 組件協(xié)作]

附編程發(fā)散思維圖:

ref

https:///article/1566313342510

-End-

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    我想看亚洲一级黄色录像| 国产精品免费自拍视频| 亚洲综合色婷婷七月丁香| 一区二区三区18禁看| 国产精品内射视频免费| 能在线看的视频你懂的| 九九热精品视频免费观看| 日韩欧美黄色一级视频| 日本精品理论在线观看| 黄色片一区二区三区高清| 亚洲伦理中文字幕在线观看| 国产美女网红精品演绎| 国产高清精品福利私拍| 国产成人精品国产亚洲欧洲| 免费人妻精品一区二区三区久久久 | 有坂深雪中文字幕亚洲中文| 黑色丝袜脚足国产一区二区| 日本欧美视频在线观看免费 | 国产又大又硬又粗又湿| 亚洲中文字幕熟女丝袜久久| 久久少妇诱惑免费视频| 精品国产av一区二区三区不卡蜜| 日韩欧美中文字幕人妻| 日韩中文字幕有码午夜美女| 国产情侣激情在线对白| 午夜国产精品国自产拍av| 草草夜色精品国产噜噜竹菊| 国产成人精品国内自产拍| 在线亚洲成人中文字幕高清| 青青操精品视频在线观看| 国产白丝粉嫩av在线免费观看| 色婷婷国产熟妇人妻露脸| 国产精品久久女同磨豆腐| 99热在线播放免费观看| 东京热男人的天堂一二三区| 日本办公室三级在线观看| 国产视频一区二区三区四区| 熟女体下毛荫荫黑森林自拍| 国产精品午夜视频免费观看| 国产亚洲视频香蕉一区| 国产成人午夜在线视频|