專利名稱:用動態(tài)語言生成子類系統(tǒng)對象模型類的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理系統(tǒng),更具體地說,使用系統(tǒng)對象模型(SOM)經(jīng)過動態(tài)語言邊界生成子類對象。
經(jīng)過多年爭辯和討論之后,面向?qū)ο蟮某绦蛟O(shè)計語言(OOP)正成為主流程序設(shè)計技術(shù)。OOP語言提供改進的程序員生產(chǎn)力,可重用代碼和易于維護。由IBM公司生產(chǎn)的IBM系統(tǒng)對象模型(SOM)產(chǎn)品是一個語言中性的面向?qū)ο蟮膶ο竽P?,可用于生成用戶工?系統(tǒng)對象模型System Objeet Model是IBM公司的一個商標)。對這樣一個用戶工具的一個重要要求是生成子類工具箱中包括的對象的能力。如本發(fā)明所用,一個對象具有封裝性、繼承性和多態(tài)性。封裝性系指一個對象的實現(xiàn)細節(jié)的隱藏。繼承性系指確定一對象類的種類和行為。這一對象類稱為派生類或子類,作為從另一類稱為文類或超類中增加的差異。多態(tài)性系指在一個公共接口后隱藏不同實現(xiàn),簡化對象之間通信的能力。對象的子類生成提供了構(gòu)造可與工具箱中對象協(xié)作的全新應(yīng)用對象的機制。這允許對象用于與工具箱一起提供的應(yīng)用構(gòu)造器中。早期的面向?qū)ο蟮膶ο竽P蛢H允許為C/C++這樣的靜態(tài)語言生成子類。然而,近來的努力集中于為諸如Smalltalk、REXX、Common LISP(CLOS)這樣的動態(tài)的面向?qū)ο蟮恼Z言提供生成子類的能力。
一個方法公開了一個用動態(tài)語言寫的將類輸入到SOM的過程。此過程包括書寫一個描述動態(tài)語言方法接口的類定義文件。類定義文件包含了動態(tài)語言方法的所有原型。隨后,生成一個包含方法體的類實現(xiàn)文件,此文件即是將控制傳給動態(tài)語言方法調(diào)度程序的特定根程序。類對象作為參數(shù)傳給動態(tài)語言方法調(diào)度程序,調(diào)度程序啟動查找類的方法。一個SOM編譯器處理類定義文件并產(chǎn)生一個包含文件。使用類對象生成實例和發(fā)送消息。使用由SOM編譯器產(chǎn)生的包含文件完成了子類生成。
另一個過程公開了一種產(chǎn)生一個SOM代理對象以表示實際的SOM對象的動態(tài)語言。此代理對象一個指向?qū)嶋HSOM對象的實例變量,動態(tài)語言使用此實例變量向SOM對象發(fā)送消息。此種設(shè)想依賴于允許“未知”方法的動態(tài)語言的類屬方法的實現(xiàn),當對象收到一個動態(tài)語言不能識別的消息時類屬方法被調(diào)用。由于SOM消息對動態(tài)語言而言是局外的,“未知”方法允許將消息重定向到SOM對象。
因此,需要一種機制為面向?qū)ο蟮膭討B(tài)語言提供系統(tǒng)對象模型工具箱中類對象的子類生成。
本發(fā)明涉及用于動態(tài)面向?qū)ο笳Z言的生成子類系統(tǒng)對象模型(SOM)對象方法和裝置。生成子類允許用戶使用動態(tài)語言改變對象的默認行為。使用動態(tài)語言產(chǎn)生一個指向SOM類對象的代理類對象。代理類對象包含每一個SOM類的根程序方法。根程序方法的激活引起相應(yīng)的SOM方法的調(diào)用。下一步,生成一個動態(tài)語言子類。隨后使用SOM接口“somCreateDynamicClass”生成一個SOM類對象,這又使某些SOM方法被動態(tài)語言再調(diào)度根程序所重置。動態(tài)語言使“somDispatch”接口被重置并且被它自己的調(diào)度過程取代。新的調(diào)度過程首先在動態(tài)語言類對象方法表中搜尋一個方法,若未找到,則將消息重定向至SOM環(huán)境。
圖1是可應(yīng)用此發(fā)明的計算機/工作站框圖。
圖2是IBM系統(tǒng)對象模型結(jié)構(gòu)功能塊的框圖。
圖3是用動態(tài)語言生成代理類對象和子類對象的過程流程圖。
圖4是生成一個SOM類對象的過程的流程圖。
圖5是使用動態(tài)語言增加新方法的流程圖。
圖6是使用動態(tài)語言重置SOM方法的流程圖。
圖7用動態(tài)語言生成實例變量(類數(shù)據(jù))的流程圖。
圖8是用動態(tài)語言生成類實例的流程圖。
圖9是用動態(tài)語言向類對象發(fā)送消息的流程圖。
本發(fā)明為面向?qū)ο蟮膭討B(tài)語言提供了一種生成子類系統(tǒng)對象模型(SOM)類對象的方法和裝置。生成子類SOM對象更適合應(yīng)用于駐留于可從IBM公司得到的IBM#PS/2操作系統(tǒng)環(huán)境中的計算機。圖1描述了一個典型的硬件環(huán)境,說明了依據(jù)有關(guān)發(fā)明的工作站的典型硬件配置,具有一個中央處理部件10,諸如常規(guī)的微處理器,以及通過系統(tǒng)總線12互聯(lián)的許多其它部件。圖1所示的工作站包括一個隨機訪問存儲器(RAM)14,只讀存儲器(ROM)16,一個用于聯(lián)接諸如磁盤部件20這樣外設(shè)至總線的I/O適配器18,一個用于聯(lián)接鍵盤24,鼠標26,揚聲器28,話筒32,和/或諸如觸屏(未列出)這樣的用戶接口設(shè)備至總線的用戶接口適配器22,一個用于聯(lián)接工作站至數(shù)據(jù)處理網(wǎng)絡(luò)的通信適配器34和一個用于將顯示器38聯(lián)接至總線的顯示適配器36。在最佳實施方式中的工作站其上駐留OS/2操作系統(tǒng)和作為一個工具箱包含在內(nèi)組成此發(fā)明的計算機軟件。
OS/22.x(OS/2是一個由IBM公司生產(chǎn)的商標及產(chǎn)品)操作系統(tǒng)包括一個稱為系統(tǒng)對象模型(SOM)的語言中性的面向?qū)ο蟮某绦蛟O(shè)計機制。圖2說明了一個基礎(chǔ)SOM數(shù)據(jù)結(jié)構(gòu)。一個狀態(tài)數(shù)據(jù)結(jié)構(gòu)210用于說明一個特定對象其第一個全字220包含此對象的方法過程表240的地址。方法過程表240含有類對象數(shù)據(jù)結(jié)構(gòu)245的地址。和特定對象250和260的各種方法的地址。地址245指向類對象數(shù)據(jù)結(jié)構(gòu)248。與此對象屬于同一類的所有對象同樣包含指向此方法過程表240的地址。當對象所繼承的所有方法在祖先類的方法過程表240中出現(xiàn)時將在內(nèi)存的相同偏移處有它們的方法過程地址。含有兩個方法過程的指令序列的計算機內(nèi)存塊的地址在250和260陳述。位置270和280位于計算機內(nèi)存中且含有250和260處地址所指向的特定方法過程的指令序列。IBM系統(tǒng)對象模型的完整說明可在以下文獻查到,IBM存檔AT9-91-072,序列號07/805,778,美國專利號5,421,016,名稱為“從一種為靜態(tài)方法調(diào)用設(shè)計的應(yīng)用程序中動態(tài)地調(diào)用對象模型的系統(tǒng)和方法”,編排在這里作為參考。
圖3說明了本發(fā)明用名為“Graduate”的一個動態(tài)的面向?qū)ο笳Z言類生成一個名為“Student”的SOM類子類的新的子類生成機制。過程從框300開始,在310生成一個動態(tài)語言代理類對象,指向“Student”SOM類對象。一個代理對象是一個用于接收消息并將消息發(fā)送到一個是代理的對象,并如同實際對象作出應(yīng)答那樣返回一個應(yīng)答的對象。如框320所示,代理類對象含有SOM類中的每個方法的一個根程序方法。當如框340所示激活根程序方法時,它調(diào)用框360的“somClassDispatch”機制以調(diào)用相應(yīng)的SOM方法。根程序方法僅搜尋如框380所示的“Student”類或其上定義的那些SOM方法。過程繼續(xù)到框390,為“ Graduate”類生成了一個動態(tài)語言子類“Student”。如框400所示,動態(tài)語言類對象具有一個跟蹤用動態(tài)語言實現(xiàn)的新的或重置的方法的方法表。動態(tài)語言類對象同樣保留有關(guān)類數(shù)據(jù)的信息。
現(xiàn)在轉(zhuǎn)向圖4,過程在410繼續(xù),前進到框420,通過使用SOM接口生成了一個名為“Graduate”的SOM類對象。SOM接口“somCreateDynamicClass”用于生成類對象“Graduate”。熟練的技術(shù)人員懂得可由動態(tài)語言自動完成類對象“Graduate”的生成。當SOM接口生成了“Graduate”類時,如框430所示除“somDispatch”和“somClassDispatch”外所有方法指針被再調(diào)度根程序重置。如框440所示再調(diào)度根程序的主要作用是將控制流重新定向到“SomDispatch”發(fā)送到此類對象的所有信息經(jīng)過調(diào)度機制被重新定向到“somDispatch”接口。在框450所示動態(tài)語言用它自己的調(diào)度過程重置“somDispatch”接口。如框460所示,新的調(diào)度過程將首先在動態(tài)語言類對象方法表中搜尋方法。若此方法用動態(tài)語言實現(xiàn),如框470所示,它將在動態(tài)語言環(huán)境中被引用。否則,按框480所示調(diào)用“somClassDispatch”接口,將消息重定向到SOM環(huán)境。
現(xiàn)在轉(zhuǎn)向圖5,說明了一個用動態(tài)語言增加新方法的過程。此過程從框500開始,進行到框510,確定是否增加一個新方法。在框520使用動態(tài)語言以增加新方法。如框530所示,新方法被添加到類對象的動態(tài)語言方法表。根據(jù)框540#SOM環(huán)境經(jīng)過調(diào)度分辨機制可以使用新方法。
轉(zhuǎn)向圖6,公開了一個用動態(tài)語言重置方法的過程。過程在框600開始,進行到框610,檢測是否有SOM方法需重置。若有,如框620所示,過程允許向動態(tài)語言方法表添加新方法。增加新方法后,在框630確定是否需要訪問新方法。若需要,在框640過程確定是否需要偏移分辨。若是,在框670使用偏移分辨機制訪問新方法。否則,在框650進行檢查確定是否需要要名稱分辨。若需要,過程使用名稱分辨機制訪問新方法。否則,在框660過程確定是否需要調(diào)度分辨。若需要,在框690過程使用調(diào)度分辨機制訪問新方法。否則,在框700過程終止??梢砸庾R倒可從SOM環(huán)境經(jīng)過任何分辨機制可以使用新方法。
現(xiàn)在轉(zhuǎn)向圖7,說明了一個生成實例變量(類數(shù)據(jù))的過程。過程從框710開始進行到塊720,進行檢查確定是否需要生成類數(shù)據(jù)。若需要,在框730過程以純動態(tài)語言類中實例變量的方式在動態(tài)語言環(huán)境中生成實例變量。否則,在框740過程終止。
轉(zhuǎn)向圖8,說明了一個生成類實例的技術(shù)。過程在框810開始,生成實例“Graduate”。這可在SOM環(huán)境或動態(tài)語言環(huán)境下完成。熟練的技術(shù)人員懂得當在一個選定環(huán)境中生成一個實例時,能夠在一個非選定環(huán)境中自動生成一個相應(yīng)實例?;氐綀D8,若過程在框820確定一個動態(tài)語言實例被生成,在框840動態(tài)語言實例將產(chǎn)生一個如框840所示的指向SOM環(huán)境代理實例的指針。另外,動態(tài)語言實例將同樣攜帶動態(tài)語言對象數(shù)據(jù)。若在框830生成了一個SOM實例,則在框850#SOM實例將有一個指針指向動態(tài)語言代理實例。
現(xiàn)在轉(zhuǎn)向圖9,流程圖說明了向“Graduate”類對象發(fā)送消息。過程在框900開始進行到框910,確定是否需向類對象“Graduate”發(fā)送消息。若是,在框920進一步確定方法是否已在方法表中定義。若方法已在方法表中定義,在框930在動態(tài)語言方引用此方法。動態(tài)語言以一個變量參數(shù)表的形式準備方法參數(shù)并將其傳送給“somClassDispatch”接口。若方法表中沒有此方法,在框940過程確定是否需添加此方法。若是,在框950過程調(diào)用過程以添加此方法。否則,過程在框970結(jié)束。
盡管參照最佳實施方式說明了本發(fā)明,但熟練的技術(shù)人員懂得這里不背離本發(fā)明的精神、范圍和指教在細節(jié)上可作出各種各樣變化,因此,這里公開的發(fā)明僅限定于隨后的權(quán)利要求書中所規(guī)定的內(nèi)容。
權(quán)利要求
1.一個在計算機系統(tǒng)中實現(xiàn)的用面向?qū)ο蟮膭討B(tài)語言生成子類系統(tǒng)對象模型對象的方法,包括步驟在系統(tǒng)對象模型環(huán)境中提供具有特定名稱的類對象;在所述系統(tǒng)對象模型環(huán)境中用所述動態(tài)語言生成一個具有一個指向所述類對象指針的代理類對象;在所述系統(tǒng)對象模型環(huán)境中用所述動態(tài)語言生成一個具有所述類對象的特定名稱的子類;以及由所述代理類對象中調(diào)用一個調(diào)度程序,以便在所述系統(tǒng)對象模型環(huán)境的一個方法中搜尋所述類對象。
2.權(quán)利要求1的方法,其特征在于調(diào)用的步驟還包括在所述系統(tǒng)對象模型環(huán)境中搜尋所述類對象和在所述類對象或其上的許多方法。
3.權(quán)利要求1的方法,其特征在于生成一個代理類對象的步驟還包括為調(diào)用一個系統(tǒng)對象模型環(huán)境調(diào)度程序從而在所述代理類對象中存儲一個根程序方法,所述調(diào)度程序用于調(diào)度所述系統(tǒng)對象模型內(nèi)的搜尋方法。
4.權(quán)利要求1的方法,其特征在于生成一個代理類對象的步驟還包括為所述具有用于所述的動態(tài)語言的新方法的代理類對象生成一個方法表。
5.權(quán)利要求4的方法,其特征在于生成一個方法表的步驟還包括在所述方法表中存儲一個被所述動態(tài)語言重置的方法。
6.權(quán)利要求4的方法,其特征在于在生成一個代理類對象的步驟還包括在所述代理類對象的所述方法表中存儲類數(shù)據(jù)。
7.一個在數(shù)據(jù)處理系統(tǒng)中采用面向?qū)ο蟮膭討B(tài)語言生成子類系統(tǒng)對象模型對象的裝置,包括用于在一個系統(tǒng)對象模型環(huán)境中提供一個具有特定名稱的類對象的裝置;采用所述動態(tài)語言生成一個具有指向所述系統(tǒng)對象模型環(huán)境中所述類對象的指針的代理類對象的裝置;采用所述動態(tài)語言生成一個具有在所述系統(tǒng)對象模型環(huán)境中所述類對象的指定名稱的子類的裝置;與用于為在所述系統(tǒng)對象模型環(huán)境的一個方法中搜尋所述類對象而從所述代理類對象中調(diào)用一個調(diào)度程序的裝置。
8.權(quán)利要求7的裝置,其特征在于用于調(diào)用的裝置還包括用于在所述系統(tǒng)對象模型環(huán)境中搜尋所述類對象和在所述類對象或其上的許多方法的裝置。
9.權(quán)利要求7的裝置,其特征在于生成一個代理類對象的裝置,還包括用于為調(diào)用一個系統(tǒng)對象模型環(huán)境調(diào)度程序從而在所述代理類對象內(nèi)存儲一個根程序方法的裝置,所述調(diào)度程序用于調(diào)度所述系統(tǒng)對象模型內(nèi)的搜尋方法。
10.權(quán)利要求7的裝置,其特征在于生成一個代理類對象的裝置還包括為所述具有用于所述動態(tài)評議的新方法的代理類對象生成一個方法表的裝置。
11.權(quán)利要求10的方法,其特征在于用于生成一個方法表的裝置還包括用于在所述方法表中存儲一個被所述動態(tài)語言重置的方法的裝置。
12.權(quán)利要求10的方法,其特征在于用于生成一個代理類對象的裝置還包括用于在所述代理類對象的所述方法表中存儲類數(shù)據(jù)的裝置。
全文摘要
一個用于為一個動態(tài)的面向?qū)ο蟮恼Z言生成子類系統(tǒng)對象模型(SOM)類對象的方法和裝置。首先使用動態(tài)語言生成一個指向SOM類對象的代理類對象。然后生成一個動態(tài)語言子類。隨后使用SOM接口生成一個SOM類對象,這導致某些SOM方法被動態(tài)語言再調(diào)度根程序所重置。動態(tài)語言重置SOM調(diào)度過程并用它自己的過程取代調(diào)度程序。新的調(diào)度過程將對消息響應(yīng),首先在動態(tài)語言類對象方法表中搜尋一個方法,若未找到,將消息重定向至SOM環(huán)境。
文檔編號G06F9/45GK1155694SQ96121509
公開日1997年7月30日 申請日期1996年12月3日 優(yōu)先權(quán)日1996年12月3日
發(fā)明者邁克爾·黑登·康納, 納坎·科斯維, 西姆森·克里斯托弗·納什, 戴維·西格·倫肖 申請人:國際商業(yè)機器公司