天天看點

《Java程式設計思想》第四版 筆記第一章 對象導論

第一章 對象導論

1.1 抽象過程

面向對象程式設計(Object-oriented Programming OOP)五大特性:

(1)萬物皆對象

(2)程式是對象的集合,它們通過發送消息來告知彼此所要做的

(3)每個對象(執行個體 instance)都擁有其類型(類 class)

(4)每個對象都有自己的存儲空間,可容納其他對象(通過封裝現有對象,可制作出新對象)

(5)同一類所有對象都能接收相同的消息(e.g. 圓、形狀屬于同一類型)

1.2 對象的接口(Interface)

每個對象僅能夠接受特定的請求。我們向對象發出的請求是通過它的“接口”定義的,對象的“類型”/“類”規定了它的接口形式。

1.3 每個對象都提供服務

  • 軟體設計基本品質要求——“高内聚”
  • 每個對象隻提供單項服務的内聚

1.4實體實作的隐藏

涉足OOP的人:

  • 類建立者(建立新資料類型的人)
  • 客戶程式員(在自己的應用程式中采用現成資料類型的人)

通路控制原因:

  • 防止程式員接觸他們不該接觸的東西(内部資料類型的設計思想)
  • 允許庫設計者修改内部結構,不用擔心會對客戶程式員産生什麼影響

設定類邊界:

  • 顯式:public(任何人均可)、private(除自己、類建立者及該類的内部函數,均不可通路)、protected(與private相似,但繼承的類可通路)
  • 隐式:friendly(預設),包通路權限

1.5 複用的具體實作

  • 組合(composition): 由任意數量、任意類型的其他對象以任意可以實作新類的功能組成一個新類
  • 繼承:

    (1)導出類與基類具有相同的類型(可向基類對象發送的所有消息亦可發送給衍生類對象)

    (2)産生差異的方法:

    ①直接在導出類中添加新方法

    ②覆寫(盡管使用的函數接口未變,但它的新版本具有不同的表現)

  • 多态:

    把不同的子類對象都當做父類來看,可以屏蔽不同子類對象之間的差異。複制之後,父類型的引用可根據目前複制給它的子對象的特性以不同的方式運作——父親的行為像兒子

    e.g. 從一個基類中派生,響應一個虛指令,産生不同的結果

  • 向上轉型(upcasting):子類同時也是一個基類,具有基類的功能,向上轉型成基類,實作符合自己的功能
  • 動态綁定:自動根據傳入的實際類型,采取相應的正确操作
  • 抽象類(obstract):希望基礎類隻為自己的衍生類提供接口,不希望為基礎類建立對象,讓其使用自己的接口
  • 接口(Interface):abstract的更新版,完全禁止了所有函數的定義

1.6 對象的建立和生命周期

建立對象:

  • 堆棧:(靜态存儲區):在編寫程式時知道對象确切的數量,生命周期和類型,犧牲了靈活性
  • 堆:在記憶體池中動态建立對象,知道運作時才知道需要多少對象,無生命周期和類型

    (一):集合(容器)和繼承器(疊代器)

    “集合”适用情形: 針對一個特定問題的解決,實作不知道要多少對象或持續時間,集合在需要時,會自動擴充自己

    “繼承器”适用情形:

  • 對集合中的一系列元素進操縱/比較,而不是僅僅面向一個
  • 負責選擇集合内的元素,并将其提供給繼承器使用者,允許我們周遊該序列

(二)單根結構

所有類最終都從單獨的一個基礎類繼承——Object

  • 所有對象都有一個通用接口,最終都屬于相同的基本類型
  • 可以友善地實作一個垃圾收集器(與此有關的必要支援放在根基礎類裡面)

(三)參數化類型

  • 向上轉型:Circle——>Shape(安全)
  • 向下轉型:Shape——>Circle(不安全)基類向下轉型為更具體的類型
  • 違例(Exception)——下溯時發生錯誤
  • 如何将基類變回先前置入容器中時的具有實用接口

    的對象?

    參數化類型(泛型):

    ArrayList<Shape> =newArrayList<Shape>();

1.7 異常處理

與程式正常執行路徑并行的,在錯誤發生時執行的另一條路徑,不會幹擾正常的執行代碼,保證異常一定會在某處得到處理,提供了一種從錯誤狀況進行可靠恢複的路徑

1.8 并發程式設計(多線程)

  • 單處理器:對實時性很高的任務,将問題劃分進入獨立運作的程式片段中,使整個程式能更迅速地相應使用者請求——“假并行”
  • 多處理器:每個任務指派給不同的處理器——“真并行”
  • 【注】:“共享資源”過程:某個任務鎖定某項資源,完成任務,釋放資源鎖,其他任務可用該資源(Java中的資源鎖定方案:synchronized 關鍵字)