C++中,經(jīng)常用到對象(Object)、類(Class)和實例(Instance)等概念,一直對這幾個概念有些混淆,今天算是整理一下自己的思路,談?wù)勛约簩@幾個概念的看法吧;希望不當(dāng)之處大家能夠指出,也歡迎大家看看自己的看法。
從其定義來看,對象是指一個能完成特定操作,具有特定屬性的實體(Component);類是具有相同屬性對象的集合(Group of Objects)。實例則往往被理解為一個對象的具體化。
對象更多的是一個概念,在象SmallTalk這類純粹的OO語言中,所有東西都是對象(MetaClass, Class, Instances);而類在不過是一個特殊的、能作為模板創(chuàng)建實例的對象。(一直想弄個SmallTalk來玩玩,但終究沒有時間和精力去學(xué)習(xí)。)
在C++中,“對象”概念往往被模糊化,它不是一個能包括一切的概念,而在某些環(huán)境下成為能和類與實例相互替換的概念。
原因之一,或許是在C++對類的定義。C++把類定義為一個抽象數(shù)據(jù)類型(ADT)。而ADT只是一個實現(xiàn)上的概念,它在運行時并不存在一個對象所應(yīng)該具有的特征(屬性和行為)。雖然C++中引入了運行時類型信息(RTTI,參看type_info類),但仍然很難把類當(dāng)成一個對象。從這個角度來說,在實現(xiàn)時類可以看作是對象概念的代名詞。
原因之二,個人覺得應(yīng)該是和使用這些概念的上下文有關(guān)。在使用C++時(包括設(shè)計模式),往往需要考慮兩個層次的抽象:
1. 編碼(實現(xiàn))時的抽象
2. 運行時的抽象
在實現(xiàn)時,C++中,無疑類的概念和對象的概念是一致的,而實例則可以理解為一個類的實例化或一個對象的具體化;對應(yīng)與Design Pattern,那些結(jié)構(gòu)化的模式(Structural Patterns)更適合與這一層次的抽象。
在運行時,個人覺得對象更多的是和實例等同的。我們說某個對象和另外一個對象交互更多的是在表達某個類的一個實例和另一個類的一個實例進行交互,這個時候,對象不再是一個概念,而是被具體化了。而設(shè)計模式中的行為模式(Behavioral Patterns)則更適合與這個層次的抽象。
以上是我對這幾個基本概念的理解,請大家批評指教!
//bow
posted on 2007-03-22 10:34
Neal 閱讀(6101)
評論(5) 編輯 收藏 引用