+*+*Rose/Smalltalk Reverse Private Extention version 3.1*+*+ Copyright(C) 1997 OGIS-RI, Masashi Umezawa 1.概要: Rose/Smalltalk Reverse 3.0 の型推定機能を強力化するExtensionキット 2.対応環境: Windows-NT 3.51,4.0 Windows95 3.必要ソフトウェア: VisualWorks2.5.* または VisualWave1.0、2.0 Rose/Smalltalk 3.0J 4.構成: README.txt -> このファイル CHANGES.txt -> 変更、マイナーアップデート履歴 RSTPE31.st -> RoseSmalltalk Reverse PrivateExtension ソース install.st -> Rose/Smalltak Reverse Private Extension インストールスクリプト system.rm -> システムクラスに加えたメソッドを削除するスクリプト(通常使用する必要はありません) 4en.st -> 英語版VisualWorks用パッチ(インストールスクリプトが使用) 4vwv.st -> VisualWave対応用パッチ(インストールスクリプトが使用) Message -> メッセージカタログファイル RoseStJa.lbl ->日本語メッセージ RoseSt.ibl ->英語メッセージ RoseStJa.idx ->コンパイル日本語メッセージインデックス RoseSt.idx ->コンパイル英語メッセージインデックス 5.インストール方法: install.stをファイルイン 6.説明: Rose/Smalltalk Reverse 3.0では、リバース時の変数の型(クラス)の推定を変数の名前 によって行っていました。Private Extension 3.1では、従来の方法に加えて、2つの型 推定の方法が追加されており、様々な方法を組み合わせて使うことができます。 また、力のあるSmalltalkerであれば、自らが型推定を行うクラスライブラリ群(TypeFinder) をカスタマイズして拡張していくこともできます。 追加された型推定機能は以下の通り a): クラスコメントの読み取りによる型推定 Smalltalkで慣例的に行われている、クラスコメントでの変数に関する情報の記述を 読み取り、型を推定します。 例) Baloonクラスのコメントに Instance Variables: cargo Baloon's cargo color Baloon's color などと書いてあった場合、cargoの型をCargo、colorの型をColorValueとします。 instance variables: InstanceVariables:などと書かれていてもできる限りパース します。 indexes とある場合は、型をArrayof:Integer、Array、Integerとするか設定できます。 区切り文字列(この場合'of:')の設定もできるのである程度柔軟な推定が可能です。 b): 動的インスタンス生成による型推定 インスタンスを動的に生成し、初期化を行わせることで、変数にバインドされたイン スタンスの値からクラス情報を読み取ります。 例) Baloonクラスのクラス定義が以下のようであり、 Model subclass: #Baloon instanceVariableNames: 'color ropes cargo name' classVariableNames: '' poolDictionaries: '' category: 'Rose-PrivateExtension-ReadMe' インスタンスメソッドinitializeが以下のような場合、 initialize color := ColorValue blue. ropes := Array new: 5. name := ''. 動的推定ではcolorの型をColorValue、ropesの型をArray、nameの型をByteString とします。cargoについてはinitializeでバインドされないのでUndefinedObjectと なります。 initializeが定義されていない場合は、defaultメッセージにより、クラスの デフォルトのインスタンスを取得し、その時点で変数にバインドされているインスタンスの 情報から型を推定します。 デフォルトではインスタンス生成にnew、デフォルトインスタンス取得にdefault、 初期化にinitializeを使いますが、設定ダイアログで変更もできます。 initializeメソッドの実装によるExplicit Initializatiionの他にも、Smalltalkで 一般的なLazy Initializationもサポートしています。 Baloonクラスにおいて、変数と同じ名前で以下のようなアクセッサメソッドが定義さ れていた場合、 cargo ^cargo isNil ifTrue: [cargo := Cargo new] ifFalse: [cargo] initializeでcargoの初期化がされていなかったとしても、動的にcargoメッセージを 送り、cargoの型を推定します。 また、変数にバインドされているオブジェクトがValueModelのインスタンスである場合、 そのValueModelにvalueを送った結果を型とするか、ValueModelを型とするか、 ValueModelにprintStringを送った結果を型とするかの設定もできます。 例) name := 'Smalltalk' asValue. とある場合、 nameの型は"ByteString"、"ValueHolder"、"ValueHolder (値: 'Smalltalk')"のいずれかに なります。 型推定を行うクラスはTypeFinderと呼ばれ、TypeFinder間の優先順位と有効/無効の 設定をダイアログで行うことができます。 デフォルトでは、 1 static on -> 従来の変数名による型推定 2 conventional on -> 慣例的なクラスコメントからの型推定 3 dynamic off -> 動的インスタンス生成による型推定 となっています。 複数の方法で変数の型が推定された場合には優先順位の高いTypeFinderの推定結果が 採用されます。 7.備考: Rose/Smalltalk Reverse Private Extension 3.1は、正式な製品ではなく、Rose/Smalltalk Reverse 3.0をお使いのお客様のためのプレビュー版です。 バグレポートは歓迎いたしますが、サポートは一切行えませんのでご了承ください。 +*+*Rose/Smalltalk Reverse Private Extention version 3.1*+*+