1. 程式人生 > >對象導論

對象導論

java編程思想

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)並發的隱患:共享資源,多個並行任務訪問同一資源,會出現問題。

1.13.1 Web

(1)客戶/服務器系統核心思想:系統中有一個中央信息存儲池,用來存儲某種數據,通常存在於數據庫中,可以根據需要發送給人員或者機器集群。(2)服務器:信息存儲池、用於分發信息的軟件以及信息與軟件所駐留的機器或機群的統稱。(3)中間件降幅在分散給在服務器端的其他機器,將延遲最小化。提高可維護性。(4)Web就是一臺巨型服務器。(5)客戶端編程:引入在客戶端瀏覽器中運行程序的能力。


本文出自 “莫等閑” 博客,請務必保留此出處http://david95.blog.51cto.com/9976577/1922943

對象導論