所有程式語言都提供抽象機制。人們所能夠解決的問題的複雜性直接取決於抽象的型別和質量 。
物件導向程式設計允許根據問題來描述問題,而不是根據執行解決方案的計算機來描述問題。
物件導向程式設計的五個基本特性,這些特性表現了一種純粹的物件導向程式設計方式:
總結:這
一小節首先介紹了類的思想、物件導向程式設計語言中類的本質以及怎麼才能獲得有用的物件(how do you get an object to do useful work for you?)。
類的思想:所有物件都是唯一的,但同時也是具有相同特性和行為的物件所歸屬的類的一部分。
物件導向程式設計語言中類的本質:因為類描述了具有相同特性(資料元素)和行為(功能)的物件的集合,所以乙個類實際上就是乙個資料 型別, 例如浮點型數字是具有相同特性和行為的集合。二者的差異在於,程式設計師通過定義類來適應問題,而不 再被迫只能使用現有的用來表示機 器中儲存單元的資料型別。可以根據需求,通過新增新的資料型別來擴充套件程式語言。程式設計 系統欣然接受新的類,並且像對待內建型別一樣 來照管它們和進行型別檢查。
怎麼樣才能獲得有用的物件:必須有某種方式產生對物件的請求,使物件完成各種任務。這些請求由物件的介面所定義,決定介面的便 是型別。
ps:有些人會對型別(type)和類(class)區別對待,認為型別決定了介面,而類是該介面的乙個特定實現。
當正在試圖開發或理解乙個程式設計時,最好的方法之一就是將物件想象為「服務提供者」。程式本身將向使用者提供服務,它將通過呼叫其它物件提供的服務來實現這一 目的。你的目標就是去建立(或者最好是在現有的**庫中尋找)能夠提供理想服務來解決問題的一系列物件。
將物件看作是服務提供者有助於提高物件的內聚性。
在良好的物件導向設計中,每個物件都可以很好地完成一項任務,但是它並不試圖做更多的事。
訪問控制的第乙個存在原因就是讓客戶端程式員無法觸及他們不應該觸及的部分——這些部分對資料型別的內部操作來說是必須的部分,但並不是解決特定問題所需的接 口的一部分。
訪問控制的第二個存在原因就是允許庫設計者可以改變類內部的工作方式而不用擔心會影響到客戶端程式員。
public表示緊隨其後的元素任何人都是可用的;private表示除型別建立者和類內部的方法之外任何人都不能訪問;protected與private相當,差別僅在於繼承的類可以訪問protected成員,但是不能訪問private成員;default同乙個包中的類可以訪問,包外的類不能訪問。
復用類的方式:一、直接使用該類的乙個物件;二、將那個類的乙個物件置於新的類中。
使用現有的類組成新的類,這種概念稱為組合(composition)。如果組合是動態發生的,它通常稱為聚合(aggregation)。
實際上,在建立新類時,應該首先考慮組合,因為它更簡單靈活。
繼承解決的問題:當建立乙個類後,即使另乙個新類與其具有相似的功能,你還是得重新建立乙個新類。如果我們能夠以現有的類為基礎,複製它,然後通過新增和修改這個副本來建立新類那就要好得多了。通過繼承便可以達到這樣的效果。不過,當源類發生變動時,被修改的副本也會反映出這些變動。
型別不僅描述了作用於乙個物件集合上的約束條件,同時還有與其他型別之間的關係。
基類與匯出類具有相同的型別。通過繼承而產生的型別等價性是理解物件導向程式設計方法內涵的重要門檻。
有兩種方法可以使基類與匯出類產生差異:一、直接在匯出類中新增新的方法;二、改變現有基類的方法,這被稱之為覆蓋(overriding)。
is-a關係和is-like-a關係
why:在處理型別結構時,經常想把乙個物件不當做它所屬的特定型別來對待,而是將其當做基類的物件來對待。這使得人們可以編寫出不依賴於特定型別的**。這樣的**是不會受新增新型別影響的。
第一章 物件導論
public表示其後的元素對任何人都是可用的 private出了型別的建立者和內部方法之外任何人都不能訪問的元素 protect於private相當,差別在於繼承的類可以訪問protected型別,但是不能訪問逇private。預設許可權 比較容易忽視 包訪問許可權,因為在這種許可權下,類可以訪問在...
第一章物件導論
1.1抽象過程 所有程式語言都提供抽象機制。物件導向程式設計方式 1.萬物皆物件。可以將物件視作乙個特殊的變數,如 類class a 建立類和建立變數是一樣的,a a 建立物件a int i 建立變數i 同時,也可以用類來描述物品或其它抽象的東西,例如 class 長方體 double 長 doub...
筆記 第一章 物件導論
1.1 抽象過程 1.1.1 程式設計師必須建立起在機器模型 位於 解空間 內,這是你對問題建模的地方,例如計算機 和實際待解問題的模型 位於 問題空間 內,這是問題存在的地方,例如一項業務 之間的關聯。1.1.2 我們將問題空間中的元素及其在解空間中的表示稱為 物件 這種思想的實質是 程式可以通過...