72
2002/1/28 筑筑筑筑 筑筑筑筑筑筑筑筑 1 筑筑筑筑筑筑筑筑筑筑筑 筑筑筑筑筑筑筑筑筑筑筑筑 筑筑筑筑 筑筑筑 筑筑筑筑筑 筑筑 筑筑筑筑筑筑 筑筑筑筑

プログラム変換のための クラスオブジェクトモデル

  • Upload
    minnie

  • View
    42

  • Download
    0

Embed Size (px)

DESCRIPTION

プログラム変換のための クラスオブジェクトモデル. 筑波大学 大学院 工学研究科 電子・情報工学専攻 立堀道昭. 研究背景. オブジェクト指向モデルの 限界. オブジェクト指向の コード再利用・分離. Java のようなオブジェクト指向プログラムはクラスによって、モジュール分けされる モジュール - 再利用可能な単位 クラスによるモジュール分けは 万能ではない Crosscutting Concerns. Motivating Example 1 分散配置プログラム. 分散オブジェクトを配置するコードは プログラム全体に四散する. Host B. Host A. - PowerPoint PPT Presentation

Citation preview

Page 1: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 1

プログラム変換のためのクラスオブジェクトモデル

筑波大学 大学院 工学研究科電子・情報工学専攻

立堀道昭

Page 2: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 2

研究背景

オブジェクト指向モデルの限界

Page 3: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 3

オブジェクト指向のコード再利用・分離

Java のようなオブジェクト指向プログラムはクラスによって、モジュール分けされるモジュール - 再利用可能な単位

クラスによるモジュール分けは万能ではないCrosscutting Concerns

Page 4: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 4

Motivating Example 1分散配置プログラム

分散オブジェクトを配置するコードはプログラム全体に四散する

class C {.. new P() ..}

class A {.. remote.gen(“P”) ..}

class P {.. new C() ..}

class D {.. new P() ..}

class B {.. remote.gen(“P”) ..}

Host AHost B

Page 5: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 5

配置設計の変更に伴うプログラムの修正

配置設計の変更に伴い、多くのクラスのコードを少しづつ修正しなければならない

class C {.. remote.gen(“P”) ..}

class A {.. new P() ..}

class P {.. remote.gen(“C”) ..}

class D {.. remote.gen(“P”) ..}

class B {.. new P() ..}

Changed allocation of P’s instances

Page 6: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 6

Motivating Example 2遠隔参照

遠隔オブジェクトをシームレスに提供するプロキシクラスには大量の通信コード記述class A_Proxy {

C getIt() { .. 通信コード .. } void setIt() { .. 通信コード .. }}

class A { C getIt() {} void setIt() {}}

class B {}

class C {}

.

.

B_Proxy

C_Proxy

Page 7: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 7

類似のコードの頻出

似たようなコードが頻出するが、再利用できない

B_Proxy

C_Proxy

A_Proxy D_Proxy

E_Proxy

{ パラメータを正規化  直列化して通信  通信先から送られてきた    結果をリターン}

ライブラリ?

Page 8: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 8

Crosscutting Concerns

配置設計の関心事項( concern )がプログラムのモジュール構造を横切って( crosscut )いることが問題微に入り細を穿つ記述、四散するロジック、

類似の記述の繰り返し 大きな記述量 - 分散に関する簡単な事項を簡潔

に記述できない 保守性の悪さ - 絡み合ったコードの修正は困難

プログラミングを重労働にしている要因のひとつ

Page 9: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 9

設計上の問題ではない

Design patterns[GoF94] など、よい設計を実現するための様々なプログラミング技法はあるしかし、「あちらをたてればこちらがたたず」という場合がしばしば

Page 10: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 10

Diff ファイルのパッチとして分離して書けばよい?パッチファイルに再利用性なく、記述量膨

差分パッチによる実現

単純に分離するだけではだめ単純に分離するだけではだめパッチファイル

パッチあて

