netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2003-04-16 古い日記からの変換データ ▲
_ 花見 ▲
造幣局の桜の通り抜けに行ってきた.天気もよく,色々な種類の桜が満開で,満足.ちょっと混雑の度合いがひどいような気はするが.
帰りにロンドンティールームでスコーンを食べて休憩してたら,研究室の事務から呼び出されてすぐに帰還することに.ちょっとショックだった.
_ AOSD2003 ▲
Karl Lieberherr, David H. Lorenz, Pengcheng Wu:``A Case for Statically Executable Advice:Checking the Law of Demeter with AspectJ''
Law of Demeterをチェックするために,コンパイル時に実行可能なアドバイスを書けるようにしてみようとかいう感じの話.当然ながらJoinPoint.StaticPart だけに依存して実行できるものだけに限られるが.
AspectJのdeclare warning とかの上位バージョンと言えないこともない.
Law of Demeter とは:
1. Class Formあるクラス C のメソッドは,以下のメソッドにしか依存してはならない.
・C のほかのメソッド
・C のメソッドの戻り値のクラスのメソッド
・C のメソッドの引数のクラスのメソッド
・C のインスタンス変数のクラスのメソッド継承クラスは,Cの一部だからどう呼んでもいいのかな?忘れてしまった.
2. Object Formあるオブジェクト o は,以下のオブジェクトにしかメッセージを送ってはならない.
・o 自身
・o に引数として渡された変数
・o のインスタンス変数
・o の中で構築されたローカルオブジェクト
・o 自身のメソッドの戻り値のオブジェクト
これは,守る側も検査する側も大変なので,アスペクトとして検査を書くのだが,できればコンパイル時に検査までやってしまいたいよね,という話.
この論文では特に述べられていないようだが,アスペクトも Law of Demeter に従うべきなんだろうか.オブジェクト指向とはそもそも考え方が違う,という話もあるが…….
_ AOSD2003 ▲
Sean McDirmid, Wilson C. Hsieh:``Aspect-Oriented Programming with Jiazzi''
Jiazziという言語の紹介に近い論文.
signature としてクラス群のシグネチャだけを定義する.atom というのが接続単位で,atom は import, export で入出力ポートを宣言する.import, export のインタフェース指定に signature を使う.で,link unit1, unit2; という形式で atom 間を接続できる.
signature は, sigunature new_sig = old_sig + { .. } という形式で拡張できる.
実装ファイルは,atom名/sigunature名/クラス名 のような形式になるっぽい.
型パラメータもサポートしている.name [DEVICE];class [DEVICE] extends .. { void set[DEVICE]([DEVICE] dvc);}というように記述しておいて,実装サイドではvoid setDEVICE(DEVICE dvc) を実装する.で,後からsignature hoge = foo + { [DEVICE] = Spell;}というようにしてパラメータを与える.
基本的には Hyper/J や mix-in のアイディアに近くて,利用関係をプログラマが明示的に書けるところがやはりポイント.クラス間の利用関係,継承関係を接続できるところが面白いかも.
_ 背景については OOPSLA2001の論文を読め,ということらしい. ▲
S. McDirmid, M. Flatt, and W.C. Hsieh:``Jiazzi: New-age components for old-fashioned Java'',In Proc. of OOPSLA, Oct. 2001
_ AOSD2003 ▲
タイトルに興味を引かれてしまった論文.Stefan Hanenberg, Rainer Unland:``Parametric Introductions''
Introduction中での自己参照thisはどう扱うべきか?もし結合対象のクラスを指すとしたら(わりと妥当な判断だが)abstract introduction(結合対象クラスが,まだそのアスペクトでは未確定のintroduction)では型チェックができない.weave-timeよりも前にthisの型が決定できればうれしい,というのが動機.
Introductionがうまくいかない例として,Singleton, Visitor, Decoratorが掲載されている.Singletonは,オブジェクトを返すときのシグネチャが具象クラスに設定できないので型キャストが必須になる.他も,結合対象クラスの存在をアスペクトが知らないと対処できない.
で,この筆者らの提案は,一言で言えば?class と書いたところがweave対象クラスの名前になる,というようにパラメタライズして,?class を戻り値や引数の型として使う.そして,pointcut target(): equals(?class, A)||equals(?class, B);というようにしてパラメータと実体名をバインドする.
Introductionに対してどういう検査が有効だとか,そのときにIntroductionのタイプに応じてどう影響があるか,とかは将来の課題.
_ AOSD2003 ▲
さらに論文読みは続く.Erik Ernst, David H. Lorenz:``Aspects and Polymorphism in AspectJ''
オブジェクトの型に合わせて,適切なアドバイスのうちひとつを実行したい,といった要求があるが,そのときに今のAspectJでは ad hoc な方法しかないので何とかしたい,という話.で,アドバイスに名前を付けてグループ化しておき,そこから適切なものを選ぶということを提案している.また,オブジェクトの従来の多態性のかわりに,各アスペクトがintroductionを使ってクラスに必要な実装を与えよう,とか言っている.
2006-04-16 ▲
_ [お知らせ][hyCalendar] hyCalendar 1.3.6 リリース ▲
プリンタで日付の枠線の太さ,色を指定できるようにしたバージョンをリリースしました.
このところ,将来の改造に向けて色々手を入れる実験をしてるので,少し小刻みのリリースになっています.