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