Page 11: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 11

Advanced Separation of Concerns (ASoC)

理想形記述の分離関心点の抽象化

現在盛んに研究されている [OOPSLA, ECOOP, ICSE, Reflection]オブジェクト指向モデルだけでは不十分AOP[Kiczales97], MDSoC[Tarr99], …

Page 12: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 12

プログラム変換による ASoC- 本研究のアプローチ

パッチをプログラム変換を行うプログラムとして記述sed, awk, perl, java?

しかし、プログラム変換を行うプログラムの記述は容易ではない

しかし、プログラム変換を行うプログラムの記述は容易ではない

プログラム変換プログラム

プログラム変換

Page 13: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 13

オブジェクト指向プログラムの変換

オブジェクト指向プログラム クラスをはじめとする宣言的な要素によりプログ

ラムが構成される

構文木やバイト列といった表現 オブジェクト指向プログラムのロジックから

かい離している

クラスを直接表現する抽象データ構造が望まれる

Page 14: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 14

本研究の Overview

プログラム変換によるコード再利用・分割の実現 オブジェクト指向の枠内ではできなかった部分に

挑む

クラスオブジェクトモデルによってプログラム変換器の作成を容易に オブジェクト指向プログラムを

オブジェクト指向プログラムで変換するシステム設計のための抽象データ構造モデル

Page 15: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 15

本発表の以降の構成

クラスオブジェクトモデルを適用した実際のシステムの設計・実装・応用 オブジェクト指向プログラミング一般向けシステ

ム OpenJava - ソーステキストベースのプログラム変換

[LNCS1826][ 情報処理学会論文誌 41 巻 8 号 ] Javassist - バイトコードベースのプログラム変換

[ 情報処理学会論文誌 42 巻 11 号 ]

分散プログラミング専用システム Addistant – 分散配置の SoC

[ECOOP2001]

Page 16: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 17

OpenJava

Java 言語のためのオブジェクト指向マクロ

Page 17: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 18

拡張可能言語の必要性

複雑なプログラミング 分散処理

煩雑なネットワーク処理 デザインパターン

例 Adapter, Visitor, …

言語による直接のサポートがない distributed,adapts などのキーワードが使えればプログラムを簡潔に記述できる

Page 18: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 19

従来型のプログラム変換による言語拡張機構

C/C++ マクロ非常に単純な文法拡張のみ

EPP[Ichisugi98], JSE[Bachrach01]広域にわたる変換の

記述が難しい構文木を直接操作

Program

Method call

name Arguments list

….変換

変換変換

Page 19: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 20

OpenJava

Java のためのマクロ機構Java で言語拡張ができるようになった

distributed マクロadapts マクロ

特徴自己反映( reflection )モデルの採用クラスオブジェクト API

構文木を直接扱わずに変換を記述できる

Page 20: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 21

OpenJava の処理系概要

ソーステキスト変換器拡張言語で書かれたソースコードを

通常の Java 言語のソースコードに変換visits

distributed adapts

TranslatorTranslator

IOIOOOIIOIOOOI.oj IOIO

OOIIOIOOOI.classjavacjavac.java

マクロマクロ

Page 21: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 22

Reflection モデルの採用

プログラムでプログラムを扱うモデルプログラムでプログラムの情報を得ること例:このクラスは何個メソッドをもっている?Java の Reflection API

プログラムでその言語の仕様を変えること言語拡張にあたるJava にはない

Page 22: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 23

オブジェクト指向の Reflection

メタオブジェクト 通常扱えないデータ (プログラム、コンパイラ等)

をオブジェクトとして扱えるようにする

メタオブジェクトの API 何をメタオブジェクトにするか どのようにメタオブジェクトにアクセスさせるか

API の設計は自明ではない。この出来が肝要

OpenJava ではクラスオブジェクトを設計した

Page 23: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 24

OpenJava のマクロ

マクロはメタクラスとして実装される

