前の関連記事:LibreOffice(12)オブジェクト指向プログラミング:インターフェイス
私の目標はLibreOffice Calcでマクロを書くことです。Developers Guideに一通り目を通したらあとはGoogle検索だけでなんとかなるような気がします。でも折角読んだので忘れてしまわないようにメモに残しておきます。
Developer's Guide 英語版と日本語版はどう違うの?
Apache OpenOffice Developer's Guide - Apache OpenOffice Wiki
英語版
Developer's Guide
日本語版
英語版はPDF版の表紙にOpenOffice.org 3.1 Developer's Guideと書いてあります。
英語版のObjects, Interfaces, and ServicesでOpenOffice.org 2.0で導入されたとあるServicesの項目のnew-style serviceとold-style serviceの解説が日本語版のサービスにはないので日本語版はOpenOffice.org 2.0より前のものと思われます。
英語版は24章から成っていますが日本語版は22章から成っています。
英語版にある18 Scripting Frameworkと19 Graphical User Interfacesの章が日本語版にはありません。
英語版Objects, Interfaces, and Servicesを読むとOpenOffice.org 2.0からインターフェイスの多重継承が可能となりそれに伴ってサービスとインターフェイスが1対1の対応になったと書いてあります。
インターフェイスが多重継承できる前はサービスが複数のインターフェイスを持っているだけでなく、サービス自身が継承することによりUNOオブジェクトに多数のインターフェイスを備えさせていました。
それがインターフェイスの多重継承が可能になったのでその必要がなくなり、継承はインターフェイスで行うことが望ましいと書いてあります。
そう書いてあるのですけどそれまでの部分が作り直されたわけではなくold-style serviceがそのまま使われています。
しかもその部分はOpenOffice.orgの基幹部分なのでDeveloper's Guideの解説にはold-style serviceがいっぱいでてきます。
英語版は旧版から修正されていない部分もあり初めて通して読むとわけがわからなくなってきます。
インターフェイスが多重継承されることもObjects, Interfaces, and Servicesにはできると書いてありますがDifferences Between UNO and Corbaにはできないと書いてあります。
その点では日本語版のほうが最初にさっと通して読むにはわかりやすいです。
とりあえず理解できそうなところをじっくり読んでいきます。
1 読者のガイド Apache OpenOffice Developer's Guide
提供された、たいていの例がJava で書かれる。そうなんですよ。とくに基幹部分はJavaの例ばかりです。
1.1 このマニュアルがカバーするもの
(H26.1.27追記。Javaでマクロは書けないと思っていたのですがA. Java-UNO - N->N->NにJavaのマクロの実行の仕方が書いてあります。Javaマクロはコンパイルしておかないといけません。Eclipse Plugin for OpenOffice.org extension developmentではOpenOffice.orgの代わりにLibreOfficeを指定することができませんでした。)
マクロに例を生かそうと思うとPythonなどに翻訳しないといけません。
queryInterface()の話が最初のほうにたくさんでてきて何のことかよくわかりませんでした。
OOoPython/java_to_python - ...?を読んでようやくわかりました。
これは、"かっこのなかで指定された1つのクラスの機能を,継承するように 言われたインスタンスを用意しなさい"という命令です。 要するにこれを使えば多重継承を言語がサポートしていなくても うまくそれと同じことが出来るわけです。LibreOffice(12)オブジェクト指向プログラミング:インターフェイスで学習したようにJavaのクラスは多重継承ができないのでOpenOffice.orgのqueryInterface()の機能で対応させているそうです。
OOoPython/java_to_python - ...?
Pythonでは多重継承ができるのでqueryInterface()の機能を使う機会はないそうです。
ほかにJavaの例を読むときに私がつまずいたのが「キャスト」。
Javaの式にはよくわからないところにサービス名がたくさんでてきます。
これが「キャスト演算子」というもので(データ型)を前に置くことでカッコ内のデータ型にそのデータを変換します。
整数型とか文字型とかがあるのは知っていましたがJavaではオブジェクトにも型があります。
オブジェクト型があるのではなくオブジェクトにいろいろ型があるのです。
Javaは「強い静的型付け」なのでなんでも型を指定する必要があるそうです
9-5. 継承4 オブジェクトのキャスト - マンガで分かる Java入門講座 - マンガPG
Javaのオブジェクトに型についてはこの記事がわかりやすかったです。
Java - Wikipediaによると2004年にでたJ2SE 5.0からJavaでもそんなに型変換しなくてよくなったようです。(「強い静的型付け」言語でなくなったどうかは知りません。)
OpenOffice Developer's Guideは英語版は2009年発行と書いてありますがJavaの例にはやっぱりキャストがでてきます。
Python - WikipediaによるとPythonは「強い動的型付け」なので、型変換はしなくてよいようです。
OOoPython/java_to_python - ...?にはJavaをPythonに変換した例がでてきます。
UNO Type Mappings - N->N->NにUNOの型とPytyonの型との対応表があります。
参考にしたサイト
Apache OpenOffice Developer's Guide - Apache OpenOffice Wiki
PDF版の表紙にOpenOffice.org 3.1 Developer's Guideと書いてあります。
Developer's Guide
OpenOffice Developer's Guideの日本語版。OpenOffice.org 2.0より前のもののようです。
A. Java-UNO - N->N->N
Javaマクロの実行の仕方が解説されています。
OOoPython/java_to_python - ...?
Developer's GuideによくでてくるJavaの例の読み方を解説されています。
9-5. 継承4 オブジェクトのキャスト - マンガで分かる Java入門講座 - マンガPG
Javaにおけるオブジェクトの型変換の解説。
Java - Wikipedia
Javaの解説。
Python - Wikipedia
Pythonの解説。
UNO Type Mappings - N->N->N
UNOの型とプログラミング言語の型との対応表があります。
Eclipse Plugin for OpenOffice.org extension development
LibreOfficeをOpenOfficeの代わりに指定することはできませんでした。
0 件のコメント:
コメントを投稿