## Tcl8.6.17/Tk8.6.17 Documentation > Tcl Commands > class

### 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
    oo::class — 全ての級の級 class of all classes
  構文 SYNOPSIS
  級の階層構造 　CLASS HIERARCHY
  説明 DESCRIPTION
  構成譜 CONSTRUCTOR
  解体譜 DESTRUCTOR
  移送された手段 EXPORTED METHODS
    cls create name ?arg ...?
    cls new ?arg ...?
  非移送手段 NON-EXPORTED METHODS
    cls createWithNamespace name nsName ?arg ...?
  用例 EXAMPLES
  SEE ALSO
  KEYWORDS

### NAME

oo::class — 全ての級の級 class of all classes

### 構文 SYNOPSIS

package require TclOO
oo::class method ?arg ...?

### 級の階層構造 　CLASS HIERARCHY

oo::object
→ oo::class

### 説明 DESCRIPTION

級は対象であり､それは具現化対象(級)内に保存された紋様に従って他の対象を具体化することができる｡級の実例値は級の具現化手段の一つを呼出すことにより作成され､典型的には､明示的に名前が与えられる場合は create ､任意の唯一の名前が自動的に選択される場合は new のどちらかである｡ Classes are objects that can manufacture other objects according to a pattern stored in the factory object (the class). An instance of the class is created by calling one of the class's factory methods, typically either create if an explicit name is being given, or new if an arbitrary unique name is to be automatically selected.

oo::class は全ての級の級である; 全ての級はこの級の実例値であり､それは結果としてそれ自身の実例値である｡この級は oo::object の子供の級であり､全ての級は又対象でもある｡追加的な擬似級(即ち､級の級)は必要なら子供の級 oo::class により定義することができる｡註意すべきは oo::class 対象は自身の上の new 手段を隠蔽する､そこで新しい級は常に create 手段を使って作られる｡ 　　　 The oo::class class is the class of all classes; every class is an instance of this class, which is consequently an instance of itself. This class is a subclass of oo::object, so every class is also an object. Additional metaclasses (i.e., classes of classes) can be defined if necessary by subclassing oo::class. Note that the oo::class object hides the new method on itself, so new classes should always be made using the create method.

#### 構成譜 CONSTRUCTOR

oo::class 級の構成譜は､任意追加の引数をとり､その時には､生成時に級が都合よく構成設定されることを許容する為に(新しく作成された級の名前に従って) oo::define 命令に送られる｡ 　　　 The constructor of the oo::class class takes an optional argument which, if present, is sent to the oo::define command (along with the name of the newly-created class) to allow the class to be conveniently configured at creation time.

#### 解体譜 DESTRUCTOR

oo::class 級は明示的に解体譜を定義しない｡しかし級が破壊された時､その混入された全ての対象に従って､その全ての子供の級と実例値は矢張り破壊される｡　　　 The oo::class class does not define an explicit destructor. However, when a class is destroyed, all its subclasses and instances are also destroyed, along with all objects that it has been mixed into.

#### 移送された手段 EXPORTED METHODS

cls create name ?arg ...?
  これは､ name (完全に修飾されていない場合は､呼出し側の文脈の名前空間内で名前が決められる)と名付けられた､級 cls の新しい実例値を作成して､引数 arg ... を構成譜に渡し､ (成功した結果が返されると)､作成された対象の完全に修飾された名前を返す(構成譜の結果は無視される)｡もし構成譜が失敗すると(即ち､非-OK 結果が返る)､対象は破壊され､不都合伝言文が手段呼び出しの結果になる｡ 　　　　 This creates a new instance of the class cls called name (which is resolved within the calling context's namespace if not fully qualified), passing the arguments, arg ..., to the constructor, and (if that returns a successful result) returning the fully qualified name of the created object (the result of the constructor is ignored). If the constructor fails (i.e. returns a non-OK result) then the object is destroyed and the error message is the result of this method call.

cls new ?arg ...?
  これは級 cls の新しい実例値を新しい唯一の名前を付けて作成し､引数 arg ... を構成譜に渡し(成功した結果が返されると)､作成された対象の完全に修飾された名前を返す(構成譜の結果は無視される)｡もし構成譜が失敗すると(即ち､非-OK 結果が返る)､対象は破壊され､不都合伝言文が手段呼び出しの結果になる｡ 　　　 This creates a new instance of the class cls with a new unique name, passing the arguments, arg ..., to the constructor, and (if that returns a successful result) returning the fully qualified name of the created object (the result of the constructor is ignored). If the constructor fails (i.e., returns a non-OK result) then the object is destroyed and the error message is the result of this method call.

  註意すべきは､この手段は oo::class 対象自身によって移送されないので級はこの手段を使って作成すべきではない｡ Note that this method is not exported by the oo::class object itself, so classes should not be created using this method.

#### 非移送手段 NON-EXPORTED METHODS

oo::class 級は次の非移送手段に対応する｡ 　　　 The oo::class class supports the following non-exported methods:

cls createWithNamespace name nsName ?arg ...?
  これは､ name と名付けられた(完全に修飾されていない場合は､呼出し側の文脈の名前空間内で名前が決められる)､級 cls の新しい実例値を作成して､引数 arg ... を構成譜に渡し､ (成功した結果が返されると)､作成された対象の完全に修飾された名前を返す(構成譜の結果は無視される)｡実例値の内部の名前空間の名前はその名前空間が既存でない限り nsName になる; 名前空間が創生できないと不都合になる｡構成譜が失敗すると(即ち､非okが返ると)､対象は破壊され､この手段呼出の結果は不都合伝言文になる｡ This creates a new instance of the class cls called name (which is resolved within the calling context's namespace if not fully qualified), passing the arguments, arg ..., to the constructor, and (if that returns a successful result) returning the fully qualified name of the created object (the result of the constructor is ignored). The name of the instance's internal namespace will be nsName; it is an error if that namespace cannot be created. If the constructor fails (i.e., returns a non-OK result) then the object is destroyed and the error message is the result of this method call.

### 用例 EXAMPLES

この例は､単純な級階層構造を作成しその新しい実例値を作成する｡それは次に､階層構造を破壊する前に対象の手段を起動し､その解体の推移を示す｡ 　　　 This example defines a simple class hierarchy and creates a new instance of it. It then invokes a method of the object before destroying the hierarchy and showing that the destruction is transitive.

    oo::class create fruit {
        method eat {} {
            puts "yummy!"
        }
    }
    oo::class create banana {
        superclass fruit
        constructor {} {
            my variable peeled
            set peeled 0
        }
        method peel {} {
            my variable peeled
            set peeled 1
            puts "skin now off"
        }
        method edible? {} {
            my variable peeled
            return $peeled
        }
        method eat {} {
            if {![my edible?]} {
                my peel
            }
            next
        }
    }
    set b [banana new]
    $b eat               → prints "skin now off" and "yummy!"
    fruit destroy
    $b eat               → error "unknown command"

### SEE ALSO

oo::define, oo::object

### KEYWORDS

class, metaclass, object
Copyright © 2007 Donal K. Fellows