麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

用于實時系統控制的組件模型的制作方法

文檔序號:6403455閱讀:270來源:國知局
專利名稱:用于實時系統控制的組件模型的制作方法
根據35 U.S.C.119(e),本專利申請要求序列號為60/357329,申請日為2002年2月15日,標題為“用于實時系統控制的組件模型”的美國臨時專利申請的優先權,其全部內容在此引入作為參考。
背景技術
許多不同的努力需要客戶軟件來解決他們的問題。通常各領域專家非常了解這些問題,諸如建筑自動化專家、工廠自動化專家和交通管制專家。然而很少有領域專家具有普通程序設計技術所需要的技能,諸如面向對象的程序設計。如今,各領域專家必須試圖將他們的要求詳細說明給程序員,然后由程序員來構建所需要的系統。該過程容易出現錯誤、費時并且伴隨著錯誤傳達。所需要的是理解問題空間的領域專家具有能夠自己構建軟件系統的能力。期望領域專家有時間或傾向能夠變成專業程序員是不可行的。因此有必要提供一種工具,其使得外行也能夠創建客戶軟件。理想的這些工具會讓軟件系統的配置參數、執行邏輯和數據是圖形可視化的。圖形工具會讓領域專家能夠創建、監控和改變軟件系統,而不需要理解神秘的程序設計語言語法。
面向組件的系統是一種新概念,其通過將軟件功能封裝在組件中,可以連接組件來構建應對現實世界需要的應用,從而提供某些特征。然而為了實現實際的系統,已知的現有技術仍然需要程序設計語言的知識。軟件組件,到現在為止,仍然需要程序設計技巧將組件連接在一起創建功能性系統。而且,現有的組件技術并不允許領域專家將整個系統圖形可視化,和在運行時作出改變。例如,領域專家可能會希望在運行時改變執行流程、或添加新的行為,并且希望能夠立即看到這對軟件系統有什么影響。這種探索性的程序設計方式與當前方案不一致,當前方案需要軟件停止、重新編譯、然后重新啟動。而且,為了改善性能添加特征等,可能會需要添加修改或更新該軟件。對于任何更新、添加或修改,當前方案再次需要軟件停止、重新編譯并重啟。在正在控制關鍵過程的某些環境中,停止軟件可能會特別困難。提供這種方案所存在的另一個具體困難是,需要允許領域專家能夠增強或擴展軟件組件,使它們適應特定應用領域的獨特需要。從歷史來看,這些添加或擴展需要常規的程序設計技巧和知識。本發明意欲解決這些問題和其它需要。

發明內容
本發明的一個方面是軟件程序,其代碼包括用于在機器上執行的相同組件類型的一個或多個組件。該軟件程序的組件通過特定方法產生。在該方法中,將包括一個或多個插槽定義(slot definition)的基本類(base class)提供給一個框架(framework),其中最少有一個插槽定義是屬性插槽定義。基本類中的所有屬性插槽定義都被標識。對于每一屬性插槽定義,都定位獲取(getter)和設置(setter)過程。生成一個組件類型對象,其被配置用來存儲插槽定義。被標識的屬性插槽定義然后就被存儲于該組件類型對象中。生成一個或多個組件。這些組件中每一個都有槽映象(slotmap)對象,它是從槽映象類中被實例化的。每一槽映象對象也包括存儲于組件類型對象中的每一屬性插槽定義的值,每一值與單個組件關聯,因而提供了存儲每一組件所獨有的數據的能力。
在該方面的進一步發展中,組件被設計為允許通過動態插槽來擴充它們的屬性和數據字段。
另一個方面提供有一種用于為基于組件的軟件系統的擴充自動指定名稱的方法。在該方法中,創建了一個根組件。該根組件沒有父組件。一個或多個非根組件被置于該根組件內,并且一個或多個其它非根組件則被置于非根組件內,這樣所有的非根組件都有父組件,并且整個結構形成了樹型。在該點上,組件分配有唯一標識串,其包含該組件的所有前輩組件和該組件的名稱的順序列表。
在該方面的進一步發展中,擴充命名方法來標識組件的各個插槽。
通過對附圖和優選實施例的描述,可以進一步的理解本發明的這些和那些方面以及特征和優勢。


