天天看點

第1章 對象入門

關鍵詞:面向對象程式設計的概念

所有程式設計語言的最終目的都是提供一種抽象的方法。

機器模型(方案空間 )問題模型(問題空間)的聯系。

什麼是對象:問題空間中的元素和方案空間中的表示物稱為對象。

面向對象程式設計語言的5大特征:

 1. 所有東西都是對象
 2. 程式是一大堆對象的組合:通過消息傳遞,各對象知道自己該做什麼。
 3. 每個對象都有自己的存儲空間,可容納其他對象。或者通過封裝現有對象,可制作出新型對象。
 4. 每個對象都有一種類型。每個對象都是類的一個執行個體。一個類最重要的特征是能發什麼消息給它
 5. 同一個類所有的對象都能接受相同的消息。這是oop最重要的概念之一。這意味着程式可以控制同一類的所有對象。
           

根據oop舉個書中的例子:

問題模型:銀行有一筆交易,客戶要求出納向一個賬戶存一筆錢。
機器模型:轉化成程式。
根據面向對象程式設計語言的第1大特征:一切皆對象。那麼,客戶是一個對象,出納是一個對象,賬号也是一個對象。
根據面向對象程式設計語言的第2大特征:程式是一大堆對象的組合。那這次交易由客戶、出納、賬戶三個對象組成。
根據面向對象程式設計語言的第3大特征:每個對象都有自己的存儲空間,可容納其他對象。每個客戶都有自己的賬戶,每個出納都能對賬戶操作。
根據面向對象程式設計語言的第4大特征:每個對象都有一種類型,一個類最重要的是能發什麼消息給它。客戶可以把賬戶消息發給出納,出納把餘額消息發給賬戶。
根據面向對象程式設計語言的第5大特征:同一個類所有的對象都能接受相同的消息。比如說因為有利率,賬戶餘額要增加,所有的賬戶都不一樣,但因為所有的賬戶對象都是賬戶這個類的一個執行個體,是以都能接受利率這個消息,而不用每個賬戶都要傳遞一個利率才能增加餘額。
           

關鍵詞:接口 通路控制、

接口:Interface,預先定義好的類,規定了可對一個特定的對象發出哪些請求。

從業人員分類:類建立者,建立新資料類型的人
           客戶程式員,使用現成資料類型的人
           

接口由類建立者提供給客戶程式員。為了安全和解耦,這涉及到了通路控制的問題。

通路控制的原因:
 6. 防止程式員接觸他們不該接觸的東西,通常是内部資料類型的設計思想。客戶程式員隻需懂得操作接口,毋需明白内部實作原理。
 7. 允許開發人員修改内部結構,不用擔心這會對客戶程式員造成影響。因為接口與實作方法隔離開來,隻需重新連結一下即可。
           
類邊界
  public:誰都可以通路
 9. protected:繼承的類可以通路受保護的成員,但不能通路私有成員
 10. private:除了你自己,類型的建立者和那個類型的内部函數成員,其他任何人都不能通路後續的定義資訊。
 11. friendly:隻能在這個包裝的範圍内使用
           

方案的重複使用:最簡單的做法是僅使用那個類的對象,但同時将那個類的一個對象置入一個新類,這個新類可有任意數量和類型的對象構成,這些對象稱為“成員對象”。隻要它滿足設計要求即可,這種概念叫“組織”,在現有類的基礎上組織一個新類。對象的組織具有很大的靈活性,通常我們将成員對象設為private,這樣客戶程式員就不能通路他們,我們就可以在不幹擾客戶代碼的前提下從容的修改成員對象,而繼承不具備這種靈活性,因為編譯器會必須對通過繼承建立的類加以限制。

繼承

建立一個類(稱之為衍生類或子類),通過extends關鍵字繼承了另一個類(稱之為基礎類,父類或超類),包含了基礎類的所有成員變量,更重要的是,複制了基礎類的接口。這就叫繼承。

繼承存在的意義:若沒有繼承,當我們需要一個相似的類的話就要重新建立一個類,而有了繼承,我們隻需去增加成員變量或者修改成員變量。

等價和類似:
 1. 僅僅改善成員變量:可以完全替換基礎類和衍生類
 2. 還添加了新的接口:之前的系統無法調用新的接口。比如房間有開燈和關燈的開關,換了新的燈,新的還可以調節亮度,但是房間隻有開關的功能不能調亮度。
           

上溯造型:基礎類的句柄連接配接衍生類的對象

動态綁定:編譯器和運作期系統負責調用具體的代碼。

抽象的基礎類和接口:基礎類隻為自己的衍生類提供接口。

集合:容納了其他對象的句柄的對象。

繼續器:Iterator,負責選擇集合内的元素,并把它們提供給繼承器的使用者。

繼承器:将集合抽象成一個簡單的序列,繼承器允許我們周遊這個序列,而毋需擔心基礎結構是什麼

繼續閱讀