面向對象的基本特徵你們都是耳熟能詳了,如封裝、繼承、多態。其實,若是將抽象做爲面向對象的基本特徵也是能夠的。編程
定義:抽象就是提取一類事物的共同個性。設計模式
分類:(1)對數據的抽象,也就是對象的屬性。(2)對過程的抽象,也就是對象的行爲特徵,比如Java中的接口。學習
定義:把對象的屬性和行爲結合做爲一個總體,而且隱藏對象的內部細節,只對外開放部分的公共訪問方式設計
好處:(1)隱藏內部的實現細節;(2)良好的封裝減小耦合;(3)對成員變量更精細的控制和代碼的自由修改。對象
定義:從已有的類派生出新類,而且新類擁有已有類的屬性和行爲,並能夠擴展新的功能。繼承
好處:(1)父類具有的功能,子類能夠直接繼承,提升了代碼的重用性;(2)爲多態提供基礎;接口
定義:同一個行爲具備多個不一樣的表現形式或者形態的能力(直白的說就是不一樣的對象對同一個事情的發生會產生不一樣的反應或者結果而已)。編譯
分類:(1)編譯時多態,經過重載實現多態;(2)運行時多態,經過重寫實現多態基礎
好處:(1)消除類型之間的耦合關係;(2)靈活性;(3)擴展性變量
多態存在的必要條件:(1)有繼承關係;(2)運行時多態,即重寫;(3)父類指向子類的引用
設計模式做爲一類的問題的有效的解決方案,也存在一些基本的原則
意思:對擴展開放,對修改關閉。在須要對程序進行擴展時,不能修改原有的代碼(吐槽一下,誰知道原始的代碼改了會不會對其餘功能有影響,畢竟有的代碼凌亂的跟屎同樣),而是要實現一個相似熱拔插的效果,這樣的話就須要藉助接口或者抽象類來實現。
意思:只要基類能夠出現的地方,子類必定能夠出現,而且能夠正常運行不受影響。里氏替換原則是對開閉原則的一個補充,由於開閉原則的關鍵就是抽象化,而基類和子類的繼承關係是抽象化的具體實現,因此里氏替換原則是對實現抽象化的具體步驟的規範。
意思:(1)高層次的模塊不該該依賴低層次的模塊,應該依賴於抽象;(2)抽象不該該依賴於具體實現,而是實現應該依賴於抽象
好處:就是解決耦合問題
能夠理解爲是開閉原則的基礎,針對接口和抽象編程
意思:使用多個隔離的接口,比使用單一的大而全的接口要好
好處:下降類的耦合程度,便於維護
意思:一個實體類應該儘可能少的與其餘的實體之間發生相互做用,使得各個實體之間相互獨立
好處:使得系統的模塊之間相對獨立
意思:多使用組合或者聚合,而不是繼承
好處:組合是有的關係,而繼承是是的關係,繼承也能夠說是破壞了封裝性
雖然面向對象的基本原則定義的很全面,有了一個良好的規範,可是在實際coding過程當中,沒法面面俱到,根據實際狀況,有取捨,比如設計模式也同樣,不少地方也不符合面向對象的設計原則
自勉:
接觸新事物,學習的過程就是本身的積攢過程,可能簡單或者有錯誤,可是誰不是一個學習積攢的過程那,沒有所謂的天才,只有拼搏和努力。