stooopはTclでのオブジェクト指向プログラミングを可能にする拡張で、 Tclのみで実装されています。TclLibの中に含まれています。
名称はSimple Tcl Only Object Oriented Programmingのイニシャルをとったものです。
# stoop の読み込み
package require stooop
namespace import stooop::*
package requireでstooopを使うことを宣言します。 namespace importを行っておくと、 あとでstooopの機能が接頭辞をつけずに使えるようになります (例えばクラスの定義がstooop::classでなくclassのみでできるようになる)。
クラスは class クラス名 { クラス定義 } の書式で定義します。
コンストラクタはクラス名と同名のメンバプロシージャとして、 デストラクタはクラス名の頭に ~ をつけたメンバプロシージャとして定義します (C++ライクです)。
# コンストラクタとデストラクタ
class object {
proc object {this arg} {
# 初期化
}
proc ~object {this} {
# 事後処理
}
}
コンストラクタとデストラクタの最初の引数には常にそのオブジェクトの識別子が与えられます。 このパラメータの名前はthisでなければいけません。 その後に続けて追加のパラメータをとることが出来ます。
クラスを定義したらnewでそのクラスのオブジェクトを作ることが出来ます。
# オブジェクトの作成
set instance [new object arg]
newは定義されたコンストラクタを呼び出します。
オブジェクトを削除するにはdeleteを使います。 deleteの引数にはnewが返した識別子を与えます。 引数には複数の識別子を与えても構いません。
# オブジェクトの削除
delete $instance
deleteはそのクラスのデストラクタを呼び出します。
メンバデータには次のような書式でアクセスします。
# メンバデータへのアクセス
class object {
proc object {this arg} {
# メンバ member の値を定義
set ($this,member) $arg
# それを読む
puts "このクラスのメンバ member は $($this,member)"
}
}