圖1所示為創建組件類型和該組件類型的多個組件實例的流程圖;圖2所示為從相同的組件類型中生成的兩個組件的框圖;圖3所示為包括動態插槽的組件系統的框圖;圖4所示為包括鏈接的組件系統的框圖;圖5A所示為包括鏈接的組件系統的組件級抽象概念的框圖,其中執行細節被隱藏;圖5B所示為圖5A中所示組件系統的框圖;其中鏈接已經被刪除;圖6所示為已經重新編譯以提高效率的組件系統的框圖;和圖7所示為樹型結構中組件系統的框圖;圖8所示為是可視化界面的操作流程圖。
具體實施例方式
本發明的組件模型提供一種軟件組件的獨特組件設計,其允許應用開發者在適合于非程序員的圖形環境下擴展和修改軟件組件。該組件模型設計允許將新的插槽,諸如屬性、動作或主題,加入標準組件,而不需要通常所需要的軟件編碼步驟。
對于軟件開發的組件模型方式允許創建與最終使用應用具有直接關系的軟件組件,同時仍然利用了面向對象的軟件設計的優點。同樣的,組件比在純面向對象的方式中提供更高層次的抽象概念。在對象封裝了可以應用于軟件功能(諸如串操作、提供緩沖管理等)的行為的地方,組件可組裝對象以滿足最終應用目標(諸如提供用戶界面展示以改變時間表、檢查警報和將確認命令傳遞回到發出警報的裝置等)的需要。
這里有兩個層次的抽象概念一個是面向對象的層次,其處理組件的實現;另一個是組件的層次,其隱藏面向對象的層次,并通過使用組件進行與特定現實應用有關的應用創建。至少也有兩類人可以運行和修改本發明的軟件開發者和用戶。開發者使用面向對象的概念實現本發明的組件模型。可選的,開發者也創建在組件層次所定義的功能。用戶通常不會看到面向對象的實現。相反,用戶幾乎專門處理組件和監控器,在組件層次創建和修改系統。當然,用戶和開發者可以是同一個人。
根據組件類型創建軟件程序內的組件。組件類型類似于面向對象的程序設計中的類的概念,也就是,它是描述所有屬于該類型的組件實例的共同特征的抽象概念。在優選實施例中,組件類型的創建以及大多數其它有關組件的功能由構架來完成,有時候我們稱其為NiagaraTMFramework。該構架是基于組件的軟件中的軟件模塊,其完成一些與實現組件模型相關的若干有用功能,諸如創建組件類型和組件、提供組件與外部軟件模塊之間的接口,和提供通過向他們添加插槽來擴展組件的能力,等等。包括在初始化(引導裝入)階段和在組件運行時,該構架也提供用于軟件的執行流。
面向對象程序由類組成,其定義用來分配屬于該類的實例的模板。每一類由稱為成員的子部件組成。成員可以是用來存儲數據的字段,或可以是用來存儲可執行行為的方法。
本發明描述了使用面向對象的原型構建的組件模型。該組件模型然后可以被非程序員使用來構建面向組件的程序。該組件模型由組件類型組成,其定義了用來分配屬于該類型(類似于面向對象的類)的實例的模板。每一組件類型由稱為插槽(類似于面向對象的成員)的子部件組成。插槽與成員之間的區別在于插槽存在于更高層次的抽象概念,從而它們可以被非程序員或面向組件程序的終端用戶直接使用。
在組件模型中有三種類型的插槽。屬性是存儲數據值的插槽。屬性可以用來存儲配置數據,提供實時狀態信息或存儲任何其它數據。動作類似于方法,它們是存儲執行行為的插槽。例如,終端用戶可能會調用的一個動作可能是“打開電扇”。動作也可以實現純軟件功能。主題是第三插槽類。主題用來表示事件。主題用于表示事件已經發生。
鏈接是特定類的屬性插槽。鏈接用來指定基于組件的軟件中的執行流。更具體的,鏈接用來創建兩個不同插槽之間的因果關系。這種關系表示,例如一個函數響應于另一個函數的調用而被調用。在對象模型中,這些關系通常用靜態碼(例如條件過程調用)定義,并且沒有重編譯就不能改變。在組件模型中鏈接通常是動態插槽,于是它們在運行時可以被創建和刪除,不需要重編譯軟件就可以改變軟件的執行流。
因為組件模型是按照面向對象的程序構建的,必須使用面向對象的成員來實現組件模型。術語類、成員、字段和過程(method)指的是常規面向對象的概念。術語組件類型、插槽、屬性、動作和主題指的是面向組件的概念,它們與本發明相關。
對象與組件之間的一個大的區別是組件在運行時可以改變。例如,添加一個新的過程到對象典型的需要重編譯該對象的類。組件模型允許我們在運行時在組件中定義插槽和添加新插槽。在編譯的代碼中所定義的插槽被凍結。凍結的插槽是不可變的,但是得到了編譯代碼的處理效率。運行時定義的插槽是動態的。
在面向對象的程序設計中,運行程序中的類定義的存儲由編譯器處理,在很大程度上對開發者是不可見的。因此,在面向對象的程序設計中,類通常作為抽象概念而不是作為實際的數據結構引用。于是,在大多數面向對象的環境中開發者可以安全的作為實際對象的抽象定義來引用類,而不會被類定義需要物理地存在于計算機存儲器中的某個地方這樣的事實混淆。
在本發明的組件模型中,組件類型必須在計算機存儲器中存儲和處理。優選的由構架通過在對象中存儲組件類型,即組件類型對象,來完成組件類型的存儲。于是,組件類型對象是組件類型的物理表示。從組件到組件類型對象的引用用來表示給定對象屬于組件類型的事實。
圖1的流程圖描述了如何通過創建組件類型對象來創建組件類型,和如何產生基于該組件類型的多個組件實例。
為了創建新的組件類型,開發者需要提供類定義給構架-基本類(步驟100)。在優選實施例中,開發者通過將基本類添加到基于組件的軟件來提供基本類。有一組預定的規則集,用來將基本類的成員映射到組件模型中不同類型的插槽。這些規則例如可以是基于基本類的成員的類型或名稱。開發者通過添加成員根據該規則集到對應于這些凍結插槽的基本類定義,指示組件類型應該具有哪些凍結插槽。在優選的實施例中,開發者也添加將基本類向構架登記的聲明。添加基本類之后,編譯并執行該基于組件的軟件。一旦軟件開始運行,作為初始化程序的一部分,該構架檢測基本類并通過圖1中的過程的其余部分,以創建一個或多個組件類型以及基于它們的一個或多個組件。
在步驟101中,構架檢查該基本類,并發現所有相關成員。該步驟可以通過基本類的自檢來完成。
所有類型的插槽(屬性、動作、主題)都包括定義。屬性插槽的定義指定屬性插槽所保存的數據類型和屬性插槽的名稱。動作插槽的定義包括動作插槽的名稱和執行該動作的實現方法的代碼。相似的,主題插槽的定義包括主題的名稱和實現該主題的代碼。屬性插槽也包括數值,動作插槽和主題插槽不具有數值(但實現它們的方法可以有任意數目的隱藏在組件級的變量)。屬性插槽需要獲取和設置過程來獲得和設置數值。這些獲取和設置過程是屬性插槽定義的一部分,并且最初就定義在基本類中。
在步驟102,獲取和設置過程檢查對應于屬性插槽的基本類的每一成員。按照慣例,獲取和設置過程通過將前綴“獲取”和“設置”加在屬性插槽的名稱的前頭,連同分別實現這些功能的標準編碼來命名。
然后構架創建組件類型對象(步驟103)。組件類型對象的目的是指示組件類型。組件類型對象包括能夠存儲和檢索一個或多個插槽定義的數據結構。這種數據結構例如可以是數組或哈希表。組件類型對象也包括名稱,其是組件類型的名稱。該名稱或者從基本類的名稱拷貝,或者由開發者以其他方式標識,例如通過使用基本類中的指定字段。
在步驟104,基本類的所有插槽定義被存儲在組件類型對象中。這些被稱作為凍結插槽定義。在步驟105,構架生成槽映象類,其與在步驟103中所創建的組件類型對象相關聯。槽映象類定義了對應于組件類型對象的每一屬性插槽的成員。槽映象類也包括用于創建附加動態插槽的方法。
于是在步驟107,對于每個現有的基本類,至此重復該過程。
一個或多個反復之后,在步驟106中創建了必要數目的組件類型對象。對于每一組件類型對象都有各自的槽映象類、其實例可以存儲凍結屬性插槽以及可以添加的任意動態插槽的唯一值。
于是創建了一個或多個組件類型,但該軟件仍然缺少基于組件的功能,因為不存在這些組件類型的實例。在步驟106中從現有的組件類型對象生成一個或多個組件。該構架創建多個組件實例,以提供組件級功能。例如,基于數據文件或用戶輸入來創建這些組件實例。例如,數據文件可以有效的包含一個早已被開發者或用戶設計好的組件系統,數據文件包括組件實例、他們的組織、他們的結構屬性和通過鏈接指示的系統中的執行流。而且,通過實例化組件和通過前端瀏覽器等在它們中間創建鏈接,用戶可以使用圖形界面從零做起創建這種系統。
在優選實施例中,該構架最終負責創建組件。當需要創建某種組件類型的組件時,該構架從現有的組件一般類中創建一個組件實例。該一般類包括一個或多個用于與其他組件通信(或用于管理組件)的實用成員,和適合用于插入槽映象或到槽映象的引用的字段。構架標識與所要創建組件的組件類型相關聯的組件類型對象以及與該組件類型相關聯的槽映象類。它然后從槽映象類創建槽映象實例。該構架將槽映象實例附加到組件實例中,使得該槽映象被有效的包括在該組件中。它然后創建從組件實例到組件類型對象的引用。該引用,通常是指針,指定一個實例-類型關系,即指定該特殊組件實例屬于該組件類型對象所描述的組件類型。
如果組件類型對象包括屬性插槽的定義,那么構架可選的為它們分配值。這些值例如可以從數據文件或用戶輸入獲得。如果構架有一個值要分配給屬性插槽,則構架通過在槽映象對象的適當字段中設置該值來完成。這可以通過訪問在屬性插槽定義中的設置過程來完成,或通過訪問組件或槽映象的設置過程來完成,或通過直接訪問插槽值來完成。如果沒有提供插槽值,那么該構架或者分配默認值或者什么也不做。
在一個可選實施例中,并不為每一組件類型對象創建槽映象類,而是每一組件包括一個一般槽映象,其是或其包含在組件對象中所定義的一種數據結構,為屬性插槽的屬性插槽值提供存儲位置,并也可以存儲動態字段定義和值。用于此目的的數據結構是本領域所熟知的,并可以為數組、哈希表等。
該構架分配名稱到每一組件,該名稱或者通過構架生成或者以與屬性插槽值同樣的方式獲得。
通過這種方式,構架創建屬于一個或多個組件類型的多個組件。圖2描述了兩個這種組件211和212,其都屬于組件類型對象200所定義的單個組件類型。該組件類型對象包括名稱202和凍結插槽204的定義。在所描述的范例中,有一個凍結動作插槽起始206、一個凍結主題插槽警報208和一個凍結屬性插槽hrs_running210。插槽hrs_running210包含一個整數,但是在其他范例中,該屬性插槽可以包含更多復數數據或數據結構或其他數據類型。插槽206和208分別包括執行該過程和主題所需的編碼。組件211和212,名稱為FirstFan和SecondFan,分別包括槽映象215和216。每一組件槽映象包括組件的凍結屬性插槽217和218的值。
根據該優選實施例的突出方面,當該軟件執行時可以添加動態插槽到組件。動態插槽與凍結插槽的類型相同。運行時動態插槽的添加通過用戶或者通過軟件自身完成。根據實施方式的不同,或者通過向構架發出請求或者通過調用組件的實用程序來加入動態插槽。不論采用什么方式,動態插槽通過存儲在槽映象中來添加。動態插槽通常具有定義,如果它是屬性插槽它還有值。該定義存儲在槽映象中,并且該值如果可以應用,也存儲在那里。圖3所示為在兩個動態插槽已經被添加到組件211后圖2中的組件系統。通過將定義添加到槽映象215,稱為“停止(stop)”的動態動作插槽301已經被添加。同樣,通過將定義303和值304添加到槽映象,稱為power_usage的動態屬性插槽302也被添加。
注意到組件211仍然引用相同的組件類型對象200。該組件類型對象并沒有被改變以記錄動態插槽的添加。因此,即使在添加了兩個動態插槽之后,組件FirstFan211仍然是相同的組件類型。并且相應的,組件211和212仍然是相同的組件類型,而與組件211多出兩個插槽無關。這種從“純”類型-實例模型的分離是由于性能原因為每一改變的組件創建新的組件類型會降低系統性能并需要過多的附加存儲器。組件具備實用過程,允許它們為動態插槽檢查它們的槽映象,并將它們的定義提供到外部組件、構架或該軟件的其它模塊。這些實用過程是必須的,因為組件類型對象并不具有動態插槽的定義。動態插槽可以被其它組件、構架或該軟件的另一模塊以與槽映象對象的凍結插槽非常相同的方式訪問。
動態插槽一旦被創建,以后可以通過從槽映象中去除它們的定義(和任何值)而將其刪除。例如,這種情況可以作為新提出特征或功能的測試結果出現,它的引入是由于不需要重新編譯軟件,也就是不用中斷服務。
不需要重新編譯引入動態插槽的能力也允許用戶添加影響程序流的新的關系和連接。這通過“鏈接”實現,其是保存有兩個組件之間關系的插槽。更具體的,一個鏈接保存兩個不同組件的兩個插槽(這兩個插槽都不是該鏈接)之間的因果關系。為了簡化引用,這兩個插槽被稱作為源插槽和目標插槽。保存這些插槽的組件分別稱作為目標組件和源組件。也有多個可能的因果關系可以由鏈接表示。在表1列出了在優選實施例中所使用的鏈接類型以及它們所鏈接的插槽類型。注意到由于在組件級,執行流概念包括屬性字段的變化,在表1中列出的所有鏈接控制組件系統的執行流。