class VerboseClass extends OJClass { translateDeclaration() expandAllocation() expandMethodCall() expandType()

マクロのプログラム

デフォルトのメタクラスを拡張

拡張したい部分の変換をオーバーライド

マクロの適用

class MyObject instantiates VerboseClassOpenJava の予約語

メタクラスを選択

Page 24: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 25

OpenJava のクラスオブジェクト

クラスオブジェクトの操作によって間接的に構文木が変換される例: getSuperclass(), getField(name), addMethod(m)

オブジェクト機構の操作であり直感的 変換の操作を簡潔に記述できる

オブジェクトの型(クラス)ごとに、異なる変換を適用できる例: expandAllocation() のオーバーライド

衝突なしに複数の言語拡張を導入できる

Page 25: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 26

クラスオブジェクトの操作

オブジェクト指向の論理構造の操作

OpenJavaSystem

OpenJavaSystem

クラスオブジェクトgetName()getMethods()getSuffix()setName()addMethod()removeMethod()

プログラム

システムはクラスオブジェクトの操作に基づいて構文木を自動的に変換

Page 26: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 27

呼出し側の変換例

ソースプログラム

変換後のソースプログラム

拡張のためのプログラムpublic class ReplacedClass extends OJClass { Allocation expandAllocation(Allocation expr) { String newname = expr.getType().getName() + “Proxy”; return new Allocation(newname, expr.getArguments()); } :

p = new Person()

p = new PersonProxy()

class Person instantiates ReplacedClass{ :

Page 27: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 28

クラス宣言側の変換例

ソースプログラム

変換後のソースプログラム

public class VectorStack instantiates AdapterClass adapts Vector in v to Stack{ Object pop() { return v.remove(); } void push( Object o ) { v.add( o ); }

public class VectorStack implements Stack { private Vector v; VectorStack(Vector o) { this.v = o; } boolean isEmpty() { return v.isEmpty(); } Enumeration elements() { return v.elements(); } Object pop() { return v.remove(); } void push( Object o ) { v.add( o ); } }

Page 28: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 29

クラス宣言側の変換例( cont. )

拡張のためのプログラムpublic class AdapterClass extends OJClass { void translateDeclaration() { OJClass adaptee = .. getSuffix(“adapts”) ..; Variable v = .. getSuffix(“adapts”) ..; OJClass target = .. getSuffix(“adapts”) ..; OJMethod[] tmethods = target.getMethods(); for (int i = 0; i < tmethods.length; ++i) { if (adaptee.getMethod(tmethods[i]) != null){ OJMethod newmtd = new OJMethod(tmethods[i]); newmtd.setBody( new ReturnStatement( new MethodCall(v, newmtd.getName(), newmtd.getParameters()) ) ); } :

Stack のメソッド

を調べる

Vector

Stack

新しいメソッド

を作る

Page 29: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 30

OpenJava まとめ

オブジェクト指向言語用マクロ機構クラスオブジェクトによる変換ソースコード変換がクラスの操作として直感的に記述可能になった

構文木を直接操作せず、オブジェクト機構を操作

Page 30: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 31

Javassist

バイトコード変換による構造リフレクションの実現

Page 31: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 32

Java のリフレクション

内視( introspection )標準 java.lang.reflect パッケージ

プログラムの意味の変更( intercession )提供されていないセキュリティ上、実行性能上の問題を引き起こす

Page 32: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 33

動作リフレクション(Behavioral Reflection)

MetaXa, Kava, (Sun JDK1.3,) …

メタオブジェクト機構

ObjectObjectmethod call

trap reflect

Metaobject

Meta programmodify

Page 33: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 34

これは最もよい抽象化だろうか?

動作リフレクションは全ての種類のアプリケーションにとって直感的なわけでない

例遠隔メソッド呼び出し( RMI )のための言語拡張

遠隔 Account オブジェクトの withdraw() メソッドを呼び出す

Page 34: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 35

動作リフレクションによる RMI

メタプログラムはプロキシを作る

dummy callee

caller

metaobjectmetaobject

trap

network

invoke

instance ofAccount class

withdraw()withdraw()

proxy object

Page 35: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 36

この dummy オブジェクトは

自動的に作られなければならないコンストラクタのパラメータには何を渡せばよいのか

もし Account のコンストラクタが副作用を起こしたら

Dummy オブジェクトの生成においてはコンストラクタ呼び出しを省く必要がある

これらの問題を回避するためには、プロキシクラスを作り出す必要があるこれらの問題を回避するためには、プロキシクラスを作り出す必要がある

Page 36: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 37

問題点のまとめ

動作リフレクションの「トラップ」モデルは多くの言語拡張に便利であるが、全てにというわけではない

ある種のアプリケーションには、この抽象化はマッチしない数々のアドホックなトリックが必要になる

Page 37: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 38

Javassist

我々の提案する Java 用の構造リフレクション( structural reflection )システム内視 (introspection)Java reflection API とほぼ互換

プログラムの意味の変更( intercession )新たなクラスを作る既存のクラス定義を変更する

プログラムの構造的な側面を扱うプログラムの構造的な側面を扱う

Page 38: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 39

構造リフレクション

今日あまり使われない

が、 Smalltalk, CLOS, ObjVlisp, Classtalk, … によって提供されていたもの

Page 39: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 40

構造リフレクションによる RMI

プロキシクラスはメタプログラムにより自動的に作られるAccount クラスに空のコンストラクタを追加

RMI を行う withdraw() メソッドを追加 class AccountProxy extends

Account { int withdraw() { .. Communication with RMI server .. }}

class Account { Account() {} …}

Page 40: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 41

Javassist API

クラス・ダイアグラムClass, Field, Constructor, Method オブ

ジェクトは改変可能

Class

Field Method Constructor

Page 41: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 42

Java のバイナリ互換性

Javassist はあらゆる変更を許すわけではない例:フィールドの削除は許されないある種の変更はプログラムの正当性を壊す恐れが強い

Javassist はバイナリ互換性を保つような変更のための API のみを提供する

Page 42: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 43

ロード時のリフレクション

標準の JVM を利用するためにリフレクションはロード時にのみ許され

Java VMJavassistclass loader

User meta program

class file(bytecode)

Local Disk

Network

modify a class file

Page 43: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 44

バイトコード変換器

JOIE, Java Class APIバイトコード編集のための Java のライ

ブラリ

Javassistソーステキストレベルの抽象度ユーザはバイトコードの知識を必要としな

い使い易さ v.s. 記述力Javassist JOIE, Java Class API

Page 44: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 45

メソッド本体部 (method body) の編集の仕方

バイトコードの知識なしに

Javassist の提供する編集方法他のメソッドから本体をコピー

型名置き換えパラメータを Object 型の配列に変換

典型的なメソッド本体から選択Delegator, default constructor, …

Page 45: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 46

実験:プログラム変更の準備に要する時間

クラスを reify するのに関わる時間

0

5

10

15

20

25

30

35

40

0 5 10 15 20 25 30 35 40Size of .class file (Kbyte)

Pro

cess

ing

time

(sec

)

OpenJava

Javac

Jikes

Javassist

Page 46: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 47

まとめ

ReflectionBehavioral reflection

MetaXa, KavaStructural reflection

OpenJava, Javassist

Load-timeCompile-time

Page 47: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 48

Addistant

既存 Java プログラムのバイトコード変換による

機能分散

Page 48: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 49

ソフトウェアの分散実行

例えば、GUI とアプリケーション・ロジックの分離

管理コストの削減安価なクライアント環境を活用できるよう

「 PC anywhere 」「ゼロ・アドミニストレーション」「シン・クライアント」

Page 49: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 50

既存ソフトウェアの分散化

従来の環境(全自動の遠隔 GUI )X Window System 、 VNC 、 Rawt[IBM Haifa

98]

従来の分散化支援ツールJavaRMI 、 HORB 、 ObjectSpace …、Emerald[Black87] ”、 remotenew”[Nagaratnam96]

、 JavaParty[Philippen99] …、

Page 50: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 51

X Window

Xlib ライブラリレベルで分散化低レベルな命令が大量にネットワークを飛び交う

線を書け

マウスが動いた

マウスボタン押された

マウスボタン離された

ユーザプログラム

Xlib

Page 51: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 52

ORB を用いた手動(半自動)変換ユーザプログラムを変更応答性能のよい遠隔表示が可能

ユーザプログラム

内部ウィンドウ表示

ウィンドウ内でクリックあり

ORBライブラリ

ユーザプログラム

Page 52: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 53

既存の分散化手法

X Windowライブラリ・レベルの分散化

完全自動だが遅い

ORBプログラム全体を手で変更して分散化

速いが、開発に余分な工数が必要

ユーザプログラム

X Protocol

ユーザプログラム

GUI モジュール

Page 53: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 54

提案するシステムAddistant

より自動化された ORB プログラム全体を自動変更して分散化 開発者はプログラムを直接いじる必要はない

現実的なシステムをめざす 実用的な Swing アプリケーションにも対応既存の Java 仮想機械 (JVM) の利用 バイトコード変換 開発者による分散化の指示の簡素化

Page 54: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 55

Addistant の基本設計

クラスローダによるバイトコード変換バイトコード変換には Javassist[Chiba00]

を利用

クラス単位のインスタンスの配置方針開発者がポリシーファイルに宣言的記述例: GUI のクラスはあちら、その他のユーザクラスはこちら

Page 55: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 56

現実的なシステムに向けてプロキシ マスタ方式の限界・ 遠隔オブジェクト(マスタ)に対応して、手元で

は代理のオブジェクト(プロキシ)を用いる Java RMI など、多くの ORB で使われている方式

従来の ORB の実装法をそのまま既存のプログラムに適用は無理…

マスタプロキシメソッド呼び出し

ネットワーク通信

Page 56: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 57

システム・クラスの存在

プロキシ・マスタ方式クラス定義またはクラスを使う側の

コードの変更が必要システムクラスの場合バイトコード変換禁止

例:プロキシクラスを元のクラスのサブクラスとする実装法

元のクラスが final クラスのときは使えない、など

Page 57: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 58

Addistant の方式

クラス毎に異なる実装法で遠隔参照を実現 実装法により、変更が必要なコードの範囲が異なる

システムクラスの変更を避けるように実装法を選択

“ 長いものには巻かれろ”法

XML風のポリシーファイルで宣言的に指定 置き換え」、「名前変更」、「サブクラス」、 複製」「 「

Page 58: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 59

「置き換え」手法(例:ユーザクラス)

対象クラスをプロキシに置き換え元のクラスを変更できる場合ひとつの JVM 上には、プロキシかマスタ

のどちらか一方のみ

Widget w = new Widget();w.show();

Widgetshow()

分散化

Widgetshow()

.. Show ..

.. Send ..

置き換える

Page 59: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 60

「名前変更」手法(例: java.awt.Window )

コード中に現れた対象クラス名をプロキシクラスのものに変更元のクラスを変更できない場合使っている側のコードを変更する

Widget w = new Widget();w.show();

Widgetshow()

分散化

WidgetProxy w = new WidgetProxy();

WidgetProxyshow()

.. Show ..

.. Send ..

Page 60: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 61

「サブクラス」手法(例: java.util.Vector )対象クラスのサブクラスとしてプロキシクラスを定義1つの JVM 上にプロキシとマスタを混在させたい場合

Widget w = new Widget();w.show();

Widgetshow()

分散化

Widget w = new WidgetProxy();

WidgetProxyshow()

指示の場合によっては.. Send ..

.. Show ..

Page 61: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 62

「複製」手法(例: java.lang.String )

プロキシクラスは作らず、遠隔メソッド呼び出しの際、オブジェクトを移送して複製を渡すShallow copy

変則版 - 「書き戻し複製」手法配列オブジェクトに

用いる byte[] buf = …;istream.read(buf);

Page 62: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 63

応答性能の実験クリック – Window 表示

クリックしてから内部ウインドウが完全に表示されるまで スタートアップホス

ト Sparc 440MHz

GUI ホスト PentiumII 500MHz

ネットワーク 10Base-T Half 100Base-TX Full

Page 63: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 64

応答性能の実験クリック – Window 表示

クリックしてから内部ウインドウが完全に表示されるまで スタートアップホス

ト Sparc 440MHz

GUI ホスト PentiumII 500MHz

ネットワーク 10Base-T Half 100Base-TX Full

Page 64: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 65

分散 Swing アプリケーション

ポリシーファイル<policy> <import proxy="rename" from="display"> [email protected] [email protected] .. </import> <import proxy="rename" from="application"> [email protected].[InputStream|OutputStream|..] [email protected].* </import> <import proxy="subclass"> [email protected].[AbstractCollection|..] </import> <import proxy="writeBackCopy"> array@- </import> <import proxy="replace" from="application"> user@- </import> <import proxy="copy"> - </import></policy>

Page 65: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 66

応答性能の測定結果

プログラム全体の変換による速度改善応答時間 (秒 ) (10Base-T(100Base-TX))

通信量 ( キロバイト )

誤差 ±0.1秒 X Window Rawt Addistant

1回目 5.6(1.6) 3.2(2.6) 2.0(2.0)

2回目 5.6(1.4) 0.0(0.0) 0.0(0.0)

X Window Rawt Addistant

1回目 3493.57 116.20 81.88

2回目 3438.96 10.95 0.06

Page 66: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 67

まとめ

既存の Java プログラムを複数のホスト上に分散させるための支援ツールAddistant を提案透過な分散 JVM を既存の JVM を用いて

構築する際に鍵となる技術プログラム変換によるアプローチ

Page 67: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 68

本発表の総括

発表のまとめと今後の展望

Page 68: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 69

本研究の貢献

クラスオブジェクトモデルの提案 オブジェクト指向プログラムを変換するシステム

設計のための抽象データ構造モデル

本モデルに基づいて具体的なシステムの設計と実装を研究 オブジェクト指向プログラミング一般向けシステ

ム OpenJava, Javassist

分散プログラミング専用システム Addistant

Page 69: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 70

OpenJava/Javassist

クラスオブジェクトモデル構文木 / バイトコードの詳細を知らなくても、

プログラム変換を行えるように、クラスオブジェクトモデルを適用したデータ構造を提供

変換を Java 言語で記述構造リフレクション( Structural Reflection )を

提供するシステム動作リフレクション( Behavioral Reflection )

Page 70: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 71

リフレクション

compile

load

run

MetaXa,Kava

Javassist

OpenJavafast

adaptable

program-ming

languagedesign

Runtime structural reflection makesit difficult to do optimization withstatic type information.

Load-time isa good trade-off point.

OpenJIT

JIT-compile

Page 71: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 72

Addistant

Addistant分散配置の記述を「まとめて別に」行えるバイトコード変換による実現により既存の

Java 実行時処理系を活用できるシステムクラスの存在など、実際上の問題

に対処した

Javassist 応用のケーススタディ

Page 72: プログラム変換のための クラスオブジェクトモデル

2002/1/28 筑波大学 学位論文公開発表 73

今後の展望

DSL for ASoC 用のフレームワーク構築OpenJava 、 Javassist

プログラム変換による Advanced Separation of Concerns で Addistant のような Domain Specific Language を提供するための基盤技術

Addistant のようなシステムをより気軽に作れるような具体的なシステム

XML + Java