· 抽象
o 忽略一個主題中與當前目標無關的東西,專注的注意與當前目標有關的方面.(就是把現實世界中的某一類東西,提取出來,用程序代碼表示,抽象出來的一般叫做類或者接口).抽象並不打算了解全部問題,而是選擇其中的一部分,暫時不用部分細節.抽象包括兩個方面,一個數據抽象,而是過程抽象.
o 數據抽象 -->表示世界中一類事物的特徵,就是對象的屬性.比如鳥有翅膀,羽毛等(類的屬性)
o 過程抽象 -->表示世界中一類事物的行爲,就是對象的行爲.比如鳥會飛,會叫(類的方法)
· 封裝
o 封裝就是把過程和數據包圍起來,對數據的訪問只能通過特定的界面.如私有變量,用set,get方法獲取
· 繼承
o 一種聯結類的層次模型,並且允許和鼓勵類的重用,提供一種明確表達共性的方法.對象的一個新類可以從現有的類中派生,這個過程稱爲類繼承.新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),原始類稱爲新類的基類(父類).派生類可以從它的父類哪裏繼承方法和實例變量,並且類可以修改或增加新的方法使之更適合特殊的需要.因此可以說,繼承爲了重用父類代碼,同時爲實現多態性作準備.
· 多態
o 多態是指允許不同類的對象對同一消息做出響應.多態性包括參數化多態性和包含多態性.多態性語言具有靈活/抽象/行爲共享/代碼共享的優勢,很好的解決了應用程序函數同名問題.總的來說,方法的重寫,重載與動態鏈接構成多態性.java引入多態的概念原因之一就是彌補類的單繼承帶來的功能不足.
o 動態鏈接 -->對於父類中定義的方法,如果子類中重寫了該方法,那麼父類類型的引用將調用子類中的這個方法,這就是動態鏈接.
注意繼承與重載:子類與父類的關係,重載方法的調用問題
子類對象可以直接當成父類對象用,但是反過來就不行.比如:人是父類,學生是人的子類,所以學生對象一定具備人對象的屬性,但是人對象就未必具有學生對象的特性.但是子類對象當做父類來用,將失去子類所有特性,只保留與父類同名的屬性和方法,此時可以對父類方法進行重寫.
一個類中如果定義了重載的方法,則系統在調用方法時,會根據參數的類型自動選擇調用合適的方法
五大基本原則
· 單一職責原則SRP(Single Responsibility Principle)
o 是指一個類的功能要單一,不能包羅萬象。如同一個人一樣,分配的工作不能太多,否則一天到晚雖然忙忙碌碌的,但效率卻高不起來。
· 開放封閉原則OCP(Open-Close Principle)
o 一個模塊在擴展性方面應該是開放的而在更改性方面應該是封閉的。比如:一個網絡模塊,原來只服務端功能,而現在要加入客戶端功能,
o 那麼應當在不用修改服務端功能代碼的前提下,就能夠增加客戶端功能的實現代碼,這要求在設計之初,就應當將服務端和客戶端分開,公共部分抽象出來。
· 替換原則(the Liskov Substitution Principle LSP)
o 子類應當可以替換父類並出現在父類能夠出現的任何地方。比如:公司搞年度晚會,所有員工可以參加抽獎,那麼不管是老員工還是新員工,
o 也不管是總部員工還是外派員工,都應當可以參加抽獎,否則這公司就不和諧了。
· 依賴原則(the Dependency Inversion Principle DIP)
o 具體依賴抽象,上層依賴下層。假設B是較A低的模塊,但B需要使用到A的功能,
o 這個時候,B不應當直接使用A中的具體類:而應當由B定義一抽象接口,並由A來實現這個抽象接口,B只使用這個抽象接口:這樣就達到
o 了依賴倒置的目的,B也解除了對A的依賴,反過來是A依賴於B定義的抽象接口。通過上層模塊難以避免依賴下層模塊,假如B也直接依賴A的實現,那麼就可能造成循環依賴。一個常見的問題就是編譯A模塊時需要直接包含到B模塊的cpp文件,而編譯B時同樣要直接包含到A的cpp文件。
· 接口分離原則(the Interface Segregation Principle ISP)
o 模塊間要通過抽象接口隔離開,而不是通過具體的類強耦合起來
作者:唐平 部分信息來源於網絡
時間:2018-5-28