《 Java 編程思想》CH01 對象的概念

抽象過程

全部編程語言都提供抽象機制,人們所能解決的問題的複雜性直接取決於抽象的類型和質量。程序員

OOP 容許根據問題來描述問題,而不是根據運行解決方案的計算機來描述問題。編程

純粹的面向對象程序設計方法:

  • 萬物皆對象
  • 程序是對象的集合
  • 每一個對象都有本身的由其餘對象所構成的存儲
  • 每一個對象都擁有類型
  • 某一個特定類型的全部對象均可以接收一樣的信息

對象具備狀態、行爲和標識編程語言

每一個對象都有一個接口

全部的對象都是惟一的,但同時也是具備相同特性和行爲的對象所歸屬的類的一部分。設計

類描述了具備相同特性(數據元素)和行爲(功能)的對象集合,因此一個類實際上就是一個數據類型code

面向對象程序設計的挑戰之一,就是在問題空間的元素和解空間的對象之間建立一對一的映射。對象

每一個對象都只能知足某些請求,這些請求由對象的接口(interface)所定義,決定接口的即是類型。blog

接口肯定了某一個特定對象所能發出的請求,可是,在程序中必須有知足這些請求的代碼,這些代碼與隱藏的數據一塊兒構成了實現(implement)繼承

每一個對象都提供服務

當正在試圖開發或理解一個程序設計,最好的方法之一就是將對象想象成「服務提供者」接口

高內聚是軟件設計的基本質量要求之一:這意味着一個軟件構件的各個方面「組合的好」內存

被隱藏的具體實現

將程序開發人員按照角色分爲類建立者客戶端程序員

  • 客戶端程序員的目標是收集各類用來實現快速應用開發的類。
  • 類建立者的目標是構建類,這種類只向客戶端程序員暴露必需的部分,而隱藏其餘部分。

將實現隱藏起來能夠減小程序的 bug,即訪問控制,訪問控制存在的緣由:

  1. 讓客戶端程序員沒法觸及他們不該該觸及的部分。
  2. 容許庫設計者能夠改變類內部的工做方式而不擔憂會影響到客戶端程序員。

Java 中的四種訪問權限:

  • public:任何人都是可用的
  • private:除了類型建立者和類型的內部方法以外任何人都不能訪問
  • protected:與 private 相似,差異在與繼承於該類的派生類能夠訪問protected 成員
  • default:包訪問權限,同一個包中其餘類能夠訪問。

複用具體實現

代碼複用是面向對象程序設計語言所提供的最了不得的優勢之一

組合(「has-a」關係):新的類能夠由任意數量、類型的其餘對象以任意能夠實現新的類中想要的功能的方式組成。若是組合是動態發生的,那麼它一般被稱爲「聚合」

*在創建新類時,應該首先考慮組合,而不是繼承,由於它更加簡單靈活。

繼承

兩個類型能夠有相同的特性和行爲,可是其中一個類型可能比另外一個含有更多的特性。繼承使用基類型和派生類型的概念表示了這種類型之間的類似性。

一個基類型包含全部派生類所共享的特性和行爲,能夠建立一個基類型來表示系統中某些對象的核心概念,從基類型中派生出其餘類型,來表示該核心能夠被不一樣的方式實現。

經過繼承而產生的類型等價性是理解面向對象程序設計方法內涵的重要門檻。

基類與派生類的類似性:全部能夠發送給基類對象的消息同時也能夠發送給派生類對象。 產生基類與派生類的差別性的兩種形式:

  1. 在派生類添加新方法
  2. 在派生類中改變現有基類的方法,即覆蓋

「是一個」與「像是一個」

  • 「是一個」(is-a):只是覆蓋,沒有添加新的方法。
  • 「像是一個」(is-like-a):添加了新的方法。

伴隨多態的可互換對象

在處理類型的層次結構時,把一個對象不當作它所屬的特性類型來對待,而是將其當作其基類的對象來對待,這一能夠編寫出不依賴於特定類型的代碼。

爲了實現泛型,面向對象程序設計語言使用了後期綁定的概念,當向對象發送消息時,被調用的代碼直到運行時才能肯定。編譯器確保被調用方法的存在,並對調用參數和返回值執行類型檢查,可是並不知道將被執行的確切代碼。

Java 使用了一小段特殊的代碼來代替絕對地址調用。

在某些語言中(如C++),必須明確聲明但願某個方法具有後期綁定,而 Java 中,動態綁定是默認行爲,不須要額外添加關鍵字來實現多態。

單根繼承結構

全部的類都最終繼承自單一的基類,Java 中 這個類爲 Object

在單根繼承結構中的全部對象都具備一個公用接口,因此它們歸根到底都是相同的基本類型。

單根繼承結構使得垃圾回收的實現變得容易得多。

容器

  • 不一樣容器提供了不一樣類型的接口和外部行爲
  • 不一樣容器對於某些操做具備不一樣的效率

參數化類型

容器是經過向下轉型實現的,容器知道元素轉型前的類型,則能夠實現容器,這種解決方法即參數化類型,即泛型

對象的建立和生命期

  • Java 徹底採用動態內存分配方式,每當想要建立新對象時,就要使用 new 關鍵字來構建此對象的動態實例。
  • Java 提供了「垃圾回收」機制,它能夠自動發現對象什麼時候再也不被使用,進而銷燬它。

異常處理

大多數錯誤機制的主要問題在於,它們都依賴於程序員自身的警戒性,這種警戒性來源於一種共同的約定,而不是編程語言所強制的。這種機制容易被忽視。

被拋出的異常不像方法返回的錯誤值和方法設置的用來表示錯誤條件的標誌位那樣能夠被忽略。異常不能被忽視,因此它保證必定會在某處獲得處理

異常處理不是面向對象的特性。

本文首發於Code & Fun

相關文章
相關標籤/搜索