<このシリーズの、前の記事 | このシリーズの目次 | このシリーズの、次の記事>
我々は、UNOの基本概念を正確に理解して、UNOをよく活用できるようにする必要がある。
そう。何事においても、基本を正確に理解せずによく活用することはできない。
あらかじめ言っておくが、参考文書における用語の使用法は、私にはときどきよく理解できない。例えば、「UNOオブジェクト」は、クラスインスタンスを意味しているのか、クラスを意味しているのか?「UNOコンポーネント」は、クラスを意味しているのか、Jarを意味しているのか、UNO拡張機能を意味しているのか?「サービス」という用語は、現れる箇所によらず同一の概念を表しているのか?. . . 我々のねらいは、各概念を別の概念と明確に区別し、各用語を単一の意味で使用することだ。このために、我々の用語使用法は、参考文書のものと少し違っている。別に奇をてらっているわけでなく、我々が自分で理解できるように記述するためには避けられないことなのだ。
ははあ、まあ、やってみよう。
UNOオブジェクトからはじめよう。UNOオブジェクトは、UNOプロトコルを実行するクラスインスタンスだ。つまり、ただのJavaクラスインスタンスは、UNOプロトコルに従わないのでUNOオブジェクトではない。注意として、我々がUNOオブジェクトという用語を使うとき、それは、常にクラスインスタンスを意味しており、クラスのことではない。
「UNOプロトコルを実行する」というのはどういう意味なのか?
UNOで重要なことは、UNOオブジェクトが、別のプログラミング言語環境からでさえも、あらかじめ決められたように取り扱えることだ。それを可能にするには、あらゆるUNOオブジェクトが従うあるプロトコルがなければならない。このプロトコルを「UNOプロトコル」と私は呼んだ。
ははあ。
前の記事で開発したUNO拡張機能のおいては、LibreOffice Basicマクロ内の変数、l_hiUnoExtensions、から参照されていたオブジェクトがUNOオブジェクトだ。
なるほど。
UNOオブジェクトをインスタンスとして作る元となるクラスを、我々は、「UNOコンポーネント」と呼ぼう。したがって、UNOコンポーネントは常に、クラスであって、クラスインスタンス、Jar、UNO拡張機能ではない。こうすれば、UNOオブジェクトとUNOコンポーネントの区別が明確になるだろう。
ああ、明確だ。
参考文書はコンポーネントという用語を奔放に使用しているようだが、我々は、「UNOコンポーネント」という用語を、この厳密に単一の意味で使用する。
いいだろう。
先のサンプルUNO拡張機能において、HiUnoExtensionsImplementationは、UNOコンポーネントだ。
なるほど。
UNOインターフェースとは、あるUNOコンポーネントの一つの様相の抽象的な外向きの表明だ。「抽象的」というのは、実装を含まないという意味だ。
UNOインターフェースのUNOコンポーネントとの関係は、JavaインターフェースのJavaクラスとの関係と同じということでよいか?
そうだ。JavaクラスがJavaインターフェースを実装するように、UNOコンポーネントはUNOインターフェースを実装する。実のところ、Javaでは、UNOインターフェースはJavaインターフェースであり、UNOコンポーネントはUNOインターフェースを実装するJavaクラスだ。上で様相という用語を使ったが、これは、UNOコンポーネントは、複数のUNOインターフェースを実装することができ、UNOインターフェースは、必ずしもUNOコンポーネントの全体を代表せず、UNOコンポーネントの一つの様相を代表するからだ。
ここで重要なのは、どのUNOコンポーネントも少なくとも一つのUNOインターフェースを実装しなければならないということだ。というよりも、Javaクラスは、UNOインターフェースを実装することでUNOコンポーネントになるというべきだろう。
UNOインターフェースを実装するJavaクラスは、すべてUNOコンポーネントだということか?
そうだ。我々の用語では、「UNOコンポーネント」と「UNOインターフェース実装」は同一のことを指している。
なるほど。
ルートとなるUNOインターフェース、'com.sun.star.uno.XInterface'、が存在し、他のUNOインターフェースはすべて、このルートUNOインターフェースの子孫インターフェースだ。一つのUNOインターフェースは、複数のUNOインターフェースを継承することができる、 . . . 今は。
今は?
つまり、昔の仕様ではできず、それが若干の複雑な事情の原因になっているが、それについては、後で述べよう。
オーケー。
サンプルUNO拡張機能において、XHiUnoExtensionsは、UNOインターフェースだ。
なるほど。
- Apache OpenOffice Wiki. (2014/01/02). Apache OpenOffice Developer's Guide. Retrieved from https://wiki.openoffice.org/wiki/Documentation/DevGuide/OpenOffice.org_Developers_Guide