LibreOffice(11)LibreOfficeのオブジェクトとUNOのインターフェイス

2014-01-19

旧ブログ

t f B! P L

前の関連記事:LibreOffice(10)オブジェクト指向プログラミングのお勉強:総論


LibreOfficeもオブジェクトから成り立っています。LibreOfficeのオブジェクトはUNOのインターフェイスを通して操作します。そのためにはインターフェイスの使い方を習得しないといけません。

LibreOfficeのオブジェクトはUNOのインターフェイスを通して操作する


LibreOffice(5)PythonでLibreOfficeが動く仕組み:UNOでみたようにLibreOfficeはUNOで成り立っているのでLibreOfficeのオブジェクト=UNOのオブジェクトです。

UNOにはインターフェイスという概念があります。
An interface specifies a set of attributes and methods that together define one single aspect of an object.
Objects, Interfaces, and Services - Apache OpenOffice Wiki
これがUNOのインターフェイスの定義です。

UNOでのインターフェイスはUNOのオブジェクトがもっている属性とメソッドの集合のことを指します。

属性やメソッドはUNOのオブジェクトの"操作盤"に相当するわけですからLibreOffice(5)PythonでLibreOfficeが動く仕組み:UNOでみたようにここでいうインターフェイスは英和辞書のinterfaceの意味「接点」と同じ意味です。

(Using Services - Apache OpenOffice Wikiより改変)

UNOのオブジェクト(正確にはその生成元のサービス)とそのインターフェイスをUMLで表したものです。

LibreOffice(8)統一モデリング言語UML(Unified Modeling Language)の学習にでてくる初歩のUML:第5回で解説されているインターフェイスと全く同じです。

ロリポップ($$$-\bigcirc$$$ )で右に並ぶXで始まる名前のものがすべてインターフェイスです。

これらは左側にあるTextDocumentというUNOのオブジェクトとの接点になりそれぞれのインターフェイスを通してgetTextやらfindAllやらのメソッドでオブジェクトの操作ができることがわかります。

これだけわかればもうばりばりマクロが書けそうなのですが、ばりばりとは書けないのですよ。

原因は資料不足です。

LibreOffice BasicならAndrew Pitonyak's OpenOffice Macro Informationを見ればなんとかなるかもしれません。

それでもエクセルのVBAみたいにとりあえずGoogle検索すればなんでも知りたいことがみつかるという資料の豊富さにはかないません。

Pythonマクロの資料はBasicマクロの資料よりもっと見つかりません。

結局LibreOfficeの機能を網羅的に見ようと思うとLibreOffice: Namespace Listを見ないといけません。

さらにこれの見方の解説がOpenOffice Developer's Guideになるのでやっぱりこれを読まないといけません。

上の図もOpenOffice Developer's Guideからとってきたものです。

OpenOffice Developer's GuideにはJavaの例ばかりでてくる


OpenOffice Developer's GuideにはJavaの例ばかりでてきます。

どちらもSun Microsystemsで生みだされたものだから、と思っていましたが実はそれだけではなくUNOで使われている仕組みの概念がJavaとそっくりなのです。

まあそれはJavaの仕組みを学習したあとで気がついたのですけど。

LibreOfficeはもうSun Microsystemsから離れたのでOpenOffice.orgでJavaで書かれていたようなところはC++で書き直す作業が進んでいます。

でもUNOの構造はJavaの構造とそっくりなままです。

上にでてきたApache OpenOffice Developer's Guideに書いてあるインターフェイスの定義は単純明快でとてもわかりやすいです。

さらに読み進んで次の項目のUsing ServicesにあるUsing InterfacesにはJavaでUNOのインターフェイスの使い方が載っています。

なぜそういう手続きを踏まないといけないのかという理由も書いてあります。

読めば異なる言語で同じUNOオブジェクトを使うためにインターフェイスという仕組みを取り入れたということはわかるのですが、私がJavaに疎いせいもあってその知識だけでは図に起こせないのですよね。

UNOにはインターフェイス以外にサービスとかサービスマネジャという概念もあってその理解にもインターフェイスの理解が必要という感じがしたのでまずはJavaのインターフェイスのお勉強をすることにしました。

参考にしたサイト


Apache OpenOffice Developer's Guide - Apache OpenOffice Wiki
LibreOfficeの解説はないのでOpenOfficeの解説書を使います。

【改訂版】初歩のUML:第5回 少しだけ高度なモデリング技術(その2)クラスの依存関係と実現関係 - ITmedia エンタープライズ
UMLでインターフェイスの表し方。

ペロペロキャンディ - Wikipedia
UMLでインターフェイスを表すロリポップの語源

Andrew Pitonyak's OpenOffice Macro Information
OpenOffice.org Basicサンプル集があります。

LibreOffice: Namespace List
LibreOffice 4.2 SDK APIの入り口com.sun.star。

次の関連記事:LibreOffice(12)オブジェクト指向プログラミング:インターフェイス

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