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