• 検索結果がありません。

Super Strong-Typedプログラミングによるデータ変換の自動化の試み

N/A
N/A
Protected

Academic year: 2021

シェア "Super Strong-Typedプログラミングによるデータ変換の自動化の試み"

Copied!
2
0
0

読み込み中.... (全文を見る)

全文

(1)情報処理学会第67回全国大会. 3F-2. Super Strong-Typed プログラミングによるデータ変換の自動化の試み 菊池彰† 日本アイ・ビー・エム株式会社ソフトウェア開発研究所 キーワード:Java, Strongly-Typing, Introspection, Reflection,プログラミング方法論 要旨:データの構成変換は、実際のプログラムでは頻繁に行われる作業であるが、単調な作業であるが故に誤りも生 じやすい。Java プログラムにおいて、強く型付けしたデータと Reflection の機能を用いることでこの作業を自動化す ることができた。. 1. はじめに. 2.1. 手作業の問題点. ある種のサービスを利用する 際、そのサービスが想定 しているモデルと利用する側のドメイン・モデルとが一致 していない場合、データの変換が必要になる。. Java は、コンパイル時に厳密な型分析をして、プログ ラミングエラーをキャッチできる[1]ため、Figure 2 の例の ように Object X の String 型変数に Date 型である data2 を 代入してしまうような誤りは、コンパイル時に発見するこ とができる。しかし誤った代入であっても型が同じであれ. User Input. Object A data1 Object X data1 data2 data3. Data Transform. Object B data2. ば、それをコンパイル時に発見することはできない。. Service. class ObjectX { String Data1; Date Data2; String Data3; }. System Property Object C data3. Transform Table. Application Model. Service Model. objectX.setData1(objectA.getData1()); objectX.setData2(objectA.getData1()); objectX.setData3(objectA.getData1());. Figure 1 Data transformation for a service invocation. その例として Figure 1 において、Service 呼び出しのた めの Input である Object X は、ユーザ入力、システム・プ ロパティーおよび Database のデータより構成されている。 この類の変換は手作業で作られるか、別に定義された 変換表を元に駆動するプログラムで処理されるが、強く型 付けした変数と Java の機構を利用することにより、変換 表を用いず自動化することが可能である。本稿では、上記 変換作業の問題点と自動化手法について明らかにする。. Table 1 Example of Data Transformation 変換先 Object X. 元. オブジェクト. Field. 型. Field. 型が同一のため 発見できない. Figure 2 Type checking of illegal assignment. 代入の数が少なければ十分注意してコーディングする ことで誤りを回避することもできるが、数が多くなると手 作業で誤りなく作業することが難しくなってしまう。. 2.2. 変換表の問題点 変換表を用いる場合、データのマッピングがコードと は別のところに存在するため、変換表の妥当性をチェック する方法を別途必要とするという点が問題となる。またこ の方法でも前節で問題とした、型が同じ誤った代入の検証 を行うことができない。. 2. データ変換の処理方法と問題点. 換. 型が異なるので チェック可能. ObjectX objectX = new ObjectX();. DB. 変. class ObjectA { String Data1; … }. 3. Super Strong-Typed プログラミング. 型. Object A. data1. String. data1. string. Object B. data2. Date. data2. Date. Object C. data3. String. data3. String. Super Strong-Typed プログラミングとは、String や Date などの汎用型を用いるのではなく、それぞれのデータ専用 の型を用いてプログラムを記述する方法を指す我々の造. Table 1 のデータ変換を考えてみる。この表では、例え ば変換先 ObjectX の data1 は、変換元 ObjectA の data1 か ら供給されるということを表現している。変換の処理方法 としては、データの代入プログラムを手作業で記述する、 もしくは変換表を用意して表に従い代入を行うという方 法が考えられるが、どちらにも問題点が存在する。 An automatic method assigning data objects with super strong-typed programming model †Akira Kikuchi, Software Development Laboratory Yamato (YSL). 語である。Figure 3 に例を示す。 class StrongTypedObject { String accountingNumber; Date bookingDate; String cardNumber; }. class SuperStrongTypedObject { AccountingNumber accountingNumber; BookingDate bookingDate; CardNumber cardNumber; }. 通常のプログラミング 通常のプログラミング. Super Super Strong-Typedプログラミング Strong-Typedプログラミング. Figure 3 Super Strong-Typed Programming. Super Strong-Typed プログラミングでは、データの意味 ごとにそれぞれ別の型を用意することになる。例えば同じ ユーザ ID を表す 14 桁の文字列であっても、一方は利用者 ID、他方は管理者 ID のように意味的に異なるものである なら、別の型とする。. 1−221.

