我的java觀

我的Java觀

-------------------Android培訓Java培訓、期待和您交流-----------------------

剛剛學習完用面向對象設計方法解決交通燈和銀行業務調度這兩個案例,趁熱打鐵,再結合最近對Java程序設計的學習和理解,首先總結一下我的學習心得。然後對比一下面向對象和麪向過程編程的區別。最後結合我自己的學術背景,用一個趣味類比的方式講一下通過這段時間的學習之後形成的---我的java觀。希望大家批評指正。

 
第一部分:學習心得
 1,設計思路:通過對問題的分析,首先確定由那幾個類需要定義,然後確定每個類具有哪些數據,再根據數據和題目要求,確定每個類上有哪些方法。
 2,輔助手段:畫圖,將複雜的線索或關係直觀化。
 3,代碼編寫: 由外到內,首先定義出一個類的大體輪廓,其中的各個屬性可以在需要時進行添加。
 4,面向接口編程:在兩個問題的解決代碼中都有這樣的代碼:
  (交通燈):private List<String> vechicles=new ArrayList<String>();
  (銀行業務調度):private List queueNumber=new ArrayList();
  即右邊創建的ArrayList實例傳遞給一個List類型變量,我們當然可以直接將List換爲ArrayList,使得左右一致,但是因爲List是ArrayList已經實現的接口類,這樣就使得程序更加靈活,這也是利於面向接口編程的更專業的代碼編寫方式。
 5,優化設計
   a, 提高程序執行效率
if else語句和switch語句的選擇:爲什麼if else語句 的執行效率比switch語句低?
if語句適用範圍比較廣,只要是boolean表達式都可以用if判斷;switch語句支持的數據類型只有以下幾種:int,byte,char,short,枚舉型或字符型表達式。所以兩者在比較時就限定在這些類型的範圍內。
看下面的代碼:
if(a==2)
//code
else if(a==4)
//code
else
//code
對比:
switch(a){
case 2:
//code
case 4:
//code
//code
}
在if語句中每一句都是獨立的,在if和else if兩句中每次比較都會將條件中的兩個數從內存中取出讀入寄存器進行比較,而a不變卻被讀入了兩次,而在switch語句中首先確定要比較的是a,它只被讀取一次,後面每次比較都知道需要比的對象是a,
所以在需要多個條件判斷的情況下,如果可以使用switch語句,會比if節約許多資源,有利於代碼執行效率。
當然switch語句只能取代if語句中的部分功能。比如有限的數據類型、只可以進行等式比較等等。所以可以根據自己的需要來選擇合適的方式。
    b,提高結構緊湊度
類的繼承實現
如果幾個類的功能中只有一個或幾個功能有差異,其他行爲相同,那麼可以先定義一個類,將這有差異的一個或幾個功能抽抽提出來,做成方法,然後讓其他幾個相關的類從這個類繼承,即作爲這個類的子類,然後在子類中覆蓋父類的這一個或幾個方法即可。
   常量處理:一般將程序中使用的多個常量組合在一起形成一個類,便於數據的管理的程序代碼的緊密。
    c,特定設計模式的使用
  單例設計模式:
  在銀行調度業務中的NumberMachine.java就使用了單例設計模式:構造方法私有化,所以不可以直接實例化;具有一個私有的靜態變量,用於保存這個類唯一的實例對象,對於外部對象不可見,只可以通過getInstance方法纔可以獲得;自身提供了static方法(getInstance())返回自己的一個實例,
  這也是外部對象獲得單例類實例的唯一途徑。getInstance方法會首先檢查這個私有的變量是否已經被初始化,如果沒有,就創建一個實例保存到這個變量中,然後返回這個實例;如果已經被初始化,則直接返回這個實例。
  單例設計模式的好處:控制資源的使用,通過線程同步來控制資源的併發訪問;控制實例產生的數目,節約資源;在不建立直接關聯的條件下,讓多個不相關的線程間實現通信,即數據共享。
  別人提到:配置信息類、管理類、控制類、門面類和代理類通常被設計爲單例類,Java中的Struts、spring框架、.Net的Spring.Net框架,以及PHP的Zend框架都大量使用了單例模式。(這些內容我還不是很瞭解,先將這些信息保存下來,以後隨着接觸的增加再慢慢理解。)
 8,線程調度和java線程併發庫的應用。


* 第二部分:對面向對象編程的大衆化理解
 在面向對象的程序設計中,一切都是對象。也就是說,通過對問題本身進行分析,可以將每個問題分解成若干個相對獨立又統一的模塊。每個模塊可以由一個對象(類)來代表。
 每個對象中保存着數據,同時提供了處理這些數據的方法。有時一個對象單獨就可以完成一定的功能,但大多數情況下,每個對象需要和其他對象進行通信,共同完成一個功能。
 每個對象都有一個類型,即類Class,這個對象就是這種類的一個實例。一個類可以從其他類繼承來,也可以派生自己的子類,在保持特定屬性不變的條件下,通過方法的覆蓋,刪減和添加可以實現功能的特定化或者多樣化,使得程序的靈活性更高。通過各種修飾符可以決定哪些數據、方法可以直接訪問,哪些不可以,而爲了保證對對象的使用,又可以通過特定的方式(如反射)來對許多對象中不可見的數據和方法進行間接的訪問。這大大提高了程序的安全性。
“面向過程的編程語言是以過程爲中心已算法爲驅動的,而面向對象的編程語言是以對象爲中心以消息爲驅動的。用公式表示,面向過程的編程爲:程序=算法+數據,而面向對象的語言爲:程序=算法+數據。
面向過程就是分析解決問題所需要的步驟,然後用函數將這些步驟一步一步的實現,使用的時候依次調用。
面向對象就是把構成問題事物分解成各個對象,用於描述某個事物在整個解決問題的步驟中的行爲。”

   
  
 第三部分:我的Java觀
 爲了提高學習Java的樂趣,以及將Java基礎中的各個知識串起來,我將生物界和Java的內容進行了一下類比:
 生物界{植物界,動物界{無脊椎動物,脊椎動物{魚,兩棲動物,爬行動物,鳥類,哺乳類{老鼠,人,……}}},……}
 Java:package、class、Interface、Field、method…………
 類比:左邊是Java內容,右邊是生物特徵
 類的屬性(字段,方法,構造方法等)-----------生物體(基因組,表型,生理特徵和功能等)==>這個東西是什麼,有什麼,可以幹什麼
 類繼承關係:類內部,類之間------------例如生物的親緣關係和進化關係
 類之間的相互通信-------------例如食物鏈關係
 接口------------例如不同生物共享的環境(植物,氣候,海洋,陸地等等)
 垃圾處理器-------------例如生物的生死或者人類社會中職場的裁員等
 線程-----------例如生物捕食過程(羣體或者單體作戰)、作戰計劃的指定等
 代理-----------人類社會業務,例如產品的市場分佈和銷售等
I/O------------我們的血液循環,消化系統等(不管吃了什麼在身體內主要就是那些基本的分子類型在起作用,類似於Unicode)
 內部類-----------例如羣體生活生物的等級關係
 註解-----------例如商品標籤等
 異常---------例如人類的疾病和治療等
JVM------------就像實際操作着生物界各種表現運行的分子、原子、物理化學層面的基礎
……
當然這些見解不一定準確,但的確幫我更系統的理解Java這門語言和麪向對象的編程思想。希望大家可以批評指正,或者找出更有趣的類比方式,提高學習的積極性和趣味性。期待向大家學習。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章