天天看點

《C++面向對象高效程式設計(第2版)》——1.2 了解對象模型

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

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

了解面向對象程式設計(oop)範式最大的困難之一,是了解類和對象的概念。要靈活運用oop,必須充分了解這些概念。

oop中的基本實體是類。我們繼續以銀行賬戶為例,每個bankaccount類對象都有相同的結構和行為。是以,所有的bankaccount類對象都可以使用makedeposit以及類中聲明的其他操作(即可以通過類的任意對象使用類中的任何操作)。同時所有對象都有自己的私有資料副本(balance、account_number等)。各對象之間的差别取決于儲存在私有資料中的值。例如,bankaccount類的alpha對象中,balance的值可能為500;而bankaccount類的另一個beta對象中,balance的值可能為10000,如圖1-2所示。

對象是類的執行個體(如切好的甜餅)。類僅在程式的源代碼中可見,而對象則參與到程式的運作中,它是類的活執行個體。對象占據記憶體空間,我們可以感受到對象的存在。建立類對象的過程稱為執行個體化對象(instantiating an object)。

在面向過程程式設計中,我們總是讨論調用過程,總是以“調用過程x(或調用x)和調用y”來談論問題(這裡的x和y都指過程)。但是,在oop中,我們說“通過某對象調用x”,而決不會說“調用x或調用y”。假設有一個bankaccount類的對象myaccount,我們說“通過myaccount對象調用makedeposit過程”。換言之,過程通過對象調用。

《C++面向對象高效程式設計(第2版)》——1.2 了解對象模型

圖1-2

沒有對象,不能簡單地調用過程。我們絕不會說“調用過程”,而必須說“通過對象調用過程”。操作(例如存款)必須通過對象調用過程(即函數)才可完成,不可能直接修改他人的資料。

在面向過程程式設計的模型中,程式員檢視資料結構時,很難明白資料結構用于完成什麼工作以及如何使用,甚至不清楚資料結構代表什麼。由于資料結構并不是一個智能的實體,它的目的、用法和限制都難以了解,一些用于正确使用資料結構的資訊被深埋在其他函數中,而這些函數又在别處。面向對象程式設計不會陷入這樣的困境,因為類所要完成的工作全都以公有操作的形式清楚地陳述,而且在别處也不存在獨立的資料結構。事實上,客戶看不見獨立的資料結構,客戶所能見到的是類和一組清晰定義的操作。資料結構(隐藏在類内部)以及它能執行的操作已構成一個整體。換言之,客戶利用類可做之事已在類中詳細地說明,客戶無需到别處查找。

繼續閱讀