## Tcl8.6.17/Tk8.6.17 Documentation > [incr Tcl] Package Commands, version 4.3.4 > itcl

### Tcl/Tk Applications | Tcl Commands | Tk Commands | [incr Tcl] Package Commands | SQLite3 Package Commands | TDBC Package Commands | tdbc::mysql Package Commands | tdbc::odbc Package Commands | tdbc::postgres Package Commands | tdbc::sqlite3 Package Commands | Thread Package Commands | Tcl C API | Tk C API | [incr Tcl] Package C API | TDBC Package C API

### NAME

itcl — Tclへの対象志向の拡張 　　object-oriented extensions to Tcl

### 説明DESCRIPTION

[incr Tcl] は､C++ が C 言語に対して対象志向の拡張を与えたと同等以上に Tcl に対して対象志向の拡張を提供する｡ 但し､この仕事について強調することは､素晴らしい対象志向の算譜作成環境を生成する為ではない｡ 寧ろ､言語の香りを変更することなく Tcl 内に更なる構造的算譜の実践を提供することである｡ 何よりも [incr Tcl] は､関連する手続函数と､外の世界から隠されている名前空間内にあるその手続函数の共有データとを､一まとめにする手段を提供する｡ 対象志向の "library" 精神の推進によって､より良い算譜作成が奨励される｡ それは階層構造を通して符号命令の再使用を許容している｡ [incr Tcl] provides object-oriented extensions to Tcl, much as C++ provides object-oriented extensions to C. The emphasis of this work, however, is not to create a whiz-bang object-oriented programming environment. Rather, it is to support more structured programming practices in Tcl without changing the flavor of the language. More than anything else, [incr Tcl] provides a means of encapsulating related procedures together with their shared data in a namespace that is hidden from the outside world. It encourages better programming by promoting the object-oriented "library" mindset. It also allows for code re-use through inheritance.

### 級CLASSES

[incr Tcl] 内の基本的構造は級の定義である｡ それぞれの級は生成できる実際の対象の雛形として振舞う｡ それぞれの対象は級の中で定義された "変数" の即値を含む自身の独特なデータの束を有する｡ 特別な " 手段[methods]" と言う名の手続函数が個別の対象の操作に使われる｡ 手段は Tk 部品を操る為に使われる操作に良く似ている｡ 譬えば､"button" 部品は特定の釦を瞬かせたり､その命令を起動させたりする "flash" や "invoke" の様な手段を有する｡　　　　 The fundamental construct in [incr Tcl] is the class definition. Each class acts as a template for actual objects that can be created. Each object has its own unique bundle of data, which contains instances of the "variables" defined in the class. Special procedures called "methods" are used to manipulate individual objects. Methods are just like the operations that are used to manipulate Tk widgets. The "button" widget, for example, has methods such as "flash" and "invoke" that cause a particular button to blink and invoke its command.

級内で定義された "変数" は､手段の本体内部で自動的に利用できる｡ それは､ global 命令のような何かを伴って宣言される必要はない｡ 他の級手段の内部で､手段は何か他の命令の様に-単にその名前を使うだけで-起動される｡ 何か他の文脈からは､手段の名前は対象の名前が前置されなければならない､それによって､手段が利用できるデータのための文脈を提供する｡　　　 Within the body of a method, the "variables" defined in the class are automatically available. They need not be declared with anything like the global command. Within another class method, a method can be invoked like any other command-simply by using its name. From any other context, the method name must be prefaced by an object name, which provides a context for the data that the method can access.

それぞれの級はそれ自身の名前空間を有し､それは級に属する全ての対象に共通のものを含む｡ 譬えば､ "共通" データ要員は級内の全ての対象によって共有されている｡ それらは大域変数であり､級の名前空間内に存在するが､それらは級定義内に含まれるので､ global 命令を使って宣言する必要はない; それらは､級文脈内で実行するどの符号命令からも自動的に利用できる｡ 級は通常の大域変数も生成することができるが､それらは使用する時毎に global 命令を使って宣言しなければならない｡　　　　 Each class has its own namespace containing things that are common to all objects which belong to the class. For example, "common" data members are shared by all objects in the class. They are global variables that exist in the class namespace, but since they are included in the class definition, they need not be declared using the global command; they are automatically available to any code executing in the class context. A class can also create ordinary global variables, but these must be declared using the global command each time they are used.

