天天看點

《C++面向對象高效程式設計(第2版)》——2.1 接口和實作的分離

本節書摘來自異步社群出版社《c++面向對象高效程式設計(第2版)》一書中的第章,第2.1節,作者: 【美】kayshav dattatri,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

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

細心的讀者可能已經注意到,在上一段中,我們使用了接口(interface)和實作(implementation)兩個術語。傳統的面向過程程式設計思想認為,接口和實作差異不大。但是在面向對象程式設計中,整個設計過程都圍繞着接口進行。

通常,我們在現實中使用現有對象時,都會注意到眼前的事物。駕駛汽車時,看到的是不同的儀表盤(速度表、油料表、溫度表)、方向盤、油門踏闆等。當你踩下油門(也叫做節流閥或加速器)時,希望汽車移動(假設已挂擋,且手刹已松開),此時汽車内部發生了許多事情:

(1)從油箱中向化油器(或者噴油器)中泵油。

(2)化油器或噴油器将汽油送至發動機汽缸中。

(3)配電器為火花塞供電,點燃燃料。

(4)活塞帶動曲軸,驅動車輪轉動。

如果密切關注以上這些細節會讓駕駛員分心。把電噴式發動機換成化油器發動機,對于駕駛員而言意義不大,他希望的是汽車的各個操作環節流暢。另外,改變汽車内部燃料供給機制,也不會影響駕駛員的駕駛技術(或習慣)。

當駕駛員檢視速度表時,可以很容易地獲知汽車的準确速度。至于速度表如何檢測速度,與駕駛員毫不相關。順帶一提,速度表通過機械耦合機制或電子機械系統(電子和機械系統的結合)測量汽車的速度。

通過以上分析,對駕駛員而言,真正重要的是她從外部看到或感覺到的事物,而不是它們在汽車内部如何運作。類對象的接口支援外部視圖,接口就是使用者觀察的對象視圖,以及使用者可以用接口做什麼(也包括接口對使用者做什麼)。是以從使用者角度看,油門踏闆控制汽車的速度,速度表顯示汽車目前的速度。與此類似,使用者将ld播放機看做是接受影碟并将編碼圖像再現至電視機螢幕上的裝置。

當我們設計接口時,應最大程度地滿足使用者的要求,這些使用者也稱為客戶(client)。所謂類的客戶,就是使用類且不知道(或不用關心)類内部運作的人。客戶可建立類的對象,并通過接口對其進行操作。

繼續閱讀