From: keiju@... (Keiju ISHITSUKA) Date: 2001-12-17T16:46:12+09:00 Subject: [ruby-list:32945] class-in-state けいじゅ@日本ラショナルソフトウェアです. UMLにclass-in-state(とかclassifier-in-state)って概念があります. これは, インスタンスの状態に応じて振る舞い(と構造)が分ることを許し, それを静的に モデリングするためのものです. テキストベースでクラス図を書くのは難しいので(^^;;; Ruby流に表現すると: # 通常のクラス class Foo # Fooの振る舞い end # class-in-state class Foo[State] "Foo" foo.cis_state = "S" foo.foo #-> "S" foo.in_state(T) do foo.foo #-> "T" foo.in_state(S) do foo.foo #->"S" end end == これは, 状態マシンで定義されたクラスの振る舞い(つまり状態に応じて振る舞 いが変る)をそのままに自然に近い形で実装したいときに便利です. 動的に振る舞いを変えるライブラリは他にもありますが(Ruby behaviors), 状態 間の差分をモジュールで指定できるのがなかなか素晴らしいアイディアだと思っ ています. あ. あと, スレッドセーフになっています. つまり, foo = Foo.new Thread.start do foo.in_state(S)do foo.foo end end Thread.start do foo.in_state(T) do foo.foo end end なんかもちゃんと動作します. まだ未完成なんですが, RAAに登録しておきます. # つづく. __ ..............................石塚 圭樹@日本ラショナルソフトウェア... ----------------------------------->> e-mail: keiju@rational.com <<---