天天看點

《C++面向對象高效程式設計(第2版)》——第2章 什麼是資料抽象

第2章 什麼是資料抽象

c++面向對象高效程式設計(第2版)

面向對象程式設計的一項基本任務是建立帶有适當功能的類,并隐藏不必要的細節(即抽象資料)。下面,我們将用一個現實生活中的例子來解釋資料抽象的概念。

絕大多數人都見過影碟播放機(laser disc player)(或ld播放機)。現在,提出一個簡單的問題:設計一個影碟播放機,要求易于使用和修改,可後續添加更多有用的功能。

注意:

如果難以了解影碟播放機,可以用cd播放機代替ld播放機,其設計原理類似。實際上,影碟播放機的功能是cd播放機功能的超集。

我們需要解決的問題是:

(1)面闆上應該提供哪些控件?

(2)為了連接配接到不同的裝置(如擴音器、電視機或計算機),播放機應使用何種輸入、輸出裝置?

(3)遙控器上應該有多少個按鈕?

播放機應該能夠:

根據使用者要求,播放影碟;

向前和向後查找特定的節(如果是cd播放機,則查找特定的音軌);

允許使用者插入和彈出影碟;

根據使用者要求,啟動和關閉播放機;

當播放機播放影碟時,使用者可随時要求暫停;

根據使用者要求,完全停止播放。

下面初步分析一下,在面闆上應提供的使用者控件(開關或按鈕)(見圖2-1)。

先來分析其中一個控件的功能:

play:當我們按下play按鈕時,自然希望影碟播放機開始啟動,并在它所連接配接的電視螢幕上顯示圖像。但是,在其他情況下按下play按鈕,結果是否會不同?

(a)隻有在播放機已接通電源,且power開關為on的情況下,play按鈕才會響應。否則,按下play按鈕不會響應。

(b)如果播放機内無影碟,則play按鈕不會響應。

(c)如果滿足(a)和(b),則播放機内的雷射束被激活,機械驅動系統帶動馬達開始轉動影碟。

(d)播放機内的電子元件讀取影碟上的編碼資訊,将其轉換為視訊信号(在多項信号處理操作後),并将視訊信号傳輸給電視機顯示圖像。cd播放機和ld播放機對碟片的音頻資訊處理方式類似。

《C++面向對象高效程式設計(第2版)》——第2章 什麼是資料抽象

圖2-1

(e)如果加載的影碟格式不正确(例如,如果在pal播放機中放入了ntsc碟片)1,播放機的顯示面闆(或播放機連接配接的電視機螢幕)上會顯示錯誤的消息。

(f)如果滿足以上所有前提條件,則給出一個可視或可聽(或兼而有之)的訓示,表明播放機正在播放。

從這些簡化的步驟中可以看出,隻是按下play按鈕就會啟動播放機内的許多操作。但是,對于使用播放機的使用者而言2,她隻對螢幕上出現的圖像和伴随的音頻資訊感興趣,甚至不會意識到播放機内有一個雷射束!更不會注意到影碟的旋轉或雷射束的活動。當她按下play按鈕後,希望在電視機螢幕上看見清晰的圖像并聽見悅耳的聲音。

作為ld播放機的設計人員,能從這些資訊中獲得什麼?

在使用者看來,ld播放機是一個魔術盒。使用者插入影碟,按下play按鈕,它就能讓與其連通的電視機螢幕上出現畫面。這是ld播放機公認的性質(見圖2-2)。

我們的設計必須從客戶角度出發,不應讓内部的細節打擾終端使用者的使用。在電視出現圖像之前,我們還需要考慮許多其他的事情。

我們已經設計好ld播放機,上面布滿許多小按鈕,其中一個就是play鍵。裝入影碟後按下play按鈕,螢幕上便會出現圖像。無論你相信與否,我們已經抽象了資料部分(即我們已經完成了資料抽象)。

《C++面向對象高效程式設計(第2版)》——第2章 什麼是資料抽象

圖2-2

資料抽象(data abstraction)在忽略類對象間存在差異的同時,展現了對使用者而言最重要的特性。的确,抽象應該對終端使用者隐藏無關緊要的細節,避免暴露有可能分散使用者注意力或與使用環境毫不相幹的細節。

分析ld播放機的設計

(1)我們不會讓雷射束、馬達等部件暴露出來,也不會讓使用者對它們一無所知。我們會提供可視或可聽(或兼而有之)的訓示,顯示播放機的内部工作狀态。

(2)使用者隻需按下play按鈕,即可欣賞影碟中記錄的圖像,不必親自開啟馬達、接通雷射束裝置電源、将其對焦在影碟上等。完全沒必要讓普通使用者這麼做。有些操作相當危險,假如要求使用者手動操作雷射束會怎樣?制造商很快就會被法律訴訟淹沒。(警告:在無任何保護的情況下,暴露在雷射束下非常危險。)

(3)如果使用者在未裝入碟片的情況下,按下play按鈕,播放機既不會開啟雷射束,也不會啟動馬達。我們的設計應該能智能檢測此資訊。實際上,播放機随時都記錄下自身的狀态,并根據相應的資訊做出響應。

(4)如果設計人員将ld播放機的各個零部件拆分,放在桌上,告訴使用者這就是ld播放機,使用者肯定會認為設計人員的精神有問題。設計,或者說抽象,就是把各個大小不一、功能各異的零部件組合起來,在它們之間建立适當的通信機制。進一步而言,設計為使用者提供一個明晰的接口,将組成ld播放機的所有部件(即實作)隐藏,隻顯示使用者操作播放機所需的控件。

繼續閱讀