專利名稱:使特性與對象相關聯(lián)的系統(tǒng)和方法
技術領域:
本發(fā)明一般涉及軟件應用程序,尤其,涉及管理在軟件應用程序中的對象特性的機制。
(2)背景技術當今大多數(shù)編程模型都支持類別的概念。一般在具有分支的分層樹中構成這些類別,所述分支表示在類別層次中的不同類別。當兩個分支處于不同級別時,較低的分支表示子類。子類繼承從與上分支(例如,父類)相關聯(lián)的類別來的信息。當兩個分支處于相同級別時,把類別稱為姐妹類。為了下述討論的目的,可以分別使用術語下級和上級來指出子類和父類。在層次中最上面的分支表示在分層類別樹中的基本類。一般,在每個類別中的信息包括特性、方法和事件。特性描述與類別相關聯(lián)的特征。例如,按鈕類可以具有諸如寬度、背景顏色、字體類型、可見性和按下之類的特性。當建立這些類別中的一個實例時,就創(chuàng)建該類別的對象。在對象中的每個特性都有相關聯(lián)的值,在運行時間操作期間,可以查詢和設置該值。如果語法有較強的代表性,則可以期望這個查詢和設置的值符合特定的數(shù)據(jù)類型。希望語法具有較強的代表性,因為可以在運行時間操作之前檢測軟件應用程序中的差錯。
一旦類別層次就位,把新功能添加到類別層次的對象中就會出現(xiàn)問題。在一種編程模型中,把新功能強加到基本類中。當這樣做時,基本類變成極大(例如,一百種方法、五十個特性以及二十件事件),這導致對象層次幾乎不可管理。這種編程模型的一個不希望有的結局是在開發(fā)者把所要求的特性實施在他們創(chuàng)建的對象中之前,充分了解在基本類中的特性、方法和事件的數(shù)目對于開發(fā)者來說變成比什么都重要。這種編程模型的再另一個不希望有的結局是由于這些特性值事實上是局部存儲的,存儲器的需求變成極大。因為局部地存儲這些值,用這個編程模型創(chuàng)建的應用程序就不能較好地換算。
這些編程模型還導致對于第三方開發(fā)者的其它問題。希望添加新功能的第三方開發(fā)者必須在層次的底部添加一個子類,層次中的其它類別不可得到新功能。因此,第三方開發(fā)者可能需要把新功能添加到數(shù)個子類??梢韵胂?,這導致代碼復制,它影響了對象層次的可保持性。為了上述原因,極不希望有這種編程模型。
直到有了本發(fā)明,熟悉本技術領域的人員才懂得一種編程模型,該編程模型允許把新功能提供給現(xiàn)有類別層次中的類別而沒有上述缺點。
(3)發(fā)明內容本發(fā)明提供一種機制,該機制允許把新功能提供給類別而無需使新功能變成類別的永久部分。此外,本發(fā)明允許把新功能表示為不是構造到類別中的一個特性。一般,本發(fā)明提供一種機制,使一個類別中的特性與另一個類別相關聯(lián)。這種關聯(lián)是易于修改的,以致可以使其它特性組與所述類別相關聯(lián)。
在一個實施例中,計算機可讀出媒體包括具有第一特性組中的特性的一個對象,所述計算機可讀出媒體進一步包括一種數(shù)據(jù)結構。數(shù)據(jù)結構包括第二特性組中的每一個的定義,并包括至少一個靜態(tài)方法。靜態(tài)方法與第二特性組當中的一個特性相關聯(lián),并包括第一參數(shù)。第一參數(shù)唯一地識別一個特性??刹僮黛o態(tài)方法使一個特性與對象相關聯(lián)而無需指定對象中的一個特性的明確的參考。
在本發(fā)明的一個方面,靜態(tài)方法支持一種打印成黑體的語法。
在本發(fā)明的另一個方面,靜態(tài)方法包括檢索對象的一個值而無需把所述值局部地存儲在對象上。可以從諸如父對象或特性表(property sheet)之類的幾個級別檢索所述值。
本發(fā)明的一個優(yōu)點是把特性分割成一個或多個子集允許特性的每個子集變得更容易保存。本發(fā)明的另外的優(yōu)點是更能擴展對象的層次,并允許開發(fā)者把功能添加到影響基本類和所有下級的對象層次。
本發(fā)明的另外的優(yōu)點是管理對象中特性的存儲變得更有效和方便。
本發(fā)明再另外的優(yōu)點是編程模型在有計劃的或標記的環(huán)境中操作。此外,編程模型在打印成黑體的編程語言(諸如C++和C#)中操作。此外,編程模型支持特性表、變更通知以及值繼承。
本發(fā)明的另外的優(yōu)點是可以同時存在獨立的程序庫,因為由于所附類別的名稱有效地變成特性名稱的一部分而名稱沖突的可能性較小。因此,如果兩個不同的開發(fā)者每人都創(chuàng)建名稱為“顏色”的一個附加特性,則兩個附加特性不會沖突。
(4)
圖1示出可以在本發(fā)明的一個示例實施例中使用的示例計算裝置;圖2是可以與圖1的計算裝置一起創(chuàng)建的示例顯示器;圖3是根據(jù)本發(fā)明的編程模型的圖形表示,所述編程模型允許特性從一種類別附加到另一種類別;圖4示出用于執(zhí)行圖3中示出的編程模型的幾種示例語法;圖5是根據(jù)本發(fā)明的邏輯流程圖,示出設置一個值的一個過程;圖6是根據(jù)本發(fā)明的邏輯流程圖,示出檢索一個值的一個過程。
(5)具體實施方式
簡單地說,本發(fā)明提供一種編程模型,所述編程模型允許把新功能提供給一個類別而無需使新功能變成類別的一部分。此外,本發(fā)明允許把新功能表示為不構造到類別中的一個特性。一般,本發(fā)明提供一種機制,用于使一種類別中的特性與另一種類別相關聯(lián)。在閱讀下面詳細說明之后會明白,本發(fā)明的編程模型把動態(tài)特性提供給對象而無需把特性構造到對象中。
參考圖1,實施本發(fā)明的一個示例系統(tǒng)包括諸如計算裝置100之類的計算裝置。在一種極基本的配置中,計算裝置100一般包括至少一個處理單元102以及系統(tǒng)存儲器104。根據(jù)計算裝置的確切的配置以及類型,系統(tǒng)存儲器104可以是易失性的(諸如RAM)、非易失性的(諸如ROM、快閃存儲器等)、或它們兩者的某些組合。系統(tǒng)存儲器104一般包括操作系統(tǒng)105、一個或多個程序模塊106,并可以包括程序數(shù)據(jù)107。程序模塊106的例子包括來自Redmond的微軟公司的Visual Studio IntelliSense、WA以及利用對象程序庫的其它軟件編程環(huán)境。此外,程序模塊106包括使用軟件-編程環(huán)境創(chuàng)建的軟件應用程序。當在處理單元102上執(zhí)行這些軟件應用程序時,特性引擎根據(jù)本發(fā)明的編程模型處理軟件應用程序。特性引擎可能是操作系統(tǒng)105的一部分,或可能是另一個程序模塊106。通過在圖1中虛線108中的這些元件示出計算裝置100的這種基本配置。
計算裝置100可以具有另外的特征或功能。例如,計算裝置100也可能包括另外的數(shù)據(jù)存儲裝置(可拆卸的和不可拆卸的),例如,諸如磁盤、光盤或磁帶。在圖1中由可拆卸的存儲器109和不可拆卸的存儲器110來示出這種另外的存儲器。計算機存儲媒體可以包括以任何用于存儲信息(諸如計算機可讀出指令、數(shù)據(jù)結構、程序模塊、或其它數(shù)據(jù))的方法或技術實施的易失性和非易失性、可拆卸和不可拆卸媒體。系統(tǒng)存儲器104、可拆卸的存儲器109和不可拆卸的存儲器110是所有計算機存儲媒體的例子。計算機存儲媒體包括,但是不限于,RAM、ROM、EEPROM、快閃存儲器或其它存儲器技術、CD-ROM、數(shù)字通用盤(DVD)或其它光存儲器、磁盒、磁帶、磁盤存儲器或其它磁存儲裝置、或可以用來存儲所需要的信息和可以通過計算裝置100訪問的任何其它媒體。任何如此的計算機存儲媒體可以是計算裝置100的一部分。計算裝置100還具有諸如鍵盤、鼠標、筆、話音輸入裝置、觸摸輸入裝置等輸入裝置112。還可以包括諸如顯示器、揚聲器、打印機之類的輸出裝置114。這些裝置是本技術領域中眾知的,這里不需要用大篇幅來描述。
計算裝置100還可以包括允許所述裝置,諸如通過網(wǎng)絡,與其它計算裝置118進行通信的通信連接116。通信連接116是通信媒體的一個例子。通信媒體一般可以通過計算機可讀出指令、數(shù)據(jù)結構、程序模塊、或在調制數(shù)據(jù)信號中的其它數(shù)據(jù)(諸如載波波形與其它傳遞機制)來實施,并包括任何信息傳遞媒體。術語“調制數(shù)據(jù)信號”是指一種信號,所述信號具有它的一個或多個特征組或按把信息編碼在信號中這樣的方式而改變。作為例子,而不是作為限制,通信媒體包括諸如有線網(wǎng)絡與直接有線連接之類的有線媒體,以及諸如聲音、射頻、紅外線以及其它無線媒體之類的無線媒體。
圖2是可以通過圖1中編程環(huán)境中的應用程序創(chuàng)建的一種示例顯示。當可以在各種環(huán)境中使用本發(fā)明的編程模型時,通過不作為限制的例子,圖2示出在用戶-界面環(huán)境中的編程模型的應用。因此,在這個例子中,圖1中的應用程序中之一創(chuàng)建圖2中示出的顯示200。顯示200包括對話框202。對話框202可以包括許多其它控制(即,對象)。在這個例子中,對話框202包括列表框204、編輯框206以及具有兩個按鈕對象(例如,同意(OK)按鈕210和取消(CANCEL)按鈕212)的容器對象208。如下面將連同圖3進行的更詳細的討論,使用傳統(tǒng)的編程技術,這些對象(例如,202-212)中的每一個都是從基本對象(例如,元類)派生的子對象。此外,根據(jù)本發(fā)明的一個實施例,還可以從節(jié)點類派生每個子對象。如下所述,這個節(jié)點類提供附加特性的“附加”特征。
雖然顯示200的外觀顯現(xiàn)出與使用現(xiàn)有編程模型創(chuàng)建的顯示很相似,但是創(chuàng)建顯示200的機制是十分不同的。在現(xiàn)有的編程模型中,實施顯示200的軟件代碼具有對象的性能和結合在每個對象本身中或父對象之一中的對象外觀兩種特性。然而,如下詳細描述,根據(jù)本發(fā)明,分立的類別提供對象202-212的動作和外觀而無需依靠兩種類別之間的明確的參考。
這允許開發(fā)者修改動作部分或外觀部分而無需修改整個對象。因此,在這個用戶-界面例子中,每個對象分解成兩部分。一部分涉及與對象相關聯(lián)的動作(即,性能),而另一部分涉及對象的外觀(即,繪制)。因為繪制是獨立于對象的特性的,所以可以容易地修改對象的外觀來改變對象顯現(xiàn)的方式。
當所述用戶-界面例子方便地把對象的特性分解成性能組和外觀組時,發(fā)明者已經(jīng)確定可以把各種環(huán)境中許多對象的特性方便地分割成兩個或多個相關的組。然后,根據(jù)本發(fā)明,這些相關組可以“隱含地”相互關聯(lián),以充分地實現(xiàn)所述對象。與現(xiàn)有編程模型比較,這種“隱含地”相關聯(lián)提供幾個優(yōu)點。優(yōu)點之一是第三方開發(fā)者可以方便地修改與他們的應用程序有關的相關組,同時不碰其它組。這大大地簡化了開發(fā)者為了改變對象的功能性而需要知道的信息量。此外,對象層次變得更便于管理。另外的優(yōu)點是減少了存儲器,因為每個對象不需要保存當前狀態(tài)的局部值。而是,將在下面連同圖6一起詳述,當需要時可以從各種源檢索狀態(tài)。
圖3是編程模型300的圖形表示,所述編程模型根據(jù)本發(fā)明提供從一種類別到另一種類別“隱含地”與特性的相關組相關聯(lián)的機制。相似于其它編程模型,本發(fā)明支持基本類302?;绢?02包括與基本類302相關聯(lián)的第一特性集304。此外,基本類302包括方法集306和事件集308。然而,根據(jù)本發(fā)明,從節(jié)點類301派生基本類。節(jié)點類301提供SetValue()方法307(設置值()方法)以及GetValue()方法309(得到值()方法)。
第二特性集324包括在附加類322中。附加類322還包括與第二特性集324中的每一個相關聯(lián)的至少兩種靜態(tài)方法(例如,SetFont()326(設置字體)以及GetFont()330(得到字體))??梢园堰@些靜態(tài)方法考慮為可以訪問一些對象的全球方法,所述一些對象已經(jīng)注冊與靜態(tài)方法相關聯(lián)的特性。提供附加類322的開發(fā)者負責寫入這些靜態(tài)方法326和330中的每一個的代碼。代碼包括到節(jié)點類301提供的方法中之一的調用。例如,對于特定的識別符PropertyID(特性識別符)和給定的字體值,調用SetFont()326的應用程序最終將執(zhí)行到節(jié)點類301中的SetValue()307的調用。SetFont()326傳遞到SetValue()307的調用的參數(shù)將包括SetFont()326調用中提供的特定的識別符PropertyID以及給定的字體值。示例的SetFont()功能可以表現(xiàn)如下SetFont(PropertyID,white(白色)){PropertyID_>SetValue(PropertyID,white);}.
熟悉本技術領域的人員會理解,附加類因此而對于任何附加的特性提供強的類型性。當本發(fā)明支持直接調用SetValue()307的應用程序時,這超過了在編譯期間提供強類型性的優(yōu)點。如前所述,強類型性允許在運行時間操作之前檢測差錯。在另一個實施例中,對于附加特性324中的每一個,附加類322提供另外一種靜態(tài)方法(例如,GetFontID()328(得到字體識別符))??刹僮鬟@種另外的靜態(tài)方法來測試所請求的附加特性是否已經(jīng)注冊。因此,可以使用這個附加靜態(tài)方法328來保證在試圖執(zhí)行集和得到附加特性上的靜態(tài)方法之前應用程序已經(jīng)正確地注冊附加特性。例如,如果GetFontID()328檢測到顏色附加特性尚未注冊,則GetFontID()可能給出一個差錯,可能自動地注冊請求對象的顏色附加特性,等等。
下面是提供延遲注冊的一個示例實施例<pre listing-type="program-listing"> class FontProvider (類別字體提供器) {public static Font GetFont(Node n) (公共靜態(tài)字體得到字體(節(jié)<!-- SIPO <DP n="6"> --><dp n="d6"/>點n)) {return n.GetValue(GetFontID());} (返回n。得到值(得到字體識別符)) public static void SetFont(Node n,F(xiàn)ont newfont) (公共靜態(tài)void設置字體(節(jié)點n,字體新字體)) {n.SetValue(GetFontID(),newFont);} (n。設置值(得到字體識別符(),新字體)) public static DynamicProperty GetFontID() (公共靜態(tài)動態(tài)特性得到字體識別符()) {//Delay register Fontproperty if necessary (如果需要延遲注冊字體特性) if(FontID==null) (如果(字體識別符==零)) { FontID=RegisterProperty(“Font”,typeof(Font),”Arial”,...);(字體識別符=注冊特性(“字體”,(字體)的類型,“Arial”,...) }} private static DynamicProperty FontID=null;(專用靜態(tài)動態(tài)特性字體識別符=零)}</pre>與其它編程模型相似,本發(fā)明支持基本類302的子類(未示出)。為了簡單起見,圖3沒有用圖形示出任何基本類302的子類或任何其它附加類,因此,沒有示出與另外附加類相關聯(lián)的子類。然而,熟悉本技術領域的人員在閱讀下面的說明書之后將能夠參考其它附加類容易地設計具有子類的應用程序。一般,任何類別可以是附加特性的“提供者”,只要類別提供附加特性必需的靜態(tài)方法。
附加類322允許第三方開發(fā)者有能力把特性和功能動態(tài)地添加到他們的應用程序中而無需修改基本類302。與在基本類302中修改特性相似,所添加的特性(例如,第二特性集324)影響整個分層對象樹390中的對象。在應用程序的執(zhí)行期間,不對附加類322創(chuàng)建實例。因此,對于從基本類302創(chuàng)建實例的每個對象,相同的附加類(附加類322)可以把第二特性集324提供給這些對象中的每一個。
在應用程序的運行時間期間,基本對象312變成所創(chuàng)建的實例。此外,一個或多個子對象(例如,子對象340-350)變成所創(chuàng)建的實例。在對象樹390中的對象的創(chuàng)建實例可以通過編程控制(例如,C#),通過標記語言(例如,XML)或通過其它手段。當通過編程控制創(chuàng)建對象樹390時,編譯器一般識別執(zhí)行附加類322的指令是否有任何差錯,諸如不正規(guī)的名稱或數(shù)據(jù)類型。如上所述,附加類322提供強的類型性。因此可以在運行時間之前捕捉到差錯。此外,在應用程序的開發(fā)期間,軟件開發(fā)工具可以檢測差錯。當通過標記語言創(chuàng)建對象樹390時,語法分析程序中斷標記語句。一般,在標記語言中的標志的名稱是相應類別的名稱。
這些子對象340-350中的每一個可以包括子對象(例如,子對象340)中的一個或多個子特性(例如,子特性341)??梢园炎犹匦缘闹荡鎯υ谙嚓P聯(lián)的子對象中。然而,根據(jù)本發(fā)明,子對象不需要有存儲值的局部存儲器。此外,這些子對象340-350中的每一個可以包括與子對象相關聯(lián)的一個或多個附加特性(例如,在虛線框中表示的附加特性352)。如下面連同圖6所詳細描述,附加特性352可以從與子對象350相關聯(lián)的局部存儲器得到它的值,可以通過繼承(例如,基本對象312),通過特性頁(未示出),通過程序設計方法(例如,靜態(tài)方法330連同方法309),以及通過根據(jù)本發(fā)明的其它手段得到它的值。在這些附加特性的值與子對象相關聯(lián)的同時,這些值的存儲一般不是子對象的一部分。
再有,圖3示出用戶-界面環(huán)境中的編程模型。因此,人們會注意到在基本對象312和子對象340-350中的特性與對象的性能有關?;緦ο?12表示對話框,子對象340表示按鈕對象,子對象350表示編輯框,而子對象342表示具有分別表示列表框和樹的兩個子對象346和348的選擇器對象。這些子對象340-350中的每一個包括一個或多個子特性(例如,子特性341),諸如按鈕對象的按下特性以及樹對象的擴展特性。
對比之下,在附加類322中的特性與對象的外觀有關。例如,第二特性集可以包括字體類型、顏色等的特性以及缺省值。配置這個編程模型,使之在運行時間處在子對象上設置一個特性。結果,配置每個子對象中的附加特性(例如,附加特性352),使之接收來自附加類別的值。
圖4示出用于可以執(zhí)行圖3示出的編程模型的各種操作環(huán)境的幾個示例語法。在每個示例語法中使用的術語“提供器”表明在語法中描述的靜態(tài)方法與具有名稱為“提供器”的附加類別相關聯(lián)。因此,因為這些語法的每一個允許對附加類別定名,所以在兩個不同的附加類別中具有相同名稱的特性相互之間不會沖突。這允許開發(fā)者開發(fā)附加特性類別而無需周密考慮潛在的名稱沖突。
現(xiàn)在轉到示例語法,如果編程環(huán)境是程序設計方法語言,諸如Visual Basic或C#,則可能出現(xiàn)偽代碼,如程序設計語法401中所示。程序設計語法401進一步包括一種方法識別符404;參數(shù)列表,所述參數(shù)列表具有用于指定特性的名稱的第一識別符406,以及用于指定與第一識別符406指定的特性相關聯(lián)的一個值的第二識別符408。把參數(shù)列表封閉在括號內,并且一個周期隔開類別識別符402和方法識別符404。參考圖3示出的附加類別322,對于附加特性“FONT”,程序設計語法401如下Attached Class.SetFont(PropertyID,value).(附加類別 設置字體 特性識別符,值)感興趣的是,這個語法顯現(xiàn)出與以前編程模型中的語法的相似性。然而,語法不是等同的,而且程序設計語法401與以前的語法不同。例如,在程序設計語法401中,方法識別符404識別提供器類別(即,圖3中的附加類322)上的靜態(tài)方法。在以前的編程模型中,方法識別符具有在提供器實例上的經(jīng)識別的實例方法。因為本發(fā)明利用提供器類別(即,圖3中的附加類322),所以由于不需要跟蹤提供器實例的壽命而編程模型可以支持在標記和特性頁中的擴展器特性。程序設計語法401的又一個特征是語法具有較強的類型性。如上所述,由于諸如名稱的拼法錯誤、不正確的數(shù)據(jù)類型等潛在的差錯,較強類型性的語法能在編譯時間而不是運行時間中檢測到較佳的工具支持。
此外,對于諸如Visual Basic、C#等的編程環(huán)境,編程模型還允許類型性較不嚴格的語法(即,編程語法411)。編程語法411包括識別目標對象的對象識別符412、識別在附加特性類別中的靜態(tài)方法的方法識別符414、包括附加特性識別符和值419的參數(shù)列表。附加特性識別符包括類別識別符416以及識別在相關聯(lián)的附加類別中的附加特性的特性識別符418。
在另一個實施例中,可以使用諸如標記語法421之類的標記語言語法來實施編程模型。標記語法421包括標志422、具有提供器標志符424以及特性識別符426的附加特性和一個值428。在一個實施例中,標志422是目標對象(即,圖3中的按鈕對象)的名稱。一般,分別用打開和關閉符號,“<”和“>”,來開始和結束標記語法421。再有,因為附加特性不是直接在類別上,所以分析程序執(zhí)行處理以查找附加特性存在于何處。
在再另一個實施例中,可以使用具有諸如圖4中示出的格式頁語法431之類的格式頁的可擴展的標記語言(XML)來實施編程模型。對于這個實施例,格式頁語法431包括“標志”屬性432。標志屬性432相應于請求處理的類別。在XML中的附加特性的一個示例例子如下所示<Button xmlnsap=“expandoNameSpace”Pressed=“false”apExpandos,String=“string”/>
當執(zhí)行根據(jù)本發(fā)明的附加特性實施的應用程序時,應用程序用具體例子說明在對象樹中的對象。然后,應用程序連同特性引擎一起處理運行時間操作,所述操作包括檢索和設置對象的值。圖5和6示出應用程序連同特性引擎一起執(zhí)行的處理。
然而,在可以執(zhí)行圖5和6示出的SetValue()處理或GetValue()處理之前,必須對在這兩種處理的每一種中指定的附加特性進行注冊??梢栽谙鄳诟郊犹匦?即,SetFont()326和GetFont()330)的任何靜態(tài)方法中執(zhí)行這個檢查(例如,GetFontID()328)。因為在每次調用任何靜態(tài)方法時都必須執(zhí)行這個檢查,所以這個實施例招致性能損失。熟悉本技術領域的人員會理解,可以實施使特性注冊最優(yōu)化的其它實施例而并不偏離本發(fā)明,諸如要求應用程序來執(zhí)行注冊。
附加特性的注冊返回附加特性的一個唯一的PropertyID。調用注冊特性的一個例子可以按如下的形式BarDP=RegisterProperty(“Bar”,0,typeof(string),typeof(Button),0x3)∴在這個實施例中,BarDP變量將包附加特性的唯一的識別符。然后,在調用SetValue()功能和GetValue()功能中使用這個唯一的識別符。在一個實施例中,從物主的靜態(tài)構造器直接或間接地調用RegisterProperty。物主是指附加附加特性的類別。一旦注冊了附加特性,通過調用與附加特性相關聯(lián)的Get(得到)和Set(設置)靜態(tài)方法,與附加特性的目標類型相匹配的任何實例就都可以“隱含地”附加特性。
如在上述注冊特性的示例調用中所示,“Bar”指定附加特性的名稱。特性引擎一般不使用這個名稱。然而,分析程序使用這個名稱來確定是否已經(jīng)對物主注冊了具有相同名稱的特性。目標類型是Button(按鈕)。對于附加特性,物主和目標不是相同的。缺省值是“0”。如連同圖6所進行的詳細描述,特性引擎確定在何處檢索附加特性的值。因此,registerProperty調用包括搜索特性的一個值(諸如繼承、特性頁)的識別階段的性能位。在上述示例調用中,性能位“0x3”表示對局部值、特性頁以及繼承進行搜索以便確定附加特性的值。因此,在一個實施例中,可以把這些性能位的解譯編碼到GetValue()靜態(tài)方法中。另一方面,通過以正規(guī)方式表達特性之間的模型關系而可以提供這些階段的確定。
在一個實施例中,可以從所示的表1中檢索附加類別的代碼。
class BarProviderObject{public static DynamicProperty BarDP=RegisterProperty(“Bar”,0,typeof(string),typeof(Button));public static string GetBar(Button button){return(string)button.GetValue(BarDP);}public static void SetBar(button button,string value){button.SetValue(BarDP,value);}
}.
表1。
在上述代碼中,在附加類別“BarProvider”中定義名稱為“Bar”的附加特性。用作為字符串的數(shù)據(jù)類型定義名稱為“Bar”的附加特性,并且只可以附加到Button對象。靜態(tài)方法是打印成黑體的,并允許訪問特性和設置特性。
一旦已經(jīng)注冊了附加特性,就可以執(zhí)行SetValue()和GetValue()功能。圖5是邏輯流程圖,示出根據(jù)本發(fā)明設置值的過程。在方框501處開始處理,其中,已經(jīng)啟動設置功能,使與某個特性相關聯(lián)的值改變。一般,SetValue(設置值)過程500將局部地存儲感興趣(此后稱之為感興趣特性)的特性的值。在判定方框502處繼續(xù)處理。
在判定方框502處,作出是否存在感興趣特性的局部存儲器的判定。因為本發(fā)明不具備對于對象的每個實例的每個特性的存儲器,所以如果以前沒有存儲過感興趣特性的值,則要分配存儲器(方框504)。一旦已經(jīng)分配了存儲器,處理就繼續(xù)進行到方框506,如果在判定方框502中已經(jīng)檢測了局部存儲器。
在方框506中,把所述值復制到與感興趣特性相關聯(lián)的存儲器中。一旦感興趣特性已經(jīng)改變狀態(tài),就發(fā)出狀態(tài)改變的通知(方框508)。在一個實施例中,這個通知可以包括設置一個頁面重寫標志位,向有關的特性指示出它們的狀態(tài)不再有效。另一方面,通知可以包括向每個有關者報告源已經(jīng)變化,如上述專利申請中所述。在判定方框510中繼續(xù)進行處理。
在判定方框510中,作出所述值是否存儲在感興趣特性的高速緩沖存儲器中的判定。如果在感興趣特性的高速緩沖存儲器中沒有值,則過程結束。然而,如果在高速緩沖存儲器中有值,則使高速緩沖存儲器清零(方框512),因為這個值不再有效。過程結束。
圖6是邏輯流程圖,示出根據(jù)本發(fā)明檢索值的過程。在方框601處開始處理,其中,已經(jīng)啟動查詢。在方框602處繼續(xù)進行處理。
在方框602處,應用程序指示需要更新感興趣的特性(此后稱之為感興趣特性)中之一。一般,這發(fā)生于當對象正在查詢它們當前狀態(tài)的特性時。過程600通過檢查各個階段而判定特性的一個值。這些階段是在注冊特性時定義的。判定方框606-610表示示例的階段,但是可以添加其它階段而不偏離本發(fā)明。在判定方框604中繼續(xù)進行處理。
在判定方框604處,過程檢查高速緩沖存儲器,以確定以前是否高速緩沖存儲過感興趣特性。一般,為了使檢索最優(yōu)化而高速緩沖存儲感興趣特性。如果以前已經(jīng)高速緩沖存儲過特性,則在方框612處繼續(xù)進行過程,從高速緩沖存儲器檢索值。另一方面,在判定方框606中繼續(xù)進行過程。在判定方框606中,作出感興趣特性的值是否是局部的判定。如果已經(jīng)執(zhí)行SetValue()而局部地設置特性的值,則所述值是局部的,如在圖5中所示。如果值是局部的,則在方框612處繼續(xù)進行過程,從局部存儲器中檢索所述值。如果值不是局部的,則在判定方框608中繼續(xù)進行過程。
在判定方框608中,作出是否可得到特性頁中的感興趣特性的值的判定。當基本類具有相關聯(lián)的特性頁時,特性頁規(guī)定每當用具體例子說明時將如何執(zhí)行基本類的每一個子類。如果可以在特性頁中得到感興趣特性,則在方框612中繼續(xù)進行處理,從特性頁檢索值。然而,如果值不在特性頁中,則在判定方框610中繼續(xù)進行處理。
在判定方框610中,作出是否可以通過繼承(即,繼承值)得到感興趣特性的值的判定。從子對象的父對象派生繼承值。如果父對象中之一具有感興趣特性,則處理繼續(xù)進行到方框612,從父對象檢索值。然而,如果沒有繼承值,則從與附加特性相關聯(lián)的附加類別檢索缺省值(方框614)。在方框616處繼續(xù)進行處理。
在方框616處,應用程序根據(jù)接收到值的階段計算加權量度。存儲所述加權量度,并用于作出經(jīng)過訓練的判定,為了使將來的檢索最優(yōu)化,判定要高速緩沖存儲哪個感興趣特性。然后結束處理。
此外,對于上述SetValue和GetValue過程,本發(fā)明的編程模型提供增強的功能,諸如成組查詢和成組通知。因此,如所述,本發(fā)明提供一種編程模型,所述編程模型提供基于相關性的通信系統(tǒng),所述系統(tǒng)通過使用附加類別而支持特性之間的復雜關系。使用這個編程模型構造的應用程序可以很好地定標,因為特性管理技術不需要過多的局部的、基于每個-實例的存儲器。而是,編程模型促進特性值的再使用,諸如通過在基本類的等級使用特性頁和繼承。如上所述,本發(fā)明提供特性管理機制,從而在對象層次中的對象通過附加而存儲特性值。
上述說明、例子和數(shù)據(jù)提供制造和使用本發(fā)明的組成的完整的說明。由于可以制造許多本發(fā)明的實施例而不偏離本發(fā)明的精神和范圍,所以本發(fā)明歸屬在后面所附的權利要求書中。
權利要求
1.一種包括對象的計算機可讀媒體,所述對象具有第一組特性中的特性,其特征在于,所述計算機可讀媒體進一步包括數(shù)據(jù)結構,所述數(shù)據(jù)結構包括第二組特性中的每一個特性的定義,并且包括與第二組特性中的一個特性相關聯(lián)的至少一種靜態(tài)方法,所述至少一種靜態(tài)方法具有唯一地識別一個特性的第一參數(shù),可操作所述靜態(tài)方法,使一個特性與對象相關聯(lián),而無需規(guī)定對于對象中的一個特性的明確的參考。
2.如權利要求1所述的計算機可讀媒體,其特征在于,所述靜態(tài)方法支持打印成黑體的語法。
3.如權利要求1所述的計算機可讀媒體,其特征在于,所述靜態(tài)方法用來使一個特性與對象相關聯(lián)包括檢索對象的值而無需把所述值局部地存儲在對象中。
4.如權利要求3所述的計算機可讀媒體,其特征在于,檢索所述值包括確定多個階段中的哪一個保持與一個特性相關聯(lián)的所述值。
5.如權利要求4所述的計算機可讀媒體,其特征在于,一個階段包括對象的父對象。
6.如權利要求4所述的計算機可讀媒體,其特征在于,一個階段包括特性頁。
7.如權利要求1所述的計算機可讀媒體,其特征在于,所述靜態(tài)方法進一步包括第二參數(shù),所述第二參數(shù)對應于一個特性的給定值,其中,所述靜態(tài)方法用來使一個特性與對象相關聯(lián)包括在對象的本地存儲器中設置所述給定的值。
8.如權利要求1所述的計算機可讀媒體,其特征在于,所述第一組特性對應于對象的性能,而第二組特性對應于對象的外觀。
9.一種具有計算機可執(zhí)行部件的計算機可讀媒體,其特征在于,它包括包括多個特性的基本類;以及包括多個附加特性的附加類,附加特性中的每一個能夠與從基本類派生的一個對象的一個實例相關聯(lián),所述附加類進一步包括一種靜態(tài)方法,用于使多個附加特性中的一個附加特性與對象的實例相關聯(lián)。
10.如權利要求9所述的計算機可讀媒體,其特征在于,從基本類派生的對象繼承來自節(jié)點類的至少一種方法,當一個附加特性與對象的實例相關聯(lián)時,所述一種方法由所述靜態(tài)方法所調用。
11.如權利要求10所述的計算機可讀媒體,其特征在于,所述靜態(tài)方法和一種方法中的每一個方法包括用于傳遞一個附加特性的唯一識別符的第一參數(shù),所述一個附加特性與對象的實例相關聯(lián)。
12.如權利要求11所述的計算機可讀媒體,其特征在于,在運行時刻注冊一個附加特性之后可得到唯一識別符。
13.如權利要求10所述的計算機可讀媒體,其特征在于,一種方法支持打印不緊密的語法。
14.如權利要求9所述的計算機可讀媒體,其特征在于,所述靜態(tài)方法支持打印成黑體的語法。
15.如權利要求9所述的計算機可讀媒體,其特征在于,相關聯(lián)一個附加特性包括從對象的父對象檢索所述對象的值。
16.如權利要求9所述的計算機可讀出媒體,其特征在于,相關聯(lián)一個附加特性包括來自特性頁檢索對象的值。
17.一種使用對象的計算機系統(tǒng),其特征在于,它包括從第一類派生的第一對象,所述第一對象包括第一組特性;把第二組特性提供給所述第一對象的第二類,所述第二類包括靜態(tài)方法,所述靜態(tài)方法用來根據(jù)與所述第一對象相關聯(lián)的操作把第二組特性中之一附加到第一對象。
18.如權利要求17所述的計算機系統(tǒng),其特征在于,所述靜態(tài)方法包括第一參數(shù),用于唯一地識別所述操作請求第二組特性中的哪一個特性。
19.如權利要求18所述的計算機系統(tǒng),其特征在于,在第一參數(shù)可以唯一地識別一個特性之前注冊一個特性。
20.一種計算機可執(zhí)行方法,用于設置特性的狀態(tài),所述方法包括下列步驟表明具有第一特性組的第一對象;注冊與第一對象相關聯(lián)的一個或多個動態(tài)特性,所述動態(tài)特性把第二組特性提供給第一對象,其中,用于第二組特性的存儲器不在第一對象中。
21.如權利要求20所述的計算機執(zhí)行的方法,其特征在于,注冊一個或多個動態(tài)特性包括把唯一的識別符分配給一個或多個動態(tài)特性中的每一個。
22.如權利要求21所述的計算機執(zhí)行的方法,其特征在于,進一步包括調用具有第一參數(shù)的靜態(tài)方法,所述第一參數(shù)與唯一識別符有關。
23.如權利要求22所述的計算機執(zhí)行的方法,其特征在于,所述靜態(tài)方法是黑體打印的。
24.如權利要求20所述的計算機執(zhí)行的方法,其特征在于,所述第一對象具有一個或多個相關聯(lián)的子對象,從而每個子對象與第二組特性相關聯(lián)。
25.一種具有至少一條計算機可執(zhí)行指令的計算機可讀媒體,其特征在于,它包括通過在附加特性類中的靜態(tài)方法,使附加特性與從另一個類派生的對象的實例相關聯(lián)的指令裝置。
26.如權利要求25所述的計算機可讀媒體,其特征在于,所述指令裝置支持程序設計語言的打印成黑體的語法。
27.如權利要求25所述的計算機可讀媒體,其特征在于,所述指令手段支持程序設計語言的打印不緊密的語法。
28.如權利要求25所述的計算機可讀媒體,其特征在于,所述指令裝置包括在標記文檔中的語句。
29.如權利要求25所述的計算機可讀媒體,其特征在于,所述指令裝置包括在特性頁中的語句。
30.一種具有至少一條計算機編碼的指令的計算機可讀媒體,其特征在于,所述指令包括識別附加特性類別的類別識別符;所述識別附加特性類別中的方法的方法識別符,用于影響與目標對象相關聯(lián)的附加特性;參數(shù)列表,它包括識別附加特性的特性識別符。
31.一種具有至少一條計算機編碼的指令的計算機可讀媒體,其特征在于,所述指令包括識別目標對象的對象別識別符;識別附加特性類別中的方法的方法識別符,用于影響與目標對象相關聯(lián)的附加特性;參數(shù)列表,包括包括識別附加特性類別的類別識別符的附加特性識別符,以及識別在附加特性類別中的附加特性的名稱的特性識別符。
32.一種具有至少一條計算機編碼的指令的計算機可讀媒體,其特征在于,所述指令包括表示目標對象的標志;附加特性識別符,所述附加特性識別符具有識別附加特性類別的提供器標志符;以及特性識別符,所述特性識別符識別在附加特性類別中的附加特性的名稱。
33.一種具有至少一條計算機編碼的指令的計算機可讀媒體,其特征在于,所述指令包括XML方案,用于按如此的方式定義目標對象、附加特性類別以及在附加特性類別中的附加特性,以致所述附加特性變成與目標對象相關聯(lián)而無需對于目標對象中的附加特性的明確參考。
全文摘要
所描述的是一種機制,用于把對象的新功能表示為特性,沒有把所述特性構造到派生對象的類別中。尤其,所述機制使一種類別中的特性與另一個類別相關聯(lián)。一種計算機可讀出媒體,它包括對象,所述對象具有在第一特性組中的特性,進一步包括數(shù)據(jù)結構。數(shù)據(jù)結構包括對于第二特性組中的每一個的一些定義,并包括至少一種靜態(tài)方法。靜態(tài)方法與第二特性組中的一個特性相關聯(lián),并包括第一參數(shù)。第一參數(shù)唯一地定義一個特性??刹僮黛o態(tài)方法使一個特性與對象相關聯(lián)而無需指定對于對象中的一個特性的明確參考。在運行時間期間注冊特性以便接收唯一的識別符。
文檔編號G06K3/00GK1470984SQ0314572
公開日2004年1月28日 申請日期2003年6月30日 優(yōu)先權日2002年6月28日
發(fā)明者J·L·波格丹, J L 波格丹, M·J·菲諾齊奧, 菲諾齊奧, N·M·克雷默, 克雷默 申請人:微軟公司