Java面向對象雜談一

     1)抽象過程

    人們所能夠解決問題的複雜性直接取決於抽象的類型和質量。

    彙編語言是對底層機器的輕微抽象,接着出現許多所謂“命令式”語言(basic,c)都是對彙編語言的抽象,這些語言在彙編基礎上有了大幅度的改進,但是它們所作的主要抽象仍然要求在解決問題時要基於計算機結構,而不是基於所要解決的問題的結構來考慮。開發者必須建立在機器模型和實際待解決問題的模型之間的關聯,建立這種映射是費力的,而且這不屬於編程語言所固有的功能,這使得程序難以編寫,維護代價高昂等。不過這些抽象方式對於它們所要解決的特定類型的問題都是不錯的解決方案,但是一旦超出其特定領域,它們就力不從心了。

    對比而言,面向對象的方式,程序可以通過添加新類型的對象使自身使用於某個特定問題.。OOP允許根據問題來描述問題,而不是根據允許解決方案的計算機來描述問題。但是它仍然與計算機有聯繫:每個對象看起來都有點像一臺微型計算機----它具有狀態,操作,用戶可以要求對象執行這些操作。

 

    2)萬物皆對象

    理論上講,你可以抽取待求解問題的任何概念化構建(狗、建築物、服務等),將其表示爲程序中的對象。

 

    3)每個對象都擁有其類型

    每個類最重要的區別於其他類的特性就是“可以發送什麼樣的消息給它”。

 

    4)某一特定類型的所有對象都可以接收同樣的消息

    因爲 “圓形” 類型的對象 同時也是 “幾何形” 類型的對象,所以一個 “圓形” 對象必定能接收發送給 “幾何形” 的消息。

 

    5)對象的簡潔描述

    對象具有狀態、行爲、和標識。這意味着 每一個對象都可以擁有內部數據(她們給出了對象的狀態)和方法(它們產生行爲),並且每一個對象都可以唯一的與其他對象區分開來,具體的說,就是每一個對象在內存中都有一個唯一的地址。

 

    6)抽象數據類型(類)

    抽象數據類型的運行方式與內置類型幾乎完全一致:你可以創建某一類型的變量(按照面向對象的說法,稱其爲對象或實例),然後操作這些變量(稱其爲發送消息或請求,對象就知道要做什麼)。

    因爲類描述了具有相同特性(數據元素)和行爲(功能)的對象集合,所以一個類實際上就是一個數據類型,例如所有浮點型數字具有相同的特性和行爲集合。二者的差異在於,程序員通過定義類來適應問題,而不再被迫只能使用現有的用來表示機器中的存儲單元的數據類型。可以根據需求,通過添加新的數據類型來擴展編程語言,編程系統欣然接受新的類,並且像對待內置類型一樣的照管它們和進行類型檢查。

 

    7)方法

    隸屬於此對象的、用來接收你發給此對象的消息的函數

 

    8)每個對象都提供服務

    當正在試圖開發或理解一個程序設計時,最好的方法之一就是將對象想象爲 “服務提供者” 。程序本身將向用戶提供服務,它將通過調用其他對象提供的服務來實現這一目的。你的目的就是去創建(或者最好是在現有的代碼庫中尋找)能夠提供理想的服務來解決問題的一系列對象。

