C++中的Object, Class & Instance

C++中,經常用到對象(Object)、類(Class)和實例(Instance)等概念,一直對這幾個概念有些混淆,今天算是整理一下自己的思路,談談自己對這幾個概念的看法吧;希望不當之處大家能夠指出,也歡迎大家看看自己的看法。

從其定義來看,對象是指一個能完成特定操作,具有特定屬性的實體(Component);類是具有相同屬性對象的集合(Group of Objects)。實例則往往被理解爲一個對象的具體化。

對象更多的是一個概念,在象SmallTalk這類純粹的OO語言中,所有東西都是對象(MetaClass, Class, Instances);而類在不過是一個特殊的、能作爲模板創建實例的對象。(一直想弄個SmallTalk來玩玩,但終究沒有時間和精力去學習。)

C++中,“對象”概念往往被模糊化,它不是一個能包括一切的概念,而在某些環境下成爲能和類與實例相互替換的概念。

原因之一,或許是在C++對類的定義。C++把類定義爲一個抽象數據類型(ADT)。而ADT只是一個實現上的概念,它在運行時並不存在一個對象所應該具有的特徵(屬性和行爲)。雖然C++中引入了運行時類型信息(RTTI,參看type_info類),但仍然很難把類當成一個對象。從這個角度來說,在實現時類可以看作是對象概念的代名詞。

原因之二,個人覺得應該是和使用這些概念的上下文有關。在使用C++時(包括設計模式),往往需要考慮兩個層次的抽象:
1. 編碼(實現)時的抽象
2. 運行時的抽象

在實現時,C++中,無疑類的概念和對象的概念是一致的,而實例則可以理解爲一個類的實例化或一個對象的具體化;對應與Design Pattern,那些結構化的模式(Structural Patterns)更適合與這一層次的抽象。

在運行時,個人覺得對象更多的是和實例等同的。我們說某個對象和另外一個對象交互更多的是在表達某個類的一個實例和另一個類的一個實例進行交互,這個時候,對象不再是一個概念,而是被具體化了。而設計模式中的行爲模式(Behavioral Patterns)則更適合與這個層次的抽象。

以上是我對這幾個基本概念的理解,請大家批評指教!
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章