Java程式設計思想(第四版)第一章內容要點總結
阿新 • • 發佈:2019-02-11
1.1抽象過程
1.人們所能夠解決問題的複雜性直接取決於抽象的型別和質量。2.java語言的五個基本特性:1)萬物皆為物件,2)程式是物件的集合,他們通過傳送訊息來告知彼此所要做 的,3)每個物件都有自己的由其他物件所構成的儲存,4)每個物件都擁有其型別,5)某個特定型別的所 有物件都可以接受同樣的訊息。
1.2 每個物件都有一個介面
1.物件是唯一的,但是具有相同的特性和行為的物件所歸屬類的一部分。 2.類描述了具有相同特性(資料元素)和行為(功能)的物件集合,所以一個類實際上就是一個數據型別。 3.每個物件都只能滿足某些請求,這些請求由物件的介面所定義,決定介面的便是型別。1.3 每個物件都提供服務
1.在試圖開發過理解一個程式的時候,最好的方法之一就是將物件想像為 “服務提供者”,程式本身向用戶提 供服務。 2.將物件看為服務者還有一個好處,可以提高物件的內聚性。高內聚是軟體設計的基本 質量要求之一。 3.人們在設計物件是面臨的一個問題是,將過多的功能都塞在一個物件中。1.4 被隱藏的具體實現
1.程式開發人員按照角色分為“類建立者”(那些建立新資料型別的程式設計師)和“客戶端程式設計師”(那些在其應用中使用資料型別的類消費者)。2.客戶端程式設計師的目標是蒐集各種用來快速應用開發的類。
1.5 複用具體實現
1.最簡單的複用某個類的方式就是直接使用該類的一個物件。2.在現有的類合成新的類,這種該念被稱為組合,如果組合是動態發生的,那麼它通常被稱為聚合,被視為擁有關係。 3在建立新類的時候,應該首先考慮組合,如果採用這種方式,設計會變的更加清晰,一旦有了一些經驗之後,便能夠 看出使用繼承的場合了。
1.6 繼承
1.基型別和匯出型別之間具有相似性。2.基型別包含了其所有匯出型別所共享的特性和行為。可以建立一個型別來表示系統中某些物件 3.新的型別不光包含了現有型別的所有成員,更重要的是它複製了基類的介面,所有傳送給基類的訊息可以同時傳送給匯出物件。 4.使基型別與匯出型別產生不同的兩種方法:1)直接才匯出類中加添新的方法,這些方法並不是基類介面的一部分。 2)改變現有基類的方法的行為,被稱之為覆蓋那個方法,此時,正在使用相同的介面方法,但是可以在新方法下做不同的事情。 5.匯出型別在對基型別的方法新增上產生兩種效果,一種是覆蓋了基類的方法,意味著匯出類和基類是完全相同的型別,因為他們具有 完全相同的介面,2)在對基類的方法上新增新的方法,擴充套件了介面,雖然這種代替不完美,因為基型別無法訪問新新增的方法。
1.7 伴隨多型的可互動物件
1.在匯出新的子型別是,不需要修改處理泛化基型別的方法,通過匯出新的子型別而輕鬆擴充套件設計是一種非常好的能力。 2.程式設計時方法操作的泛化(即針對基型別進行方法的行為)可以極大的改善設計,降低維護的代價。 3.面向物件程式設計的妙訣:一個非面向物件程式設計的編譯器產生的函式呼叫會引起所謂的前期繫結,這意味著編譯器將產生對一個具體函式 名字的呼叫,而執行時將這個呼叫解析到將要被執行的程式碼的絕對地址,而在OOP中,程式直到執行時才能夠確定程式碼的地址,面向 物件程式語言使用了後期繫結的概念,當向物件傳送訊息時,被呼叫的程式碼直到執行時才能確定,編譯 器確保被呼叫方法的存在,並 對呼叫函式引數和返回值執行型別檢查(無法提供此類保證的語言被稱為弱型別的),但是不知道將被執行的確切程式碼,所以為了執 行後期繫結,Java使用了一小段特殊的程式碼來替代絕對地址的呼叫,這段代嗎使用在物件中儲存的資訊來計算方法的具體地址,這樣 根據這段程式碼的內容,每個物件都可以具有不同的行為表現,當向一個物件傳送訊息時,該物件就能夠知道這道對這條訊息應該做什 麼。 4在Java中,動態繫結是預設的行為,不需要新增額外的關鍵字來實現多型,而在C++中則是通過virtual關鍵字來實現的。 5為了說明多型,我們需要寫一段程式碼,它忽略型別的具體細節,僅僅和基類互動,這段代嗎和具體型別資訊是分離的,這樣做使程式碼編 寫更為簡單也更易於理解,可擴充套件性是極好的。1.8 單根繼承結構
1.自從c++面世以來,所有的OOP語言(除C++以外)所有的類最終都繼承自單一的基類。2.在單根繼承結構中的所有物件都具有一個共用介面,所以他們歸根到底是相同的基本型別。而C++所提供的結構是無法確保所有物件 都屬於同一個基本型別,(這麼做可以更好的向後相容C模型,而且受限制少,但是當要進行完全的面向物件程式設計時,則必須構 建自己的繼承體系,使得他可以利用OOP語言內建的遍歷) 3.單繼承結構的優點:1)保證所有物件具備某些功能。(你可以在每個物件上執行某些基本操作) 2)所有的物件可以很容易的在堆上建立。 3)引數傳遞可以得到極大的簡化。 4)單根繼承結構使垃圾回收器的實現變得容易的多(垃圾回收器正式Java對於C++所做的重要改進之一) 5)由於所有的物件都具有其型別資訊,因此不會因無法確定物件的型別而陷入僵局,(這對於系統級操作 (如異常處理)閒的尤其重要,並且給程式設計帶來了更大的靈活性)