StooopExtension

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)"
    }
}

JapaneseTclWiki
powered by TickleWiki