OOAD OOP
一、面向?qū)ο蠹夹g(shù)基本概念
????? 面向?qū)ο蠹夹g(shù)基于對象概念,以對象為中心,以類和繼承為構(gòu)造機制,充分利用接口和多態(tài)提供靈活性,來認識、理解、刻劃客觀世界和設(shè)計、構(gòu)建相應(yīng)的軟件系統(tǒng).
面向?qū)ο蟮奶卣?/p>
– 抽象,先不考慮細節(jié)
– 封裝,隱藏內(nèi)部實現(xiàn)
– 繼承,復(fù)用現(xiàn)有代碼
– 多態(tài),改寫對象行為
?
二、面向?qū)ο蟮脑O(shè)計目標(biāo)
1、可擴展性Extensibility
–容易添加新的功能
2、靈活性Flexibility
–容易添加新的功能代碼修改平穩(wěn)地發(fā)生
3、可插入性Pluggability
–容易將一個類抽出去,同時將另一個有同樣接口的類加入進來
?
三、面向?qū)ο笤O(shè)計基本的設(shè)計原則:
1、針對接口編程,而不是針對實現(xiàn)編程
– 客戶無需知道所使用對象的特定類型,只需要知道對象擁有客戶所期望的接口。
2、優(yōu)先使用對象組合,而不是類繼承
– 繼承在某種程度上破壞了封裝性,子類父類耦合度高;而對象組合則只要求被組合的對象具有良好定義的接口,耦合度低。
3、封裝變化點
– 使用封裝來創(chuàng)建對象之間的分界層,讓設(shè)計者可以在分界層的一側(cè)進行修改,而不會對另一側(cè)產(chǎn)生不良的影響,從而實現(xiàn)層次間的松耦合。
?
四、面向?qū)ο蟮脑O(shè)計原則:
1、“開-閉”原則(Open-Closed Principle,OCP)封裝的問題 - 對可變性封裝
??? 一個軟件實體應(yīng)當(dāng)對擴展開放,對修改關(guān)閉。 你添加新功能的時候應(yīng)該只是向代碼集中添加新的代碼不應(yīng)該修改原來的代碼。
2、里氏代換原則(Liskov Substitution Principle, LSP) 職責(zé)的問題 - 如何進行繼承
?? LSP原則要求子類可以無條件的替代父類,子類不能對父類沒有暴露的接口進行擴展,客戶要調(diào)用功能只能通過父類暴露的接口來調(diào)用用不能擅自向子類調(diào)用。
3、依賴倒轉(zhuǎn)原則(dependence inversion principle, DIP) 耦合度問題 - 針對接口編程
?? 依賴倒轉(zhuǎn)原則就是要實現(xiàn)依賴于抽象,抽象不要依賴于實現(xiàn)。要針對接口編程,不要針對實現(xiàn)編程。
4、合成/聚合復(fù)用原則(Composite/Aggregate Reuse Principle或CARP) 復(fù)用問題 - 盡量使用組合/聚合、盡量不使用繼承
?? 在一個新的對象里面使用一些已有的對象,使之成為新對象的一部分;新的對象通過向這些對象的委派達到復(fù)用這些對象的目的。
5、迪米特法則(Law of Demeter,LoD)? 耦合度問題 - 不要和陌生人說話
?? 一個軟件實體應(yīng)當(dāng)盡可能少的與其他實體發(fā)生相互作用。 迪米特法則的初衷在于降低類之間的耦合。由于每個類盡量減少對其他類的依賴,因此,很容易使得系統(tǒng)的功能模塊功能獨立,相互之間不存在(或很少有)依賴關(guān)系。
6、接口隔離原則(interface separate principle, ISP) 職責(zé)單一 - 恰當(dāng)?shù)膭澐纸巧徒涌?br />?? 使用多個專門的接口比使用單一的總接口要好。也就是說,一個類對另外一個類的依賴性應(yīng)當(dāng)是建立在最小的接口上。
五、目標(biāo)與原則的關(guān)系
可擴展性Extensibility
?開/閉原則、里氏替換原則、依賴倒轉(zhuǎn)原則、合成/聚合復(fù)用原則
靈活性Flexibility
開/閉原則、Demeter 法則、接口隔離原
可插入性Pluggability
開/閉原則、里氏代換原則、依賴倒轉(zhuǎn)原則、合成/聚合復(fù)用原則
轉(zhuǎn)載于:https://www.cnblogs.com/hq2008/archive/2010/05/28/1746515.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
- 上一篇: JavaScript设计模式—富有表现力
- 下一篇: 淘宝api 登录验证