天天看點

《Java語言導學(原書第6版)》一2.1 對象

對象是了解面向對象技術的關鍵概念。生活中有很多對象的例子,如狗、桌子、電視機、自行車等。

生活中的對象都有兩個共同的屬性:狀态和行為。狗有名字、顔色、品種等狀态,以及犬吠、抓東西、搖尾巴等行為。自行車有目前檔位、目前腳踏頻率、目前速度等狀态和換檔、變換踏闆頻率、刹車等行為。根據面向對象程式設計的思路來确定生活中對象的狀态和行為是很好的方法。

前面已經介紹了生活中的幾個對象。對每個對象,都有兩個問題:“它處于什麼狀态”和“它會發生什麼行為”。仔細觀察并寫下這些狀态和行為,會發現生活中的對象差别很大。例如,台燈隻有兩個狀态(開、關)和兩種行為(打開、關閉),而收音機有其他狀态(開、關、目前音量、目前電台)和行為(打開、關閉、提高音量、降低音量、搜尋、掃描、調頻)。而且,有些對象還包含其他對象。這些觀察結果都可以翻譯成面向對象程式。

就概念而言,軟體對象與生活中的對象類似,也包含狀态和行為兩大屬性。如圖2-1所示,軟體對象用字段(field,有些程式語言稱為變量,variable)存儲狀态,用方法(method,有些程式語言稱為函數,function)定義行為。方法對對象的内部狀态進行操作,是對象之間通信的基本機制。這種隐藏對象内部狀态,要求所有通信都通過對象的方法實作的行為,是面向對象程式設計的基本原則,通常稱為資料封裝。

圖2-2以自行車為例來說明。外界如何使用對象,取決于其狀态(目前檔位、目前腳踏頻率、目前速度)和改變狀态的方法。如果自行車隻有6個檔位,就不能将其換成低于1或大于6的檔位。

   

  

《Java語言導學(原書第6版)》一2.1 對象

将代碼建構成獨立的軟體對象,具有以下優點:

1)子產品化。每個對象的源代碼,其編寫和維護都獨立于其他對象。對象一旦建立,就很容易在系統内傳送。

2)資訊隐藏。使用者隻能與對象的方法互動,對象的内部實作細節對外界是隐藏的。

3)代碼重用。如果對象已經建立(可能是其他開發人員編寫),就可以直接使用該對象。這樣一來,寫程式時就可以直接調用那些由專家實作、測試和調試通過的複雜、特定功能的對象。

4)可插拔和易于調試。當個别對象出問題時,可以将其從程式中移除,并插入另一個對象來替換它。這與現實生活中的維修機制類似。比如說,機器的螺栓壞了,隻需更換該螺栓,而不需要更換整台機器。