本章介紹面向對象的基本概念和原則
1.1抽象
我的理解:隱去復雜的,無用的屬性,留下程序所需要的
1.2每個對象都有接口
概念上的理解:定義類對外部提供的服務(方法),通過向對象發送消息來使用服務
JAVA接口概念interface:見后文
問題:接口和實現的概念,為什么引入接口機制(需要看具體章節)
1.3對象都提供服務
1.問題分解(decompose)——自頂向下設計原則:考慮需要什么服務,再考慮需要的服務依賴什么服務,直到明確所需的對象存在或足夠簡單的編碼實現
優點:使設計容易,高內聚性(fit together)
2.OOP設計原則之一:使對象良好的完成一項任務,不要做太多的任務(多設計幾個對象共同完成)
優點:易于復用,易于閱讀
1.4 隱藏具體實現
1.分離類創建者(API提供者)和類使用者(客戶端程序員)
優點:1.容易改變內部實現而不影響外部使用(易變性,易于升級,維護)
2.減少客戶端程序Bug(安全性)
2.訪問控制(access control):只提供服務,拒絕內部訪問,優點同上
3.Java使用3個關鍵詞來設定訪問控制
public,PRivate:只有類內部可以使用,protected:類內部,同一package和子孫類內部可以使用
4.默認訪問權限:不知道關鍵字,包內可訪問,包外拒絕(實際相當于protected?)
1.5實現的復用Reuisng(實際講的是組合)
1.組合/聚合:類內使用別的類的對象,”has-a“關系
2.靈活性:類內對象一般為private,可以隨意、動態的改變
3.OOP應該首先考慮組合,再考慮繼承,以免設計過于復雜(相關書籍《設計模式》,框架與設計模式的概念等)
1.6繼承
1.繼承:以現有的類為基礎,復制,增加,和改變
2.類可以描述特征和行為,類之間還存在關系
3.子類繼承父類所有的特征、行為(包括不可操作的private類型)和接口,所有父類的消息都可以作用于子類,”is-a“關系
4.子類可有有新的特征和行為,更重要的:子類可以重寫/覆蓋(overriding)父類的方法
1.6.1”是一個”與“像是一個”關系 Is a,is lika a
is-a:子類沒有新的方法——替代原則
is-like-a:子類添加新的方法——不純粹的替代
我的理解:is-a用于使用不同的方法實現父類的接口,is-lika-a適用于父類較抽象,而子類較具體,需要添加新的特征和行為
1.7 多態
1.子類調用父類方法,編譯器在編譯時間不確定執行哪一段代碼,對象會去執行恰當的代碼
2.非oop,前期綁定,編譯器產生函數代碼的絕對入口地址
oop:后期綁定,編譯器知道函數存在,執行參數及返回值堅持,但不明確具體代碼,運行時間才知道執行代碼。java默認為動態綁定,詳細見多態章節
3.向上轉型(upcasting)把子類對象傳給需要父類對象的方法,安全,符合邏輯,多態機制在運行時間自動決定執行代碼,使程序設計更簡單和更易擴展
*多態的一個優點:定義新的子類可以將其新方法寫在子類的定義中覆蓋父類的方法,不必改變父類的代碼。
極大改善了設計,降低維護的代價!
*一個簡單的多態例子:一個方法需要父類的對象作為參數。方法中向該參數對象發送消息(調用該對象方法)。
子類的對象可以作為參數傳遞給該方法,而運行時間自動定位的子類的方法執行不同的代碼。
1.8單根繼承結構
所有的類都繼承單根父類Object
1.9 容器
一種特殊的對象,包含其他對象的引用,可以輕松動態擴展。(實質包含內部不同的數據結構實現)
1.9.1泛型
1.10對象的生命周期
創建和銷毀對象
java提供動態創建對象(在heap中)和垃圾回收機制,比才c++更安全,編碼更容易,代價是一定的效率和靈活性。
1.11異常處理
異常是一個對象,在出做事被異常處理器獲取
java強迫使用異常機制,使編碼容易和可靠
1.12并行編程
java多線程,并行和同步,資源共享等概念(具體章節詳解)
1.13java與互聯網:略
1.14總結
OOP的好處:代碼和設計更容易理解和復用,更容易維護等等
新聞熱點
疑難解答