(2) これにより、データが持つ意味同一性の問題をプログ. と Super Strong-Typed プログラミングによる方式で測定. ラミング言語の型検査という問題に置き換え、Java プログ ラムにおいて二つのデータが構文的に代入可能であるな ら、両者の持つ意味が同じであることを保障する。. した。m は[1, 120]の区間で変化させている。 測 定 環 境 は Pentium-M 1.3GHz PC 上 で 動 作 す る WindowsXP である。JavaVM の Version は 1.4.2 で IBM 製の ものを使用した。結果を Figure 5 に示す。. 3.1. Super Strong-Typed クラスの作り方. パフォーマンス (2 x m). Super Strong-Typed 型の実装方法としては格納される データ型を拡張するのが単純で良いと思われる。今回は Decorator パターン[2]を使うこととした。例えば Figure 3. 30000. (10000回)実行時間 [ms]. 25000. の CardNumber クラスは、String を has-a 関係で持つ。 また、データの意味毎に大量のクラスが必要となるた め、今回は IBM の alphaWorks[3]にて公開されている Design Pattern Toolkit (DPTK) [4]という Model Driven Architecture (MDA)を実現したツールを利用し、個々のクラスは宣言的 な定義より自動生成した。. 直接代入 Super Strong map作成 代入. 15000 10000 5000 0 0. 20. 40. 60 80 パラメータ数 (m). 100. 120. 140. Figure 5 Performance Comparison. 4. 自動データ変換 Super Strong-typed プログラミングにより、Figure 1 に 示したデータ変換の問題は次の二つの型検索問題に分割 できる。 1. 2.. 20000. ある型のデータを供給するオブジェクトはどれか 変換先のデータはどの型を必要としているのか. 実行時間は常に 100 倍程度の差がある。 また Super Strong-Typed プログラミングでは Supplier Map の作成とデ ータの代入の時間おおよそ 1:1 となっており、この比率は、 型 探 索 の た め に 使 用 す る java.lang.Class の getDeclaredMethods の使用比率と同じであった。. 6. 結論 データの型データの持つ形式ではなくその意味を持た. User Input. Object A data1. Data Supplier Analysis. Object B data2. Object Builder. Object X data1 data2 data3. せる Super Strong-Typed プログラミングを行うことによ り、データの持つ意味まで含めた処理が機械的に処理可能 となる。また、Reflection API によりパフォーマンスは悪 いが、手法的にソースコード量がデータ量に依存しない点 と誤りが混入しないという点が利点として挙げられる。 当手法の本質はプログラムのセマンティクスをシンタ ックスの問題に変換できるという点にある。. Service. System Property Object C data3. Mapping Dictionary. DB. Application Model. Service Model. Figure 4 Automatic Data Transformation. Figure 1 の構成ではこれらは変換表として外部から与 えられているが、Java 言語の Reflection[5]を使うことで Java プログラムとして記述することが可能となる。Figure 4 に、その構成を示す。 まず Data Supplier Analysis では、変換元の各オブジェク トのクラスが持つ get で始まるメソッドを検索し、その戻 り型、メソッド名、変換元オブジェクトを辞書に登録する。 次に、Object Builder が変換先のオブジェクトのクラス が持つ set で始まるメソッドを検索し、そのパラメータ型 を元に前述の辞書を用い、その型のデータを供給するオブ ジェクトとメソッドに関する情報を検索する。あとはそれ ぞれ getter メソッドと setter メソッドを Reflection により 呼び出すことでデータを移行する。. 5. 性能比較 比較方法は、m 個のデータを持つオブジェクト 2 個を結 合して 2m 個データのオブジェクトを作成するデータ変換 を 10000 回実行するのに必要な時間を直接代入する方式. 強い型を持つデータを作るためには多数のクラスを作 る必要があるが、DPTK のようなツールを活用することで プログラミング作業を大いに軽減できることがわかった。. 謝辞 Super Strong-typed プログラミングの名称と自動変換の アイディアに関してソフトウェア開発研究所のメンバー に貴重な助言をいただきました。各位に感謝いたします。. 参考文献 1) Guy L. Steele Jr.: Java 言語仕様設計上の考慮点,情報 処理, vol.39, No.4 2) Erich Gamma 他: オブジェクト指向における再利用 のためのデザインパターン(改訂版), ソフトバンクパブ リッシング, Japan (1999), pp187-196. 3) IBM alphaWorks, (http://alphaworks.ibm.com/ ) 4) Design Pattern Toolkit, (http://alphaworks.ibm.com/tech/dptk) 5) Reflection, Java 2 SDK, Standard Edition Documentation, (http://java.sun.com/j2se/1.4.2/docs/guide/reflection/index.html). 1−222.

(3)

Table 1 のデータ変換を考えてみる。この表では、例え

参照

関連したドキュメント

Fourier / Laplace 変換 まとめ

おわりに 例によるプログラミングの一種として、変数名を使わ ないプログラミング言語 Concrete

• 計算の最初にラプラス変換を、計算の最後に逆ラプラス変換を行う必要があるが、これは個 別に計算して求める必要がある。特に、複雑な関数の (

● BE-Bridge ● BE-Bridge とは・・・

我々はこの問題に対し,変換元は VMware ESXi( 以 降: ESXi と略す ) ,変換先は Amazon Web Servises( 以 降: AWS と略す

(メッシュ・データ 数の数分の日〉ら 1 0の1 位でも大きな矛盾はとZい

動画を用いたプログラミング自学自習

ランタイムライブラリはスレッド管理機構とライブラリ関数からなり,開発者が実装したプ