級は又､ "procs" と宣言された通常の手続函数も有する事ができる｡他の級手段や手続函数の内部で､手続函数は他のどれかの命令の様に-単に名前を使うだけで-起動することができる｡その他のどの文脈からも､手続函数の名前は､級名前空間を使って修飾されるべきである､譬えば､ "className::proc" の様に｡級手続函数は級文脈内で実行し､自動的に全ての "共通" データ要員を利用する｡但し､それらは､対象固有の "変数" は利用できない､何故ならそれらはどの固有の対象も参照することなく起動されたから｡それらは通常､級に属する全ての対象に影響を及ぼす様な一般操作の遂行に使用される｡　　　　 Classes can also have ordinary procedures declared as "procs". Within another class method or proc, a proc can be invoked like any other command-simply by using its name. From any other context, the procedure name should be qualified with the class namespace like "className::proc". Class procs execute in the class context, and therefore have automatic access to all "common" data members. However, they cannot access object-specific "variables", since they are invoked without reference to any specific object. They are usually used to perform generic operations which affect all objects belonging to the class.

級内のそれぞれの要素は "public(公共)" か "protected(保護)" か "private(私的)" と宣言できる｡ 公共要素はその級と､誘導された級(この級を継承する他の級)と､級を使う拡張された級によって利用できる｡保護の要素は級と誘導された級によって利用できる｡私的な要素はそれが定義された級内でのみ利用できる｡ Each of the elements in a class can be declared "public", "protected" or "private". Public elements can be accessed by the class, by derived classes (other classes that inherit this class), and by external clients that use the class. Protected elements can be accessed by the class, and by derived classes. Private elements are only accessible in the class where they are defined.

級内部の "公共public" 要素は､外部の世界への対話機能を定義する｡ 公共手段は対象を操る為に使用できる操作を定義する｡ 公共変数はそれぞれの級に組み込まれた "configure" と "cget" 手段により構成設定指定として認識される｡ 公共対話機能は､対象が何をwhat するのか唱えるが､どのようにhowするかとは唱えない｡ 保護のと私的な要員は､級の手段と手続函数と共に実装の詳細を提供する｡ 応用譜の開発者をこれ等の詳細から隔離する事は､級の設計者を､どの様な時も､警告なしに､級に関連する算譜に影響を与えずに､級を変更することを束縛しなくする｡ この一体化が対象志向算譜の理解と維持をを容易にしていることは明らかである｡　　　　 The "public" elements within a class define its interface to the external world. Public methods define the operations that can be used to manipulate an object. Public variables are recognized as configuration options by the "configure" and "cget" methods that are built into each class. The public interface says what an object will do but not how it will do it. Protected and private members, along with the bodies of class methods and procs, provide the implementation details. Insulating the application developer from these details leaves the class designer free to change them at any time, without warning, and without affecting programs that rely on the class. It is precisely this encapsulation that makes object-oriented programs easier to understand and maintain.

[incr Tcl] 対象が Tk 部品に似ている事実は偶然ではない｡ [incr Tcl] は､ Tcl/Tk 応用譜に自然に混合する為に､この方法で設計された｡ しかし､[incr Tcl] は､ Tk の枠組みを単に対象基準であることから完全対象志向に拡張した｡ 対象志向の系は継承を運営し､級に対し､その祖先や基礎の級から継承することにより共通の振舞いを共有させる｡ 共通概念として基礎級を有することは算譜作者に対して､同様な方法で関連する級を取扱うことを許容する｡ 譬えば､パン焼き器と掻き混ぜ記は異なる(特化した)機能を遂行するが､両方とも応用譜の抽象化を共有する｡共通の振舞いを基礎の級に抽象化することにより､符号命令は複写されるcopied よりも共有化shared される｡ 結果としての応用譜はより易しく理解､維持され､誘導された級(譬えば､特化した応用譜)は用意に追加したり除去したりできる｡　　　　 The fact that [incr Tcl] objects look like Tk widgets is no accident. [incr Tcl] was designed this way, to blend naturally into a Tcl/Tk application. But [incr Tcl] extends the Tk paradigm from being merely object-based to being fully object-oriented. An object-oriented system supports inheritance, allowing classes to share common behaviors by inheriting them from an ancestor or base class. Having a base class as a common abstraction allows a programmer to treat related classes in a similar manner. For example, a toaster and a blender perform different (specialized) functions, but both share the abstraction of being appliances. By abstracting common behaviors into a base class, code can be shared rather than copied. The resulting application is easier to understand and maintain, and derived classes (e.g., specialized appliances) can be added or removed more easily.

