5

私はインターンシップを行っていますが、インターンシップでは TCL - OO を学び、実践する必要があるため、TCL - OO に関するチュートリアル、例、本を探していますが、何も見つかりません。 TCL - OO に関する良いアドバイス。

私はウェブ上でいくつかの調査を行い、これらの資料に出くわしました

リンク: http://www.tcl.tk/cgi-bin/tct/tip/257

書籍: TCL/TK a developer's guide 3rd edition by clif Flynt - TCL に関する 2 つの章のみ - OO

したがって、これら2つの参考文献に加えて、誰かが追加の資料で私を導くことができれば、それは素晴らしいでしょう 事前に感謝します

4

3 に答える 3

7

少し遅いですが...

http://www.magicsplat.com/articles/oo.htmlに投稿したチュートリアルがあります

于 2014-08-06T14:28:15.467 に答える
5

開示:私はTclOOを書きました(設計とテストで他の人から多くの助けを借りて)。


シンプルな始まり

TclOO は非常に簡単に使用できますが、その機能の大部分を使い始めると非常に複雑になる可能性があります。簡単なサンプルを次に示します。

# Make a class
oo::class create Example {
    variable x      ;# Not the same as [variable] in a namespace!
    constructor {} {
        set x 1
    }
    method bar {} {
        return [incr x]
    }
}

Example create foo  ;# Make an instance
puts [foo bar]      ;# Call the instance to get 2
puts [foo bar]      ;# Call the instance to get 3
puts [foo bar]      ;# Call the instance to get 4
foo destroy         ;# Kill the instance

クラスを書くのは非常に簡単で、上記で多くのことを行うことができます。リストされていない基本的な機能がいくつかありsuperclassます。クラスの親クラスに名前を付けることができます。デフォルトoo::objectでは、すべてのオブジェクトのクラスです。forwardメソッド呼び出しを別のコマンドにディスパッチできます。これは一種の簡単な委譲です。destructorオブジェクトが消えたときに呼び出されるものを記述できます。これを行うExample newと、名前を付けずにオブジェクトが作成されます。作成されたオブジェクトの名前は、それを呼び出した結果です。現在のオブジェクトの名前は、メソッド内で呼び出した結果ですself

コンストラクターとメソッドは、基本的な Tclprocコマンドと同じように引数を取ることができます。デストラクタはできません。

より複雑

rename他の Tcl コマンドと同じように、オブジェクトを d にinfo objectすることができますinfo class。を使用して、オブジェクトごとの特別な動作を任意のオブジェクトにアタッチできますoo::objdefine。すべてのオブジェクトには、状態を格納するために使用できるプライベートな名前空間があります (x上記の例の変数が存在する場所)。

名前が小文字で始まらない場合、デフォルトではメソッドはエクスポートされません (厳密には、glob パターン「<code>[az]*」と一致するかどうかによって異なります)。必要に応じて、これを変更できます。

クラスはそれ自体がオブジェクト ( のインスタンス) であるため、 ;oo::classを呼び出して作成されます。それらのコンストラクターは、指定したスクリプトをコマンドに渡します。コマンドは、クラスの動作を定義する役割を果たします。およびメソッドはまさにそれです: それらのクラスのインスタンスを作成するクラスのメソッド (それぞれ名前付き/名前なし) 。oo::class createoo::definecreatenew

多重継承を使用できます。そしてミックスイン。そしてフィルター。また、ディスパッチ ハンドラを追加して、未知のメソッドを呼び出そうとする試みに対処します。

oo::classオブジェクトを作成および管理する新しい方法を定義できるように、それ自体をサブクラス化できます。

oo::object実行時に任意のオブジェクトのクラスを変更できます (およびを除くoo::class。これらは、健全性のために特別にロックされています)。

…</p>

はい、私は TclOO の作成者ですが、自分の作成物で何ができるかをまだ調査中です。私は、あなたが要求することは事実上何でもできるように、非常に一生懸命に努力してきました。

于 2012-08-24T15:45:57.007 に答える
3

あなたが持っているリンクは、まだ開発中のTcl 8.6に含まれている新しいOOサポート用です。このOOサブシステムのリソースは見つけるのが難しい可能性が高く、そのまま使用できますが、他の OO パッケージの基礎。

Tcl 8.5 以前には、多数の「アドオン」OO パッケージがあります。これらの出発点としては、こちらを参照してください。過去に incr_Tcl と XOTcl の両方を使用したことがありますが、両方について妥当な量の情報を見つけることができるはずです。それらのホームページには、オンライン マニュアル、チュートリアル、および例があります。

于 2012-08-24T11:42:44.890 に答える