將對象作爲服務提供者看待是一件偉大的簡化工具,這不僅在設計過程中非常有用,而且當其他人試圖理解你的代碼或重用某個對象時,如果他們看出了這個對象所能提供的服務的價值,它會使得調整對象以適應其設計的過程變得簡單的多。

 

    9)被隱藏的具體實現

    客戶端程序員的目標是收集各種用來實現快速應用開發的類。類創建者的目標是構建類。這種類只向客戶端程序員暴露必需的部分,而隱藏其他部分。爲什麼要這樣呢?因爲加以隱藏,那麼客戶端程序員將不能訪問它,這意味着類創建者可以任意的修改被隱藏的部分,而不用擔心對其他人造成音響。被隱藏的部分通常代表對象內部脆弱的部分,它們容易被粗心的或不知內情的客戶端程序員所毀壞,因此將隱藏實現起來可以減少程序bug

 

    10)訪問控制

    訪問控制存在的原因一:就是讓客戶端程序員無法觸及他們不該觸及的部分----這些部分對數據類型的內部操作來說是必需的,但並不是用戶解決特定問題所需的接口的一部分。這對於客戶端程序員來說其實是一項服務,因爲他們可以很容易的看出哪些東西對他們來說很重要,而哪些東西可以忽略。

    訪問控制存在的原因二:就是允許庫設計者可以改變類內部的工作方式而不用擔心會影響到客戶端程序員。例如:你可能爲了減輕開發任務而以某種簡單的方式實現了某個特定的類,但稍後發現你必須改寫他才能使其允許的更快。如果接口和實現可以清晰的分離並得以保護,那麼你就可以輕而易舉的完成這項工作。

 

    11)繼承

    繼承使用基類型和導出類型的概念表示了這種類型之間的相似性。一個基類型包含所有導出類所共享的特性和行爲。可以創建一個基類型來表示系統中某些對象的核心概念,從基類型中導出其他類型,來表示此核心可以被實現的各種不同方式。

 

    12)覆蓋

    你可以說 “此時,我正在使用相同的接口方法,但是我想在新類型中做一些不同的事情”。

 

    13)後期綁定

    面向對象程序設計語言使用了後期綁定的概念。當向對象發送消息時,被調用的代碼直到運行時才能確定,編譯器確保被調用方法的存在,並對調用參數和返回值執行類型檢查,但並不知道將被執行的確切代碼。

 

    14)向上轉型

當Circle被傳入預期接收Shape的方法中,究竟會發生什麼?由於Circle可以被看作是Shape,也就是說發送給Shape的任何消息,Circle都能接收,那這麼做完全是安全且合乎邏輯的。

 

    15)單繼承結構

    單繼承結構保證所有對象都屬於同一個基本類型,可以在每個對象上執行某些基本操作。所有的對象可以很容易的在堆上創建。

    單繼承結構使得垃圾回收器的實現變得容易很多,而垃圾回收器正是Java對於C++的重要改進之一。由於所有對象都保證具有其類型信息,因此不會因爲無法確定對象的類型而陷入僵局。

 

    16)對象生命週期

    垃圾回收器 “知道” 對象何時不再被使用,並自動釋放對象所佔用的內存。這一點同所有對象都是繼承自單根基類Object以及只能以一種方式創建對象(在堆上創建)這兩個特性結合起來,使得用Java編程較用C++編程要簡單的多。

 

    17)異常處理:處理錯誤

    大多數錯誤處理機制的主要問題在於,它們都依賴於程序員自身的警惕性,這種警惕性來源於一種共同的約定,而不是編程語言所強制的。如果程序員不夠警惕,這些機制就很容易被忽視。

    異常是一種對象,它從出錯點被 “拋出” ,並被專門設計用來處理特定類型錯誤的響應的異常處理器 “捕獲”。異常處理就像是與程序正常執行的路徑是並行的、在錯誤發生時執行的另一條路徑 。

    異常處理不是面向對象的特徵----儘管在面嚮對象語言中異常常被表示成爲一個對象。異常處理在面嚮對象語言出現就已經存在了。

 

    18)併發編程

    同一時刻處理多個任務的思想。

    有一個隱患:共享資源。如果多個並行任務都要訪問同一項資源,那麼就會出問題。例如:兩個進程不能同時向一臺打印機發送消息。爲了解決這個問題,可以共享的資源(例如打印機),必須在使用期間被鎖定。因此整個過程是:某個任務鎖定某項資源,完成其任務,然後釋放資源鎖,使其他任務可以使用這項資源。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章