absmiddle SOM 簡介


[解說] [版主] 本文轉自 OS/2 版 u8522519@cc.nctu (Zombie Chuang): 這是從 OS/2 2.0 Technical Library 裡面抄了部份, 然後改了部份的 SOM 2.0 簡介. 現在 T-Warp 是用 2.1 吧... 忘了正確的版號, Merlin 好像也是... SOM = System Object Model 什麼是 SOM? SOM is an object-oriented programming interface for building, exposing, and manipulating software objects. 這是在 Technical Library 中的官方說法,也就 是說, SOM 是一個用來建立,管理軟體物件的一個介面。它是一個與語言無關的介面 ,因為在使用 SOM 的時候,程式設計師必需使用一個介面定義語言來定義他所作出來 的物件與外界溝通的介面。這樣,可以不用要求物件的發展者,及物件的使用者使用 同樣的語言來作開發。這個介面定義語言也提供了在物件導向理論中的繼承,而提供 了高度的程式可重用性。 為什麼定義出 SOM 規格? 隨著軟體複雜度的增加, 使得程式的複雜度也愈來愈高。而物件導向 (Objected- Oriented) 的概念提供了軟體界一個在硬體界使用以久的方式。來提高程式碼的可重 用性。但是由於物件導向語言本身一些先天上的限制,程式的可重用性一直還不能算 是非常的好。於是,IBM 提出了 SOM (System Object Model) 系統物件模型的規格。 這個規格,提供了一個物件導向的環境給程式設計師,讓他們可以使用其他的設計師 所開發出來的 SOM 物件,而不用改變原來所習慣使用的開發語言,也不用擔心不用語 言間的連結 (Binding) 的問題。 如何使用 SOM? 您必需使用 SOM 的介面定義語言來完成一個 SOM 的物件。如果您所使用的開發平台 是 IBM VAG C++ 的話,您也可以使用它所提供的 Direct to SOM 的技術。不過聽說 在下個版本中這個技術將會被拿掉。關於這個部份,還有許多的資料,日後有時間整 理再為各位介紹。不過大家可以參考 VAG C++ 中附的電子書,印象中也有這方面的說 明。 為什麼要特別介紹 SOM? 許多的朋友應該看得出來,我最近對 OpenDoc 非常的有興趣。而 SOM 就是在 OpenDoc 中用來管理不同的 Part 的物件技術,在 OpenDoc 中算是比較底層的部份。另外,身 為個 OS/2 User, 我們每天就是在和 SOM 在打交道,整個的 Workplace Shell 就是 使用 SOM 技術來完成它高度物件導向式的操作方式。 有那些使用 SOM 的應用程式? 最近大家在玩的, 或許應該說前一陣子吧, Amiptr 就是使用了 SOM 的技術, 程式的 發展者只對游標的動晝部份作了特殊的處理,其他有關游標的動作完全交由系統原先 的程式,來完成。Object Desktop 也是另一個使用 SOM 的例子。以及另外有一個排 程的程式,它可利用 SOM 在每個程式的設定筆記本中增加了一個設定頁,讓使用者可 以設定要在什麼時間執行這個程式。 簡單介紹 SOM 的物件架構 SOM 的底層有 SOMObject, SOMClass 和 SOMClass Manager 三個類別。每一個使用者 所建立的類別都是必需繼承自 SOMObject類別,而每一個類別都必需有一個對應的 SOMClass 類別來處理產生物件 (Instance) 的動作,也就是 SOMClass 是 SOMObject 的一個 MetaClass,SOMClass 總是負責產生某些對應的 SOMObject 的動作。而在整 個的模型中只會有一個 SOMClass Manager 的物件,這個物件是用來管理系統中物件 的註冊,以及其對應的動作。這幾個物件都是定義在 SOM.DLL 中。 SOM 的擴充 目前,SOM 已經有了 3.0 版了,而且也有的分散式版本的 SOM 稱為 DSOM, 可用來存 取其它機器上的物件。而且,SOM 符合 COBRA 的規範。目前 SOM 支援的平台有 OS/2, MAC, AIX, WIN 95/NT,關於其他的 UNIX 平台我就比較不清楚,不能亂說,不過至少 有這幾個平台就是了,不過 Linux 下應該也有,因為 OpenDoc 也有 Linux 的 Port. 其他 在 Win 平台直到最近才推出了 COM 和 DCOM 的物件模型,而在 OS/2 系統中則是自 2.1 版就開始直接使用在系統中了,而且是符合 COBRA 的規範。這篇文章有點亂,因 為是現學現賣的關係,請大家多多原諒指正。
上一層目錄