この説明は単に対象志向算譜作成と [incr Tcl] の概論である｡ より教育的な緒論はこの電網配布場所に含まれる論文の中にある｡級の生成と使用に関する更なる詳細はclass 命令を参照されたい｡　　　　　 This description was merely a brief overview of object-oriented programming and [incr Tcl]. A more tutorial introduction is presented in the paper included with this distribution. See the class command for more details on creating and using classes.

### 名前空間NAMESPACES

[incr Tcl] は今や完全な名前空間便益を含んでいる｡ 名前空間は命令と大域変数の集積であり､それは通常の大域有効範囲から隔絶を保っている｡ これにより Tcl 符号外部函数は良く定義された方法で梱包化され､他の外部函数による望ましくない干渉を防止している｡ 名前空間は又､その内部に子供の名前空間を有する事ができ､それで一つの外部函数は多くの他の外部関数の私的複製を含むことができる｡ 名前空間は､又､関連した級の群を包含する為に使うことができる｡ 大域有効範囲( "::" と名付けられた)は､解釈実行機能の為の根本の名前空間である; 全ての他の名前空間はその内部にそれを含んでいる｡ [incr Tcl] now includes a complete namespace facility. A namespace is a collection of commands and global variables that is kept apart from the usual global scope. This allows Tcl code libraries to be packaged in a well-defined manner, and prevents unwanted interactions with other libraries. A namespace can also have child namespaces within it, so one library can contain its own private copy of many other libraries. A namespace can also be used to wrap up a group of related classes. The global scope (named "`::`") is the root namespace for an interpreter; all other namespaces are contained within it.

名前空間の生成と使用の詳細については namespace 命令を参照されたい｡　　　　 See the namespace command for details on creating and using namespaces.

### 複合部品 MEGA-WIDGETS

複合-部品は高水準部品であり､Tk 部品を要素部品として使って構築され､通常如何なる C 言語符号命令をも使わない｡ 譬えば､ファイル選択箱は､多くのリスト箱と､幾つかの入口部品と幾つかの制御釦を有する｡ これら個別の部品は､一つの大きな部品の様に振舞うように互いに結ばれる｡　　　　　 Mega-widgets are high-level widgets that are constructed using Tk widgets as component parts, usually without any C code. A fileselectionbox, for example, may have a few listboxes, some entry widgets and some control buttons. These individual widgets are put together in a way that makes them act like one big widget.

[incr Tk] は､複合部品を組上げる枠組みである｡ それは対象規範を運営し､基礎の級を追加する､それは､無為設定の部品動作を提供する｡ 更なる詳細はitk の取扱説明書の頁を参照されたい｡ [incr Tk] is a framework for building mega-widgets. It uses [incr Tcl] to support the object paradigm, and adds base classes which provide default widget behaviors. See the itk man page for more details.

[incr Widgets] は [incr Tk] を使って作成された複合部品の外部函数である｡ それは30以上の異なる部品級を含み､それは､ Tcl/Tk 応用譜を作成する為に､そのままで直ぐに使用することがでる｡ それぞれの部品の級は利用できる特性を記述した自身の取扱説明書の頁を有する｡ [incr Widgets] is a library of mega-widgets built using [incr Tk]. It contains more than 30 different widget classes that can be used right out of the box to build Tcl/Tk applications. Each widget class has its own man page describing the features available.

### KEYWORDS

class, object, object-oriented, namespace, mega-widget
Copyright © 1993-1998 Lucent Technologies, Inc.