亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        簡(jiǎn)單談?wù)劷M件及COM---我的第一帖

        字號(hào):

        轉(zhuǎn)眼間,在編程道路上的行走已經(jīng)快一年了,心里突然覺(jué)得有許多話想拿出來(lái)與大家分享一下.我覺(jué)得我的路走得很不一般,首先我是學(xué)無(wú)線電出身的.與編程有點(diǎn)接觸,但并不是看家本領(lǐng).好閑話少述,我們進(jìn)入正題吧,不然斑竹要?jiǎng)h帖了,我的話題是屬于C++,希望我沒(méi)走錯(cuò)屋子,作為我在這個(gè)壇子里的第一帖,我想談?wù)勎覍?duì)組件的一些看法.
            簡(jiǎn)而言之,組件就是對(duì)象。C++中沒(méi)有組件的概念,但它可以做出各種各樣的組件,C++是一門語(yǔ)言,而組件是一個(gè)編程模型,Delphi中叫部件,而在Visual BASIC中叫控件。
            組件是對(duì)數(shù)據(jù)和方法的簡(jiǎn)單封裝,C++能夠?qū)崿F(xiàn)組件就因?yàn)镃++ 對(duì)象模型具備這樣的能力。組件可以有自己的屬性和方法。屬性是組件的數(shù)據(jù)存貯單位。方法則是組件的一些簡(jiǎn)單而可見(jiàn)的功能。
            為了說(shuō)明白話題,我來(lái)具個(gè)例子,我想開發(fā)一個(gè)工程,這個(gè)工程的功能是簡(jiǎn)單得不能再簡(jiǎn)單的計(jì)算.設(shè)這個(gè)實(shí)現(xiàn)1+1=2的組件的方法為int Add(int var1=1, int var2=1),實(shí)現(xiàn)了這個(gè)組件后,我把這個(gè)組件買過(guò)來(lái),進(jìn)行二次開發(fā).也就是說(shuō)我的應(yīng)用程序用了這個(gè)組件,但我在用的過(guò)程中我得到的并不是原碼,只是二進(jìn)制的可執(zhí)行碼,和相關(guān)的頭文件(.H什么的…),還有庫(kù)文件(.lib什么的),最后一個(gè)是.dll文件.我在應(yīng)用中用的只是Add這個(gè)方法,它的實(shí)現(xiàn)我不知道,但它行為的結(jié)果,我可以接受,因?yàn)槲乙?+1=?時(shí),它不會(huì)告訴我等于11.但是總于有那么一天(或者真有)1+1不等于2了,我就要向賣給我這個(gè)組件的開發(fā)商說(shuō):”我說(shuō)朋友呀,你最初賣給我的東西,過(guò)時(shí)了,現(xiàn)在都何年代了,怎么1+1從你的產(chǎn)品出來(lái)的還是等于2呢?我現(xiàn)在呀,沒(méi)時(shí)間再改我原先的應(yīng)用了,你得負(fù)責(zé),你得讓我原來(lái)的應(yīng)用得出1來(lái)呀,不然我以后不再與你合作了”,這時(shí)開發(fā)商就回去改變了它原先的組件,然后把它交給我,我當(dāng)然不會(huì)再為我原先的應(yīng)用重新編譯拉,鏈接拉什么的…我只是把它給我的.dll覆蓋掉老到掉牙的那分.dll.然后我執(zhí)行我的老應(yīng)用程序,奇跡出現(xiàn)了,1+1真的不是2了,而是1或作別的什么的.
            這就是組件的一般用法,不過(guò)它感人的地方遠(yuǎn)遠(yuǎn)不只這些呀.接下來(lái)我要來(lái)點(diǎn)術(shù)語(yǔ)了和細(xì)節(jié)了.
            首先提個(gè)問(wèn)題(看來(lái)我的問(wèn)題挺多的,呵呵)
            為什么COM (Common Component Objce)只能提供接口(Interface接口是一個(gè)包含方法入口地址的表格,但更確切的說(shuō),它就是一個(gè)指向表格的指針變量的一個(gè)地址,是不是不好理解)給用戶訪問(wèn)對(duì)像,而不能直接訪問(wèn)Object的數(shù)據(jù)成員呢?
            這個(gè)問(wèn)題的答案是: 這并不是絕對(duì)不可以直接訪問(wèn)Object的數(shù)據(jù)成員,要訪問(wèn)得有條件:
            1 客戶端的應(yīng)用程序必須由支持指針的語(yǔ)言來(lái)開,例如C++, 但VB不可以.
            2 一旦一個(gè)組年已經(jīng)生成,也就是編譯,鏈接成.dll文件后,就不能再改變組件的數(shù)據(jù)成員了(例如,給對(duì)像加一個(gè)變量,刪除一個(gè)等),甚至把數(shù)據(jù)員聲明順序也不能改變,但接口可以擴(kuò)充,記住原來(lái)的接口也不可以改變的,但可以擴(kuò)充.(因?yàn)閿U(kuò)充接口,和改變接口的實(shí)現(xiàn),是COM較為討人喜歡的地方之一)
            要我接受這么苛刻的要求,就相當(dāng)于,1+1永遠(yuǎn)等于2了,不能再改變了,也就是,開發(fā)商不會(huì)再為我提供更新的服務(wù)了.如果要,的話,你得重新編譯鏈接,那么我還開發(fā)什么組件呀,開發(fā)商直接給我源碼得了唄.這樣看來(lái)我們最還是不要直接訪問(wèn)組件對(duì)像的數(shù)據(jù)成員好了.這也是COM最基本特性之一.
            為什么會(huì)這樣呢?
            這又得從COM所采用的對(duì)象模型談起(真累呀!).不知道是巧合還是微軟有意思將COM模型建立在C++對(duì)象模型的基礎(chǔ)之上.也就是說(shuō)現(xiàn)在我們的重點(diǎn)是放在C++對(duì)象模型上了.眾所周知C++對(duì)象模型的特點(diǎn)是:
            1 空間和存取時(shí)間的效率較好(最起碼要比CORBA和SOM所采取的對(duì)像模型要好)
            2 靈活性及彈性確不夠理想,例如,不能直接訪問(wèn)對(duì)象的數(shù)據(jù)成員就表明彈性不足(但CORBA 和SOM確可以)
            通常情況下,效率和彈性是一對(duì)死對(duì)頭,兩者都很Radical(極端).如果你要效率,那么你會(huì)去相應(yīng)的彈性,反之亦然.就好像VB比較可人,但運(yùn)行起來(lái)要比C++大哥慢許多一樣.但它們誰(shuí)也不指望誰(shuí)要消失.因?yàn)?各有各的長(zhǎng)處就是了.
            至于,C++對(duì)像模型(COM采用),表格驅(qū)動(dòng)對(duì)像模型(CORBA和SOM采用)我想下次再說(shuō)吧,我為我的帖子寫了我前提到的組件(實(shí)現(xiàn)Add), 但不知道為什么原因總傳不上來(lái),如果誰(shuí)有興趣就跟貼吧,大家多頂幾下,想必這是我的第一貼,呵呵