Index of /~umejava/smalltalk/stClasses/roseSt/extend31
Name Last modified Size Description
Parent Directory -
readme.txt 11-Aug-1997 23:07 4.5K
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*+*+