absmiddle OpenDOC vs. OLE2


[解說] [版主] 94 年的文章. EightCloud.bbs@csie.nctu.edu.tw (嵐雲): OLE2 為 Microsoft 所提出, OpenDoc 由 IBM, WordPerfect 和 Apple 所提出的標準. 目前在 NEWS 上也有人在比較討論, 由於本人英文不怎麼好, 實在看不下去. 在這邊 用中文提出來, 也希望對此有研究的網友們, 一起來討論. (不要怪我把 OLE2 放在 OpenDoc 前面, 因為我對 OLE2 比較熟.... 因此對 OLE2 會寫比較多, 但並不表示 OLE2 比較好 :>) 簡介 OLE2 和 OpenDoc 的相同點, 都是想改善目前軟體操作的觀念. 就現在而言, 大多數 的軟體都是以程式為中心, 再存取編輯處理相關資料. 而 OLE2 和 OpenDoc 都是希望 以文件(物件)為中心, 來操作軟體. 兩套標準, 都能讓使用者使用 就地編輯(Inplace Editing, 注一), 和拖放(Drag & Drop, 注二)功能. OLE2 介紹 OLE2 事實上非常複雜, (我主要是讀 Inside OLE2 這本書, 不過只有讀前幾章而已, 所以若有寫錯, 希望網友能更正, 大概等 NT 3.5 出來, 我才會繼續讀吧!) 可稱為半 個作業系統. 在 M$ 下一代的物件導向化 OS(Cairo吧!)中, 可能是以 OLE2 為基礎, 到時, Win32 API, 可能變成架在 OLE2 上面, 也就是用 OLE2 做程式設計, 是最快 (Native)的方法. OLE2(Object Liking and Embedding 2), 是以 Windows Object 為基礎, 其它的各種 元件, 則是架在 Windows Object 之上. 而 Windows Objec 之間的交談, 則透過 Interface (可以想成 C++ class 的 Method) 來交換資料. Interface 事實上就是一 組 Function Table, 在寫 OLE2 程式時, 最初步的, 就是如何獲得你所需要的 Windows Object 的 Interface. 在 OLE2 中, 包含了一些 Storage-related Interfaces, 叫做 Structured Storage, 用這些規格, 可 Implement a file system in a file, 堶悼]含兩種型態, Storages-類似目錄 和 Streams-類似檔案 (OpenDoc 中, 有 相同的功能, 稱 Storage Unit 與 Value). 有了此結構, 使快速的局部修改文件內容成為可能. 現行作法, 即 使局部修改文件, 也要將整個檔案重新寫入檔案系統中. Uniform Data Transfer, 提到如何交換資料, 不再像第一版 OLE 中, 一定要透過 DDE 其中還有許多章結, 我就不詳細說了(主要是我也沒有讀:>), 之後才是 Compound Documents: Object Linking, Object Embedding, 和 Monikers. 在第一版的 OLE (就 是現行 Windows 3.1 內附的 OLE), 所以包含的就只是 Compoud Document 中的 Object Linking & Embedding, OLE2 是一個很大的擴充. 最後提到 Automation, 似乎功能強大, 不過這本書也沒多提. 有網友知道嗎? 現行有 沒有什麼軟體用到它? OpenDoc介紹 由於我沒看過什麼 OpenDoc 的資料, 這邊所寫的, 都是中文 Byte 上所刊的. OpenDoc 會以 IBM 的系統物件管理者 SOM(System Object Manager) 當作它呼叫的機 制, 用 Apple 的 Bento 標準 作為它的儲存機制, 以及用工業界的標準 CORBA (Common Object Request Broker Architecure) 在網路上共享物件. <Mac 的網友們, 對 Bento 熟嗎? 能不能介紹一下呢? :),CORBA 是什麼?> SOM 1.0 是一個作業系統的延伸, 它提供了 OOP 機制, 如繼承以及函式的分派( Dispatching). SOM2.0 又增加入多重繼承, C++ 繫結(binding), 以及一個定義介面 的語言. 另外, 在 SOM 的接任者 DSOM(Distributed SOM), 能讓物件擴展到網路間, 並且成為 IBM 分散式物件策略的基礎. <DSOM 會不會和 OpenDoc 扯上關係?> 比較 由於對 OpenDoc 了解不多, 所以也無從比起. 雜誌上有提到的, 最明顯的是, 透過 CORBA, OpenDoc 能在網路上共享物件, 但 OLE2 還不能. <我自己的想法, 可能要到 Cairo 的下一代, 才能把 OLE2 上網路, 成為 分散式物件導向的作業系統>. 而 OpenDoc 能忠實地記錄一份文件完成前的所有草稿, 這是目前 OLE 所沒辦法做到的. OLE2 現況 目前 OLE2 在 Win 3.1 上, 已逐漸成熟, 目前 M$ OFFICE 版本, 都有 OLE2 功能, ( 中文版好像有一些, 但功能不完整), 其廠家的軟體也有支援.在 NT 上, 則要等 3.5 出來(目前中,英版都在 beta). 在程式設計方面, 除了 OLE2 SDK 外, Visual C++1.5 所附的 MFC,也簡化了程式設計. Visual C++2.0(beta) 也有 win32 版的 MFC 可寫 Win32(NT,Chicago) 的 OLE2. 以 OLE2 和 VBX 為基礎的 OLE Custom Controls 獲得 COMDEX 春季展 Signficant Technology 獎, 會有16bit 和 32bit 版 <32bit Visual Basic 快出來了吧?> 我曾經以 Visual Basic 3.0 的 OLE2 vbx, 做為 word 6.0 的內嵌(embedding)物件, 輕易的達到 Inplace active editing.<連程式都不用寫. Word 5.0 中文版無此功能> OpenDoc 現況 一無所知! 知道現況的網友們, 提供情報吧! Inplace editing 就是你可以不用離開你現在的程式視窗, 就可用其它的程式來編輯 資料, 你目前所在的視窗的 Menu 會依所需而自動修改. 在 Windows 3.1 附的 OLE, 當你要編輯物件時, 會出現另一個視窗, 所以你會看見兩個視窗, 兩份資料. Inplace editing 讓人有以文件為中心的感覺, 隨著編輯不同程式的資料, 是視窗的外觀加以 改變來配合所編輯資料的屬性種類, 而不是跳出另一個視窗, 要到其它視窗編輯不同 的資料(以程式為中心). Drag & Drop: 在舊有的 OLE 中, 物件的拷貝, 要在來源與目的視窗間切換, 利用 Menu 編輯(Edit)的複製(Copy)和編輯的貼上去(Paste)來完成. 有 Drag & Drop, 你 只要把滑鼠有到來源視窗, 指向物件, 按下鍵, 拖到目的視窗的位置, 放開即可. 參考 中文 Byte 93-12 月, P201,P207 中文 Byte 94-8 月, P72,P99 Inside OLE2 一書. OpenDoc OpenDoc 之下有四種基礎科技, 包括一個可做類似 OLE 嵌入的複合文件架構, 一個複 合檔案格式(Apple Bento), 一個語言中立性的自動化架構(以 Apple Evnets 為基礎) , 支援動態鏈結與二進碼元件交換(IBM DSOM). 中立性的自動化架構, 是不是跟 OLE2 的 Automation 類似? 雖然 OLE2 有定義 Automation 的雛形, 但由於獨立軟體尚未 達成共識, 所以還未能成為標準吧! 這方面, 應該落後 Mac 已應用許久的 Apple Events 一段時間吧! 從這文章看起來, OpenDoc 比 OLE2 好 <我還沒看過 OLE2 比 OpenDoc 好的文章:( > 不過就是發展進度慢了些, 這篇文章出來時<94,5月>, 市場上的發展者版本問市(Mac, Win,OS2) 也不久吧! 不知道什麼時候才能看到它的軟體.<或者已經有了?> OLE2 OLE2 要上網路, 似乎是要透過 COM (common object model), 相當於 IBM 的 DSOM. 兩者最大的不同, 在於 COM 的聚集功能 與 DSOM 的沿襲功能. <兩者好像是要達成類 似 OOP 中繼承的效果, DSOM 較像繼承, COM 較不像> 在 OLE2+VBX 方面, 於 VC1.5 中, OLE2 in-process servers <利用 DLL, 和 OLE2 client 在同一個 process. 另外, OLE2 server 還有一種稱為 Server Application, 是一個獨立 process, 則和 client 交談就要用 IPC 隱藏於 Uniform Data Trnsfer 吧!> 可嵌入在 Container Document <OLE2 client>, 藉由自動化介面<automation interface?>(IDisatch) 將內部方法輸出給呼叫者. VC2.0 之後, 將允許具備自動化 支援特性(automation aware)的 in-process servers 轉變成功能完整的 OLE 控制, 並維護可編輯性與事件產生的能力, 而如同現在的 VBX 那樣結合資料. <對 Automation 的觀念實在不太懂> (ps. VC2.0 後, 稱 OLE2+VBX 為 OCX-OLE Custom Control) PS. 1.在程式設計語言所講的物件, 主要在同一個 process 堶, OLE2 的物件, 則在同 一個機器(可跨 process, 也可在同一個 process--利用 DLL), Byte 這篇文章, 則在介紹不同機器(跨網路的) 間的物件如何運作. 若這做的好, 以後分散式作業系 應該就比較好做了吧! 2.這篇文章還提到許出其它的技術, 如 NeXTSTEP, Novell, Sun, DEC 等. 其中有一 個圖畫出各家廠商所支持的 model. 其中還是 Microsoft 最霸道吧! 用的及支持的 技術全是自己的, OLE, COM 等, 我想 COM 間的 RPC 也是他們自己定義的吧!除了 Windows 之外, 它只支援 Macintosh. 參考 中文 Byte 94-5 月, P73
上一層目錄