李建忠:C++軟件設(shè)計(jì)思想、方法與模式
本文摘錄自Boolan首席軟件咨詢師李建忠老師主講的 《C++軟件設(shè)計(jì)思想、方法與模式》。

軟件設(shè)計(jì)思想與原則
從面向?qū)ο笳勂?/strong>
為什么要面向?qū)ο笤O(shè)計(jì)?
面向?qū)ο笤O(shè)計(jì)最大的優(yōu)勢(shì)在于:抵御變化
底層思維:向下,如何把握機(jī)器底層從微觀理解對(duì)象構(gòu)造。
抽象思維:向上,如何將我們的周圍世界抽象為程序代碼。
軟件設(shè)計(jì)通常具有固有的復(fù)雜性,了解軟件設(shè)計(jì)復(fù)雜性的誘因是處理復(fù)雜性的關(guān)鍵。

?分解
人們面對(duì)復(fù)雜性有一個(gè)常見的做法:即分而治之,將大問題分解為多個(gè)小問題,將復(fù)雜問題分解為多個(gè)簡(jiǎn)單問題。
?抽象
更高層次來講,人們處理復(fù)雜性有一個(gè)通用的技術(shù),即抽象。由于不能掌握全部的復(fù)雜對(duì)象,我們選擇忽視它的非本質(zhì)細(xì)節(jié),而去處理泛化和理想化了的對(duì)象模型。

?向上:深刻把握面向?qū)ο髾C(jī)制所帶來的抽象意義,理解如何使用這些機(jī)制來表達(dá)現(xiàn)實(shí)世界,掌握什么是“好的面向?qū)ο笤O(shè)計(jì)”
?對(duì)象通過“抽象”來管理復(fù)雜性
? 數(shù)據(jù)抽象
? 單一責(zé)任
? 模塊化
? 分治管理
面向?qū)ο笤O(shè)計(jì)的“SOLID”五大原則:
?SRP ( Single Responsibility Principle),單一職責(zé)原則
?OCP(Open Close Principle),開放封閉原則
?LSP(Liskov Substitution Principle),里氏替換原則
?ISP(Interface Segregation Principle),接口隔離原則
?DIP(Dependence Inversion Principle), 依賴倒置原則
深入理解面向?qū)ο笕髾C(jī)制:
?封裝,封裝數(shù)據(jù)(狀態(tài))與函數(shù)(行為)
? 對(duì)象的內(nèi)存布局
?繼承,復(fù)用父類代碼實(shí)現(xiàn)
? 子類與父類的對(duì)象模型
? 私有繼承、受保護(hù)繼承、公有繼承
?多態(tài),運(yùn)行時(shí)選擇對(duì)象行為
? 虛表指針完成運(yùn)行時(shí)動(dòng)態(tài)綁定
軟件設(shè)計(jì)方法與技巧
將設(shè)計(jì)原則提升為設(shè)計(jì)經(jīng)驗(yàn):
?設(shè)計(jì)原則 Design Principles?
Design Principles 描述與特定編程語(yǔ)言無關(guān)的,通用性的,適用于各種粒度的設(shè)計(jì)原則。
?設(shè)計(jì)習(xí)語(yǔ) Design Idioms
Design Idioms 描述與特定編程語(yǔ)言相關(guān)的特定規(guī)范、技巧、慣用法。參考《C++ Core Guidelines》
?設(shè)計(jì)模式 Design Patterns
Design Patterns主要描述的是“類與相互通信的對(duì)象之間的組織關(guān)系,包括它們的角色、職責(zé)、協(xié)作方式等方面。

重構(gòu)
?重構(gòu)是?種對(duì)軟件內(nèi)部結(jié)構(gòu)的改善,?的是在不改變軟件的可??為的情況下,使其更易理解,修改成本更低。
?重構(gòu)過程包括去除重復(fù)、簡(jiǎn)化復(fù)雜邏輯和澄清模糊的代碼。?
? 要保證重構(gòu)的安全性
? 循序漸進(jìn)地進(jìn)?重構(gòu)?
? 要持續(xù)進(jìn)?重構(gòu)
通過重構(gòu)進(jìn)行迭代式設(shè)計(jì),逐步得到好的設(shè)計(jì),是設(shè)計(jì)常態(tài)。

重構(gòu)的要點(diǎn):
?提?代碼的可讀性?
?保持代碼整潔
?循序漸進(jìn)

架構(gòu)模式 Architectural Patterns:
?架構(gòu)模式描述系統(tǒng)中與基本結(jié)構(gòu)組織關(guān)系密切的高層模式。
?架構(gòu)模式通常包括子系統(tǒng)劃分,職責(zé),以及如何組織它們之間關(guān)系的規(guī)則。
設(shè)計(jì)模式與實(shí)踐
GOF-23 模式分類
?從目的來看:
? ?創(chuàng)建型(Creational)模式:將對(duì)象的部分創(chuàng)建工作延遲到子類或者其他對(duì)象,從而應(yīng)對(duì)需求變化為對(duì)象創(chuàng)建時(shí)具體類型實(shí)現(xiàn)引來的沖擊。
? ?結(jié)構(gòu)型(Structural)模式:通過類繼承或者對(duì)象組合獲得更靈活的結(jié)構(gòu),從而應(yīng)對(duì)需求變化為對(duì)象的結(jié)構(gòu)帶來的沖擊。
? ?行為型(Behavioral)模式:通過類繼承或者對(duì)象組合來劃分類與對(duì)象間的職責(zé),從而應(yīng)對(duì)需求變化為多個(gè)交互的對(duì)象帶來的沖擊。
?從范圍來看:
? ?類模式處理類與子類的靜態(tài)關(guān)系。
? ?對(duì)象模式處理對(duì)象間的動(dòng)態(tài)關(guān)系。

12月9日晚20:00
《現(xiàn)代C++白皮書》線上發(fā)布會(huì)
等你來參與