表1用戶可以通過鏈接各種組件的各種插槽來創建執行流。鏈接是凍結的或者動態的。動態鏈接允許在軟件運行時改變組件系統的執行流。要改變執行流所要做的就是創建或刪除鏈接。為了避免創建和刪除相同的鏈接,優選實施例允許激活和去活鏈接。這提供了另外的優勢,即,通過適當制定的動態鏈接,不能被刪除的凍結鏈接仍然可以被去活。被去活的鏈接并不用作鏈接,但仍然存在于目標組件中,并且隨后可以被激活。
鏈接作為一種類型的插槽實現。在優選實施例中,鏈接包括在目標組件中,也就是保存該目標插槽的組件。鏈接優選的包括下列插槽源組件字段,保存到源組件的引用或源組件的名稱;源字段,保存源插槽的名稱;目標字段,保存目標插槽的名稱;以及“激活”標志,表示它是被激活還是被去活。
鏈接也包括對于處理它們有用的過程(method),諸如激活和去活過程,或者改變源字段、源組件、和/或目標字段的過程。注意到由于鏈接已經包括在目標組件中,在該設置中避免了到目標組件的引用;目標組件直接被鏈接的布局引用。
在優選實施例中,當鏈接被激活時,它們在源組件創建一個調節器(knob)。調節器是與鏈接相似的數據結構,其存儲在源組件的槽映象中。調節器向源組件指示,它必須將事件從它的插槽傳播到目標組件的插槽。調節器包括類似于鏈接的數據字段的數據字段,但它包括目標組件的,而不是源組件的引用或名稱。調節器并不包括激活標志。相反,當鏈接被去活時,旋鈕簡單地被刪除。
圖4所示為已經添加動態鏈接401的圖3的組件。該鏈接被激活,從而它使得對應的調節器402被創建。由于源插槽和目標插槽是屬性,在FisrtFan的hrs_runnig的值改變的事件中,該鏈接的效果是將SecondFan的hrs_runnig的值改變到FisrtFan的hrs_runnig的新值。換言之,一旦值217變化,該鏈接將使值218跟隨值217。鏈接運行的方式相同,而與它鏈接的是凍結插槽或動態插槽無關(盡管如果包括有動態插槽會有一些性能損失)。
圖5A是圖4的組件系統的抽象圖,其中省去了實現細節。它示出了從組件級別看到的鏈接功能。這里鏈接401用從源插槽到目標插槽,而不是到組件211中的插槽的箭頭表示。盡管該鏈接存在于組件211中。
圖5A展示了該組件模型的一個優點。該組件模型允許抽象化并以相對簡單的方式顯示復雜的動態系統。提供用戶可視界面,其中組件系統的一個或多個組件被可視地表示為窗口小部件(widget)或圖表。實際上,可以類似于圖5A中所示的實現可視表示。組件在屬性插槽中可以存儲它們自己的表示,或者這些表示可以被圖形模塊處理。有關可以結合在此所描述的組件模型一起工作的優選可視界面的進一步細節,參見同一天申請的,標題為“Real-Time Data InterfaceAnd Method For Browser And The Like”的美國專利申請(尚未給予流水號)代理人案卷號3929/1k294US2,其全部內容在此引入作為參考。
一旦組件通過圖形界面表示給用戶,也顯示各種相關的插槽和這些組件的值。通過這種界面,點擊選擇各種插槽和拖動組件之間的鏈接以添加鏈接,允許用戶改變值或執行組件的過程。
而且,通過操作屏幕上的鏈接、插槽和組件的可視表示,允許用戶添加新的組件、添加或去除動態屬性、添加和刪除動態鏈接、或激活和去活鏈接。這樣用戶可視地再編程了一個基于組件的系統。
圖5B是去除鏈接401之后圖5A中組件系統的抽象圖。鏈接的去除用虛線401′表示。通過從組件211中去除動態鏈接插槽411來完成去除。任何其他動態插槽可以類似的被去除。
該優選實施例的一個優點是它同時具有凍結插槽的效率和速度以及動態插槽的靈活性。有些時候動態插槽被證明是太低效了。盡管該優選實施例被用來通過使用動態插槽快速改變和檢測該組件系統,以找到最優配置。一旦找到最優配置,執行重新編譯以將所有的動態插槽轉換為凍結插槽。在重新編譯之后,該系統會保留它的最優配置,但具有更好的性能。
圖6描述了如何優化圖3中所示系統的組件211。將動態插槽編譯成凍結插槽可以導致原始組件類型的改變或導致新的組件類型,如果原始組件類型的所有組件并不具有相同的動態插槽。通過從槽映象215中去除它們的定義并增加組件類型基本類200的凍結插槽定義,動態插槽301、302被轉換成凍結插槽。屬性插槽302的值304保留在槽映象215中,但是現在與相同組件類型的所有組件所共同的凍結插槽定義相關聯。通過在這些定義中所列或從這些定義導出的偏移量(offset),兩個值217和304與它們各自的定義210和303成對。
圖7描述了將組件分級組織成組件系統的優選方法。如前所述,組件可以包括其他組件作為屬性插槽。這通過包括到另一組件的引用作為屬性插槽來實現。在可選實施例中,使用指定所有權的鏈接,而非引用。
優選的利用組件的能力來包括其他組件并組織系統組件為樹結構,如圖7所示。這些組件類型對象706、707、708和709分別描述組件類型A、B、C和D。組件701是組件類型A,組件702和703是組件類型B,組件704是組件類型C,而組件705是組件類型D。組件702、703和704作為插槽全部包括在組件701中,這種包括關系通過組件701的插槽710中的引用定義。組件704進一步包括組件705。還有一個執行流鏈接713,以粗箭頭表示,其以組件705的插槽711作為源并以組件703的插槽712作為目標。包括其他組件的組件稱為父組件。包括在其他組件中的組件稱為子組件。可以以相似的結構組織更復雜的系統。在優選實施例中,系統的所有組件以單樹組織。這就意味著有一個父組件,稱為根組件,它不包括在其他任何組件中,以及一個或多個非根組件按照它們到根組件的繼承關系布置。在圖7中根組件是組件701。該組織產生一個附加優點就是每一組件通過一個字符串被唯一的標識,該字符串由它的前輩名稱的順序列表組成,始于根組件,終止于該組件的名稱。該特征可以用來保證復雜的組件系統中組件的唯一標識,其中來自不同廠家的新組件被不斷添加到該系統。標識可以用字段名稱擴展,以便類似地為組件的字段提供唯一標識。
由于可視界面是組件模型的一個重要優點,本發明還包括一種用于提供可視界面的系統。該系統特別用于為組件模型提供界面,因為它是基于可視對象或窗口小部件,并且每個這樣的窗口小部件可以可視化一個組件。另一個有用特征是該系統同時具有很大的靈活性和較低的資源使用。
該可視化系統被設計成與用于以標準化文件格式顯示第三方內容的流行軟件,如HTML瀏覽器,兼容。在一個優選實施例中,本發明作為HTML文件中的Java小程序實現。Java程序被稱作引擎。圖8所示為可視化系統的操作流程圖。在步驟801用戶將帶有引擎的HTML頁面裝載到HTML瀏覽器上。在步驟802,HTML瀏覽器執行該引擎。在步驟803,該引擎請求配置文件。通過計算機網絡或者從用戶的計算機請求該配置文件。在一個優選實施例中,配置文件是XML文件。該配置文件包括可視顯示的布局,并且它還包括到一個或多個窗口小部件的引用,以及用于這些窗口小部件的位置和/或大小信息。
窗口小部件是可視對象。窗口小部件的范例是組件、物理裝置、圖形、餅分圖和表格的表示。窗口小部件可以做成動畫或以多種不同的方式提供信息。窗口小部件也任選的具有與用戶交互的能力。
有一些可執行代碼與在配置文件中引用的每一窗口小部件相關聯。該代碼稱為擴展。擴展位于用戶計算機上或通過計算機網絡與用戶計算機相連的其他計算機上。擴展可以通過包括在配置文件中的引用來定位。引擎對配置文件進行語法分析和定位擴展。引擎然后裝載擴展,如果需要,從計算機網絡上下載它們(步驟804)。引擎然后并行執行所有擴展。一旦執行擴展,它們在用戶界面上顯示引擎幫助。每一擴展顯示它所關聯的窗口小部件。引擎顯示在配置文件中描述的整體布局,并且操作所顯示的窗口小部件,以根據配置文件改變它們的大小和位置。擴展任選的與其它軟件模塊通信,并根據這些通信改變/更新與它們相關聯的窗口小部件。在示范實施例中,窗口小部件是組件的圖形表示,并且與該窗口小部件相關聯的擴展通過計算機網絡與組件通信。擴展還任選的通過接受和響應用戶所發出的指令與用戶交互。擴展也可以從其它軟件組件接收信息或向其發送信息,如基于與用戶交互的組件。于是根據擴展的軟件代碼、與其它軟件模塊的通信、和/或與用戶的交互,窗口小部件連續更新。擴展可以進一步向其它軟件模塊發送從用戶接收到的控制信號。
例如,窗口小部件表示溫度調節裝置,其由溫度調節組件來控制。對應于溫度調節窗口小部件的擴展通過網絡發送更新溫度該數請求。該溫度調節組件響應。然后該擴展更新溫度。用戶與窗口小部件進行交互。例如,用戶通過點擊窗口小部件來表達想要以攝氏度而不是以華氏度來察看溫度。擴展接收請求并更新該窗口小部件。用戶也可以通過窗口小部件發送命令到實際的溫度調節裝置。例如,如果用戶想要關閉溫度調節裝置,或讓其進入省電模式,該窗口小部件會向溫度調節組件轉發該命令。
當擴展經常使用網絡通信時,可視界面系統的可選實施例具有更高的效率。因為并行處理的多個擴展的多個網絡通信通常會引發性能問題,在可選實施例中,擴展并不啟動網絡通信,而是發送請求到引擎。引擎在預定的時間期間收集網絡通信請求,并試圖將它們合并成更大的捆,然后通過網絡發送它們,于是提高了網絡效率。只有發送到相同計算機的通信可以被捆綁。在接收端也必須有軟件模塊以能夠將該通信解開捆綁。引擎也從某些軟件模塊接收捆綁,該捆綁包含發送到一個或多個擴展的通信,將它們解開捆綁成單個的通信并將這些單個的通信發送到它們所要到達的擴展。當多個擴展與相同的軟件模塊通信時該實施例是最有效的。
為了具體和清楚的說明,已經使用語言、格式和協議描述了可視界面系統,諸如HTML、Java、XML。該可視界面并不限于這些語言、格式和協議。該可視界面系統可以配置成使用任何允許嵌入應用的語言運行。任何數據文件格式,包括屬性數據格式可以代替XML使用。
關于可以連同在此所描述的組件模型一起運行的優選可視界面的更具體的細節,可以再次參見前述美國專利申請“Real-Time DataInterface And Method For Browser And The Like”。
并不是所有的軟件程序需要以組件模型實現。基于組件的功能比常規的面向對象的代碼會更慢并且更大。于是在優選實施例中,只有可能需要被動態修改的代碼部分,或使用組件模型的其它特征的代碼部分會以組件模型實現。但是技術上不以組件模型實現的代碼仍然可以封裝成組件,從而它對其它組件是以組件出現的。
在本文檔中所描述的計算機可以是任何計算裝置。計算機網絡包括無線網絡。
雖然已經連同特定實施例描述了本發明,但是本發明由所附權利要求無限制地定義,并且本發明包括單元和方法步驟的非實質變化。
權利要求
1.一種用于在機器上執行的軟件程序,該軟件程序包括相同組件類型的一個或多個組件,組件類型由包括一個或多個插槽定義(slotdefinition)的基本類來定義,其中至少一個插槽定義為屬性插槽定義,通過以下步驟在運行期間產生所述組件標識所述基本類中的所有屬性插槽定義;為所述基本類中的每一個標識的屬性插槽定義定位獲取(getter)和設置(setter)過程;產生一個組件類型對象,該組件類型對象被配置用來存儲插槽定義;在該組件類型對象中存儲在標識步驟中標識的屬性插槽定義;產生一個或多個組件,每一組件具有一個槽映象(slotmap)和對該組件類型對象的引用,其中每個槽映象包括用于存儲在該組件類型對象中的每一屬性插槽定義的值的存儲位置;和通過將屬性插槽值插入到所述一個或多個組件的一個特定組件的槽映象中的存儲位置,設置屬性插槽值,該屬性插槽值與組件類型對象中的其中一個屬性插槽定義相關聯。
2.根據權利要求1的方法,進一步包括以下步驟產生一個槽映象類,該槽映象類定義了用于每一屬性插槽的值的一個或多個存儲位置,屬性插槽的定義在標識步驟中標識;其中在產生一個或多個組件的步驟中,每一槽映象是槽映象類的一個實例。
3.根據權利要求1的方法,其中該基本類的至少一個定義是動作插槽定義,并進一步包括以下步驟標識該基本類中的一個或多個動作插槽定義;和在所述組件類型對象中存儲該一個或多個動作插槽定義。
4.根據權利要求1的方法,其中該基本類的至少一個定義是主題插槽定義,并進一步包括以下步驟標識該基本類中的一個或多個主題插槽定義;和在該組件類型對象中存儲該一個或多個主題插槽定義。
5.根據權利要求1的方法,進一步包括步驟在執行該軟件程序的過程中,向一個或多個組件中的第一組件的槽映象添加一個動態插槽,同時保持所述組件類型對象不改變,該添加步驟與任何編譯步驟無關。
6.根據權利要求5的方法,其中所述動態插槽是一個屬性插槽,并且該添加步驟包括添加一個動態屬性插槽定義到所述第一組件的槽映象中;和添加一個動態屬性插槽值到所述第一組件的槽映象中。
7.根據權利要求5的方法,其中所述動態插槽是一個動作插槽,并且該添加步驟包括添加一個動態動作插槽定義到所述第一組件的槽映象中。
8.根據權利要求5的方法,其中所述動態插槽是一個主題插槽,并且其中添加步驟包括添加一個動態主題插槽定義到所述第一組件的槽映象中。
9.根據權利要求5的方法,進一步包括步驟在執行該軟件程序的過程中,從所述第一組件去除該動態插槽,該去除步驟與任何編譯步驟無關。
10.根據權利要求6的方法,進一步包括以下步驟執行該軟件程序一段時間;從所述第一組件中去除所述動態屬性插槽;添加一個凍結屬性插槽定義到所述組件類型對象中,該凍結屬性插槽定義與所述動態屬性插槽定義相同;添加一個凍結屬性插槽值到所述第一對象的槽映象中,該凍結屬性插槽值與動態屬性插槽值相同;其中通過至少部分編譯該軟件程序來執行添加凍結屬性插槽定義和凍結屬性插槽值的步驟。
11.根據權利要求7的方法,進一步包括以下步驟執行該軟件程序一段時間;從第一組件中去除所述動態動作插槽;添加一個凍結動作插槽定義到所述組件類型對象中,該凍結動作插槽定義與所述動態動作插槽定義相同;其中通過至少部分編譯該軟件程序來執行添加凍結動作插槽定義的步驟。
12.根據權利要求8的方法,進一步包括以下步驟執行該軟件程序一段時間;從第一組件中去除動態主題插槽;添加一個凍結主題插槽定義到所述組件類型對象中,該凍結主題插槽定義與所述動態主題插槽定義相同;其中通過至少部分編譯該軟件程序來執行添加凍結主題插槽定義的步驟。
13.根據權利要求5的方法,進一步包括以下步驟顯示該軟件程序的圖形表示;和允許用戶操作該圖形表示;其中響應用戶對該圖形表示的操作,執行該添加步驟。
14.根據權利要求13的方法,進一步包括步驟響應用戶對圖形表示的操作,去除動態插槽。
15.根據權利要求5的方法,其中產生多個組件來定義代碼,每一組件具有各自的槽映象和對相同組件類型對象的引用,其中動態插槽是一個鏈接,其定義了從所述兩個或多個組件的第二組件中的源插槽到所述第一組件中的目標插槽的代碼執行流。
16.根據權利要求15的方法,進一步包括以下步驟顯示包括該鏈接的圖形表示的該軟件程序的圖形表示;和允許用戶操作該鏈接的圖形表示;其中響應用戶對該鏈接的圖形表示的操作,執行該添加步驟。
17.根據權利要求15的方法,其中所述源插槽是一個屬性插槽,且所述目標插槽是一個屬性插槽,該方法另外包括步驟執行代碼,使得所述目標插槽的值隨所述源插槽的值的任何改變而改變。
18.根據權利要求15的方法,其中所述源插槽是一個屬性插槽且所述目標插槽是一個動作插槽,該方法另外包括步驟執行代碼,使得所述目標插槽響應于所述源插槽的值的改變而被調用。
19.根據權利要求15的方法,其中所述源插槽是一個主題插槽且所述目標插槽是一個動作插槽,該方法另外包括步驟執行代碼,使得所述目標插槽響應于所述源插槽的啟動而被調用。
20.根據權利要求15的方法,其中所述源插槽是一個主題插槽且所述目標插槽是一個主題插槽,該方法另外包括步驟執行代碼,使得所述目標插槽響應于源插槽的啟動而啟動。
21.根據權利要求15的方法,其中所述源插槽是一個動作插槽且所述目標插槽是一個動作插槽,該方法另外包括步驟執行代碼,使得所述目標插槽響應于所述源插槽被調用而被調用。
22.根據權利要求15的方法,其中所述源插槽是一個動作插槽且所述目標插槽是一個主題插槽,該方法另外包括步驟執行代碼,使得所述目標插槽響應于所述源插槽的調用而啟動。
23.根據權利要求15的方法,其中該鏈接包括到所述第二組件的引用;所述源插槽的插槽名稱;和所述目標插槽的插槽名稱。
24.一種用于在基于組件的軟件系統中,自動為組件指定唯一名稱的方法,包括下列步驟創建一個根組件,該根組件沒有父組件;將一個或多個非根組件置于該根組件內;將一個或多個非根組件置于其它非根組件內,使得這些組件形成一種樹結構,并且每一非根組件有一個父組件;在這些非根組件中指定一個第一組件、包括該組件的前輩組件的名稱和該組件名稱的順序列表的唯一標識串。
25.根據權利要求24的方法,其中第一組件包括一個插槽,并進一步包括以下步驟提供對所述插槽的標識。
26.根據權利要求25的方法,其中所述插槽是一個動態插槽。
全文摘要
一種基于組件的軟件程序,其中每一組件基于一種組件類型。從包括插槽定義的基本類創建組件類型。標識該插槽定義并將其存儲在組件類型對象中。創建相同組件類型的一個或多個組件,每一組件包括到組件類型對象的引用,和包括與組件類型對象中屬性插槽定義相關聯的值的存儲位置的槽映象。屬性插槽值通過被放置到存儲位置中而進入組件。也公開了一種自動指定唯一名稱給組件的方法。創建一個根組件。進一步將非根組件放置到根組件中或其它非根組件中,從而所有組件形成一個樹結構。分配一個唯一標識串給組件,其包括所有該組件的前輩組件的名稱和該組件名稱的順序列表。
文檔編號G06F9/44GK1669020SQ03803852
公開日2005年9月14日 申請日期2003年2月18日 優先權日2002年2月15日
發明者布賴恩·S.·弗蘭克, 約翰·W.·薩布利特 申請人:特里迪姆公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 贵德县| 闻喜县| 德昌县| 广昌县| 泰州市| 枣阳市| 韶关市| 辉县市| 湟源县| 大连市| 都匀市| 永登县| 高陵县| 乌苏市| 探索| 隆德县| 滦南县| 繁峙县| 东城区| 宁明县| 南宁市| 瑞丽市| 赤水市| 伊宁县| 余干县| 双江| 琼结县| 平远县| 辽中县| 西青区| 威远县| 无为县| 满城县| 泸西县| 齐河县| 普兰店市| 大城县| 巴中市| 友谊县| 岐山县| 永年县|