天天看點

對象導論

OOP-面向對象程式設計

1.1 抽象過程

(1)所有的程式設計語言都提供抽象機制。(2)彙編語言是對底層機器的輕微抽象。(3)“指令式”語言:FORTRAN、BASIC、C等都是對彙編語言的抽象。(4)Smalltalk語言五個特性:1、萬物皆為對象。2、程式是對象的集合,它們通過發送消息來告知彼此所要做的。3、每個對象都有自己的有其他對象所構成的存儲。4、每個對象都擁有其類型。5、某一特定類型的所有對象都可以接收同樣的消息。(5)每一個對象都可以擁有内部資料(狀态)和方法(行為),每個對象在記憶體中有一個唯一的位址。

1.2 每個對象都有一個接口

(1)接口确定了某一特定對象所能發出的請求。

1.3 每個對象都提供服務

(1)将對象看作是服務提供者好處:有助于提高對象内聚性。(2)“高内聚”是軟體設計的基本品質要求之一。

1.4 被隐藏的具體實作

(1)将實作隐藏可以減少Bug。(2)在内的内部設定邊界-三個關鍵字:public、private、protected。

1.5 複用具體實作

(1)組合:使用現有的類合成新的類。視為has-a(擁有)關系。可以帶來極大的靈活性。(2)聚合:組合是動态發生的。

1.6 繼承

(1)父類-超類-基類。子類-繼承類-導出類。

1.7 伴随多态的可互換對象

(1)通過導出新的子類而輕松拓展設計能力是對改動進行封裝的基本方式之一。這種能力可以極大的改善我們的設計,同僚降低軟體維護代價。(2)前期綁定:編譯器将産生對一個具體函數名的調用,而運作時将這個調用解析到将要被執行的代碼的絕對位址,然而在OPP中,程式直到運作時才能确定代碼位址。(3)後期綁定:當向對象發送消息時,被調用的代碼直到運作時才能确定。編譯器確定被調用的方法存在,并對調用參數和傳回值執行類型檢查,但是并不知道将被執行的确切代碼。(4)執行後期綁定:Java使用一小段特殊的代碼來替代絕對位址的調用,這段代碼使用在對象中存儲的資訊類計算方法體的位址。(5)在Java中,動态綁定是預設行為,不需要添加額外的關鍵字來實作多态 。(6)向上轉型:将子類看作是它的父類的過程。

1.8 單根繼承結構

(1)在Java中所有的類都繼承自單一的父類-Object.(2)單根繼承結構好處:1、所有對象都有一個公用接口。2、保證所有對象都具有某些功能,所有對象可以很容易的在堆上建立,參數傳遞得到極大地簡化。3、試垃圾回收器的實作更容易。4、不會因無法确定對象的類型而陷入間距,對系統級操作(如異常處理)很重要。5、給程式設計帶來更大靈活性。

1.9 容器-集合

(1)Java中,List(用于存儲序列),Map(關聯數組,用來建立對象間的關聯),Set(每種對象類型隻持有一個),以及隊列、樹、堆棧等更多構件。(2)選擇容器(集合)的原因:1、不同容器提供了不同類型的接口和外部行為。2、不同容器對于某些操作具有不同的效率。例如兩種List的比較:ArrayList和LinkedList。(3)ArrayList:随機通路元素是花費固定時間的操作。(4)LinkedList:随機選取元素需要在清單中移動,代價高昂,通路越靠近表尾的元素,花費時間越長。(5)如果在序列中間插入一個元素,LinkedList開銷比ArrayList小。1.9.1 參數化類型(1)向上轉型是安全的。(2)向下轉型:更泛化的類型轉型為更具體的類型。除非知道所要處理的對象類型,否則向下轉型幾乎不安全。(3)參數化類型-泛型:<資料類型>

1.10 對象的建立和生命期

(1)如何控制生命周期:1、為了追求最大的執行速度,對象的存儲和生命周期可以在編寫程式時确定,這可以通過将對象置于堆棧(有時被稱為自動變量或限域變量)或靜态存儲區域來實作。犧牲了靈活性。2、在堆的記憶體池中動态建立對象,,直到運作時才能知道需要多少對象,晟敏周期如何,以及具體類型。時間遠遠大于在堆棧中建立存儲空間的時間。(2)Java完全采用了動态記憶體配置設定方式。每當想要建立新對象時,就要使用new關鍵字構造對象的動态執行個體。(3)生命周期:對于允許在堆棧上建立對象的語言,編譯器可以确定對象存活時間,并自動銷毀它。在堆上建立對象編譯器會對它的生命周期一無所知。(4)Java提供了垃圾回收機制,自動發現對象何時不再使用,然後銷毀它。(5)垃圾回收器機制作用:1、減少了所必須考慮的議題和必須編寫的代碼。2、提供了更高層的保障,可以避免記憶體洩漏問題。

1.11 異常處理:處理錯誤

(1)異常處理與程式正常執行路徑并行,在錯誤發生時執行另一條路徑,是以不會幹擾正常的執行代碼,是代碼編寫變得簡單。(2)異常不能被忽略,是以它保證一定會在某處得到處理。(3)異常提供了一種從錯誤狀況進行可靠恢複的途徑,可以進行校正,恢複程式執行,提高程式健壯性。(4)Java内置了異常處理,而且強制使用它,它是唯一可接受錯誤報告方式。1.12 并發程式設計(1)并發:把問題切分成多個可獨立運作的部分(任務),進而提高程式響應能力。(2)線程隻是一種為單一處理器配置設定執行時間的手段。(3)并發的隐患:共享資源,多個并行任務通路同一資源,會出現問題。