Java 基礎之一對象導論
對象導論
1.1 抽象過程
所有編程語言都提供抽象機制。人們所能解決的問題的復雜性直接取決於抽象的類型和質量。
匯編語言是對底層機器的輕微抽象。
我們將問題空間中的元素及其再解空間中的表示稱為對象。這種思想實質是:程序可以通過添加新類型的對象使自身適用於某個特定的問題。
- 萬物皆為對象
可以抽取待求解問題的任何概念化構建表示程序中的對象。 - 程序是對象的集合
他們通過發送消息來告知彼此所要做的。 - 每個對象都有自己的由其他對象所構成的存儲
- 每個對象都擁有其類型
- 某一特定類型的所有對象都可以接收同樣的消息
1.2 每個對象都有一個接口
創建抽象數據類型(類)是面向對象程序設計的基本概念之一。
可以創建某一類型的變量,然後操作這些變量。
1.3 每個對象都提供服務
每個對象都提供服務,它有助於提高對象的內聚性。高內聚是軟件設計的基本質量要求之一:這意味著一個軟件構件的各個方面組合得很好。
1.4 被隱藏的具體實現
將程序開發人員按照角色分為類創建者和客戶端程序員。
客戶端程序員的目標是收集各種用來實現快速應用開發的類。類創建者的目標是構建類,這種類只向客戶端程序員暴露必須的部分,而隱藏其他部分。
訪問控制:一個存在原因讓客戶端程序員無法觸及不應該觸及的部分。另一個存在原因就是允許庫設計者可以改變類內部的工作方式而不用擔心會影響客戶端程序員。
1.5 復用具體實現
使用現有類合成新的類,這種方式被稱為組合。
如果組合是動態的,通常稱他們為聚合。
1.6 繼承
當父類發生變化時,被修改的子類也會發生變動。
當繼承現有類型時,也就創建了新的類型。
導出類和基類具有相同的類型。
如果只是簡單地繼承一個類而並不做其他任何事情,那麽基類接口中的方法將會直接繼承到導出類。
1.6.1 是一個與像一個關系
導出類和基類時完全相同的類型,因為它們具有完全相同的接口。可以用一個導出類對象來完全替代一個基類對象。這可以被視為純粹替代,通常稱為替代原則。is-a關系
有時必須在導出類型中添加新的接口元素,這樣也就擴展了接口。這個新的類型任然可以替代基類,但時這種替代不完美,因為基類無法訪問新添加的方法。者中可以描述為is-like-a關系。
1.7 伴隨多態的可互換對象
在處理類型的層次結構時,想把一個對象不當作它所表示的對象類型來對待,而把它當作基類來對待。
通過導出新的子類型而輕松擴展設計的能力時對改動進行封裝的基本方法之一。
1.8 單根繼承結構
在單根繼承結構中的所有對象都具有一個公用接口,所有它們歸根到底都時相同的基本類型。
單根繼承保證了所有對象都具備某些功能。
單根繼承結構使垃圾回收器都具備某些功能。由於所有對象都保證具有其類型信息,所以不會因無法確定對象的類型而陷入僵局。
1.9 容器
在C++中,容器被稱為標準模板類庫。
單一的容器是滿足不了現有的需求,還需要對容易進行選擇,主要原因有兩個:
- 不同容器提供了不同類型的接口和外部行為。
- 不同容器對於某些操作具有不同的效率
1.9.1 參數化類型
參數化類型就是編譯器可以自動定制作用於特定類型上的類。在Java中稱為泛型。
1.10 對象的創建和生命期
當使用對象時,最關鍵問題之一就是他們的生成與銷毀。每個對象為了生存都需要資源,尤其時內存。當我們不在需要對象時,需要清理掉所占有的資源。
對象的數據存在於何處,有兩種方式:
- 為了最求最大執行速度,對象的存儲空間和生命周期可以在編程程序時確定,這可以通過將對象置於堆棧或限域變量或靜態存儲區來實現。這種方式將存儲空間的分配和釋放置於優先位置。
- 在碓的內存池中動態的創建對象。在這種方式中,直到運行時才知道需要多少對象,它們生命周期如何,以及它們的具體類型是什麽。因為存儲空間是被動態管理的,所有需要大量時間在碓中分配空間,這可能要遠遠大於在堆中創建空間。Java采用的便是這種方法。
1.11 異常處理:處理錯誤
異常是一種對象,它從出錯地點被"拋出",並被專門用來處理特定類型錯誤的相應異常處理器"捕獲"。異常處理像是與正常程序執行路徑並行的,在錯誤時執行的另一條路徑。
異常提供了一種從錯誤狀況進行可靠恢復的途徑。
1.12 並發編程
有時中斷對於處理時間性強的程序是必須的,但對於大量其他問題,我們只想把問題切分成多個獨立的部分執行。在程序中,這些彼此獨立運行的部分被稱為"線程",這個概念被稱為並發。
並發看起來相當有用,但有一個隱患:共享資源。如果多個並行任務都要訪問同一個資源,那麽就會出現問題。
解決辦法:當一個任務訪問資源的時候,將資源鎖住,直到使用完畢後,在釋放資源,給其他任務使用。
Java 基礎之一對象導論