1. 程式人生 > >Java程式設計思想(第四版)第一章內容要點總結

Java程式設計思想(第四版)第一章內容要點總結

 1.1抽象過程

1.人們所能夠解決問題的複雜性直接取決於抽象的型別和質量。
2.java語言的五個基本特性:1)萬物皆為物件,2)程式是物件的集合,他們通過傳送訊息來告知彼此所要做      的,3)每個物件都有自己的由其他物件所構成的儲存,4)每個物件都擁有其型別,5)某個特定型別的所 有物件都可以接受同樣的訊息。

1.2 每個物件都有一個介面

    1.物件是唯一的,但是具有相同的特性和行為的物件所歸屬類的一部分。     2.類描述了具有相同特性(資料元素)和行為(功能)的物件集合,所以一個類實際上就是一個數據型別。    3.每個物件都只能滿足某些請求,這些請求由物件的介面所定義,決定介面的便是型別。

1.3 每個物件都提供服務

    1.在試圖開發過理解一個程式的時候,最好的方法之一就是將物件想像為  “服務提供者”,程式本身向用戶提     供服務。         2.將物件看為服務者還有一個好處,可以提高物件的內聚性。高內聚是軟體設計的基本 質量要求之一。         3.人們在設計物件是面臨的一個問題是,將過多的功能都塞在一個物件中。

  1.4 被隱藏的具體實現

        1.程式開發人員按照角色分為“類建立者”(那些建立新資料型別的程式設計師)和“客戶端程式設計師”(那些在其應用中使用資料型別的類消費者)。
        2.客戶端程式設計師的目標是蒐集各種用來快速應用開發的類。
        3.類建立者的目標是構建類,這種類只向客戶端程式設計師暴露必需部分,而隱藏其他部分。         4.訪問控制的原因:     1 ) 讓客戶端成員無法觸及他們不應該觸及的部分。       2)允許庫設計這可以改變類內部的工作方式而不用擔心會影響到客戶端程式設計師。(介面和實現可以清晰的分離並加以保護)         5.Java的三個關鍵字在類內部的設定邊界:         1)public表示其後的元素對任何人都是可用的。     2)private表示除型別建立者和型別的內部方法之外的任何人都不能訪問的元素。         3)protect與privite作用相當,差別僅在與繼承的類可以訪問protect成員,但是不能訪問private成員。

    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)由於所有的物件都具有其型別資訊,因此不會因無法確定物件的型別而陷入僵局,(這對於系統級操作         (如異常處理)閒的尤其重要,並且給程式設計帶來了更大的靈活性)

        1.9容器

        1.解決某個特定問題時,Java中提供了建立另一種物件型別,這種新的物件型別持有對其他物件的引用,(也可以使用陣列)     我們稱之為“容器”的新物件,然後讓它來處理所有的細節(任何需要時都可以擴充自己以容納你置於其中的所有東西,因此不需     要知道將來會把多少個物件置於這個容器中)。     2.在許多語言中都有專門的容器來進行處理,有通用的一些容器,但是許多時候還是要容器有所選擇   1)不同容器提供了不用型別的外部介面和行為。(堆疊相比較於佇列)(集合相比較於列表)  2)不同的容器對於某些操作具有不同的效率。(Arraylist隨機訪問花費的時間是固定的,Linkedlist則是不同的)

        1.9.1引數化型別

         1.JAVA SE5出現之前,容器儲存的物件都只是具有Java中的通用型別:object,單根繼承結構意味著所有東西都是object型別,         所以可以儲存object的容器可以儲存任何東西。這使得容器很容易被複用.      2.引數化型別在Java中也稱為範型):它知道自己所儲存的型別機制,從而不需要向下轉型,是一個編譯器可以自動的定製作用於       特定型別上的類,一對尖括號,中間包含型別的資訊。         1.10物件的建立和生命期         1.C++認為效率控制是最重要的,為了追求最大的執行速度,物件的儲存空間和生命週期可以在編寫程式的時確定,這可以通過        將物件置於堆疊或靜態儲存區域內來實現,同樣也犧牲了靈活性。     2.第二種在被稱為堆的記憶體池中動態的建立物件,直到執行時才知道需要多少物件,生命週期如何,具體型別是什麼,因為儲存空間     是在執行時被動態管理的,所以需要大量時間在堆中分配儲存空間,可能要遠遠大於在堆疊中建立儲存空間的時間。     3.Java完全採用了動態記憶體分配方式,每當想要建立新物件時,就要使用new關鍵字來構建此物件的動態例項。         4.物件的生命週期,對於允許在堆疊上建立物件的語言,Java 編譯器可以確定物件存活的時間,並可以自動銷燬它(垃圾回收機制)         而對於C++來說,必須通過程式設計來確定何時銷燬物件,這可以因為不正確的處理而導致記憶體洩露(C++的常見問題),相比而言,         垃圾回收機制減少了所必須考慮的議題和編寫的程式碼。   1.11異常處理:錯誤處理      Java的異常處理就像是與程式正常執行路徑並行的,因為它是一條完全分離的執行路徑,所以它不會干擾正常的執行程式碼,異常提供       了一種從錯誤狀況進行可靠恢復的途徑,現在不再是隻能退出程式,你可以經常進行校正,並恢復程式的執行,這些都有助於編寫出        更健壯的程式。(注意:異常處理在面向物件程式語言出現之前就已經存在了)。         1.12併發程式       1.程式中,彼此獨立 執行的部分被稱為執行緒。       2.併發:在同一時刻處理多個任務的思想。       3.在共享資源上,Java也提供了資源鎖。      1.13Java與Internet         1.客戶/伺服器計算技術,.資訊儲存池:用於分發資訊的軟體以及資訊與軟體所駐留的機器或者機群被總稱為伺服器。