Java編程思想總結(一)對象導論 1.1 抽象過程 萬物皆對象。 程式是對象的集合(即:類),他們通過發送消息(調用方法)來告知彼此要做的。 每個對象都有自己的由其他對象所構成的存儲(引用其他對象或基本類型,即組合)。 每個對象都擁有其類型。每個類最重要的區別於其他類的特征就是“可以發送什麼樣的消 ...
Java編程思想總結(一)對象導論
1.1 抽象過程
- 萬物皆對象。
- 程式是對象的集合(即:類),他們通過發送消息(調用方法)來告知彼此要做的。
- 每個對象都有自己的由其他對象所構成的存儲(引用其他對象或基本類型,即組合)。
- 每個對象都擁有其類型。每個類最重要的區別於其他類的特征就是“可以發送什麼樣的消息給它”(即調用方法)。
- 某一特定類型的所有對象都可以接受同樣的消息。
- 對象具有狀態(成員屬性)、行為(成員方法)和標識(引用的名稱)。每個對象在記憶體中都有唯一的一個地址。
1.2 每個對象都有一個介面
- 在程式執行期間具有不同的狀態而其他方面都相似的對象會被分組到對象的類中。
- 每個對象都屬於定義了特性和行為的某個特定的類。
- 類描述了具有相同特性(數據元素)和行為(功能)的對象集合,所以可以把類當成是一個數據類型,例如所有浮點型數字具有相同的特性和行為集合。二者的差異在於,程式員通過定義類來適應問題,而不再被迫只能使用現有的用來表示機器中的存儲單元的數據類型。
- 每個對象都只能滿足某些請求,這些請求有對象的介面所定義,決定介面的便是類型(即對象能夠調用什麼方法)。
- 向某個對象“發送消息”(產生請求),這個對象便知道此消息的目的,然後執行對應的程式代碼。
- 為了向對象發送消息,需要聲明對象的名稱,然後以圓點符號連接一個消息請求。
1.3 每個對象都提供服務
- 當正在試圖開發或理解一個程式設計時,最好的方法之一就是將對象想象為“服務提供者”,程式本身想用戶提供服務,它將通過調用其他對象提供的服務來實現這一目的。
- 將對象看做都是服務提供者還有一個附帶的好處:它有助於提高對象的內聚性(內聚和耦合是密切相關的,同其他模塊存在高耦合的模塊意味著低內聚,而高內聚的模塊意味著該模塊同其他模塊之間是低耦合。在進行軟體設計時,應力爭做到高內聚,低耦合)。
- 每個對象都有一個它所能提供服務的內聚的集合。在良好的面向對象設計中,每個對象都可以很好的完成這項任務,但是它並不試圖做更多的事情。
1.4 被隱藏的具體實現
- 將程式開發人員按照角色分為類創建者(那些創建新數據類型的程式員)和客戶程式員(那些在其應用中使用數據類型的程式員)是大有裨益的。客戶端程式員的目標是手機各種用來實現快速開發應用的類。類創建者的目標是構建類,這種類只想客戶端程式員暴露必需的部分,而隱藏其他部分。
- 訪問控制的一個存在原因就是讓客戶端程式員無法觸及他們不應該觸及的部分——這部分對於數據類型的內部操作是必須的,但並不是用戶解決問題所需的介面的一部分。
- 訪問控制第二個存在原因是允許庫設計者可以改變內部的工作方式而不用擔心會影響到客戶端程式員。
1.5 復用具體實現
- 最簡單的復用某個類的方式就是直接使用該類的一個對象,還可以將哪個類的一個對象置於某個新的類中。我們稱其為“創建一個成員對象”。新的類可以由任意數量,任意類型的其他對象以任意可以實現新的類中想要的功能的方式所組成。因為是以現有的類合成新的類,所以稱為組合。
- 組合帶來了極大的靈活性。新類的成員對象通常被聲明為private,使得使用新類的客戶端程式員不能訪問他們。這也使得你可以在不幹擾現有客戶端代碼的情況下,修改這些成員。也可以在運行時修改這些對象,以實現動態修改程式的行為。
1.6 繼承
- 在創建了一個類後,及時另一個類與其具有相似的功能,你還是得重新創建一個新類。如果我們能夠以現有類為基礎,複製它,然後通過添加個修改這個副本來創建新類就要好多了。通過繼承便可以達到這樣的效果。
- 一個基類型包含其所有導出類型所共用的特性和行為。可以創建一個基類型來表示某些對象的核心概念,從基類型來導出其他類型,來表示此核心可以被實現的各種不同方式。
- 當繼承現有類型時,也就創造了新的類型。這個新的類型不僅包括現有類型的所有成員(儘管private成員被隱藏了起來,並且不可訪問)。PS:所有private屬性和方法都能被繼承。
- 有兩種方法可以使基類與導出類差生差異:一是直接再導出類中添加新方法;二是改變現有基類方法的行為,也是最重要的方法,稱為覆蓋。
- 繼承只覆蓋基類的方法(而並不添加在基類中沒有的新方法),導出類和基類有完全相同的介面,導出類可以完全被替代為一個基類對象(導出類對象和基類對象可以調用的方法是一樣的)。
- 有時必須在導出類型中添加新的介面元素,這樣也就擴展了介面。這個新的類型仍然可以替代基類,但是這種替換並不完美(父類引用指向子類對象,則子類對象只能調用父類中已有的方法)。
1.7 伴隨多態的可互換對象
- 編譯器不可能產生傳統意義上的函數調用,一個非面向對象編程的編譯器產生的函數調用會引起所謂的前期綁定(即在編譯期間就確定了運行時將調用哪段代碼)。
- 當向對象發送消息時,被調用的代碼直到運行時才能確定。編譯器確保被調用的方法的存在,並對調用參數和返回值執行類型檢查(無法提供此類保證的語言被稱為是弱類型的),但是還不知道將被執行的確切代碼。
1.8 單根繼承結構
- 所有類都繼承於頂級父類Object
1.9 容器
- 一種對象類型,這種對象類型持有其他對象的引用,稱為容器(也稱為集合),可以再運行期間動態的改變容量大小。
- 不同類型的容器提供了個不同的介面和外部行為。
- 不同的容器由於底層結構的不同,對某些操作具有不同的效率(如ArrayList和LinkedList)。
- 根據不同的情況選擇不同的容器,如在一開始使用LinkedList構建程式,而在優化系統性能時改用ArrayList。介面List所帶來的抽象,把在容器之間進行轉換時對代碼產生的影響降到最小限度。
- 參數化機制(即泛型),可以自動定製作用於特定類型上的類,避免向上向下轉型帶來的資源消耗和安全性問題。
1.10 對象的創建和生命周期
- java只允許在堆上創建對象(通過new關鍵字),並且有垃圾回收器以守護線程的方式在適當的時候自動清理不再被使用的對象。
1.11 異常處理:處理錯誤
- 異常提供了一種從錯誤情況進行可靠恢復的途徑,現在不再是只能退出程式,你可以經常進行校正,並恢復程式的執行,這些都有助於編寫出更健壯的程式。
1.12 併發編程
- 程式能夠停下正在做的工作,轉而處理某個其他問題。
- 有時中斷對於處理時間性強的任務是必須的,但是對於大量的其他問題,我們只是想把問題分割成多個可獨立運行的部分(任務),從而提高程式的響應能力。這些彼此獨立運行的部分稱之為線程,上述概念被稱為“併發”。
- 多線程帶來的便利之一是程式員不再關心機器上是由多個處理器還是一個處理器。
- 某個任務鎖定某項資源,完成其任務,然後釋放資源鎖,使其他任務可以使用這項資源,防止多個線程同時訪問同一個資源時帶來的線程安全問題。
1.13 Java與internet
- 此處省略一萬字。。。