Index of /~umejava/smalltalk/stClasses/roseSt/extend31

Icon  Name                    Last modified      Size  Description
[DIR] Parent Directory - [TXT] readme.txt 11-Aug-1997 23:07 4.5K [TXT] CHANGES.txt 15-Nov-1997 21:52 382
+*+*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 <Cargo> Baloon's cargo
	color <ColorValue> Baloon's color

などと書いてあった場合、cargoの型をCargo、colorの型をColorValueとします。
instance variables: InstanceVariables:などと書かれていてもできる限りパース
します。
 
	indexes		<Array of: Integer> 

とある場合は、型を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*+*+