STERNO - Classes

# Sterno Classes

### Command: `::Sterno::defClass`

            ::Sterno::defClass name ?body?

Define a new class and return a command bound to the class. The class command becomes the identifier for the class and is used to invoke methods in the class. The form of a class command is:

            $cmd class-method ?arg0? ?arg1? ...

Where `class-method` is any class method.

If `name` is not empty, then a command by that name is defined that is aliased to the actual class command. This allows for accessing the class through a predefined name rather than the dynamic class command name. If the class is deleted, the aliased command will also be deleted.

Class fields may also be defined using the Tcl `variable` command.

The optional `body` is evaluated to define the class, normally defining instance methods and fields. There is no requirement that all fields and methods be defined in the body. The `method` and `field` class methods can be called with the class command at any time to add new members.

The `::Sterno::defClass` command creates a class namespace that is a child of the `::Sterno` namespace.

The following class-field is defined for each class:

- `self` - Contains the class command.
- `selfns` - Contains the class' namespace.

The following standard class-methods are defined for each class:

- `classMethod` - Defines a new class-method.
- `delete` - Deletes the class and all of its objects.
- `fget` - Returns the value of a class-field.
- `fset` - Sets the value of a class-field.
- `fref` - Get the fully qualified reference (name) of a class-field.
- `method` - Defines a new instance-method.
- `field` - Defines a new instance-field.
- `new` - Creates a new object that is an instance this class.
- `localNew` - Creates a new object that is an instance this class in the caller's namespace.

### Command `::Sterno::defLocalClass`

            ::Sterno::defLocalClass name ?body?

Define a new class in the caller's namespace and return a command bound to the class. Local classes are useful because they are deleted when the defining namespace is deleted, making it possible to easily cleanup a collection of classes and their objects. Often, the namespace is a Sterno object.

### Class-method: `classMethod`

            $cmd classMethod name args body

Define a new class method `name`. This method maybe called through the class object or an instance object of this class unless it is overridden by an instance-method of the same name. The `args` and `body` parameters are identical to `proc`. In fact, all `method` does is arrange for a procedure to be defined in the class namespace.

### Class-method: `delete`

            $cmd delete

Deletes the class and all of its objects.

### Class-method: `fget`

            $cmd fget name

Returns the value of the class-field `name`.

### Class-method: `fset`

            $cmd fset name value

Sets the value of the class-field `name` to `value`.

Class-fields are not imported into instance-methods by `fimport` method.

### Class-method: `fref`

            $cmd fref field

Get the fully qualified reference (name) of class-field `field` . This allows class-fields to be passed by name to procedures and commands. For example:

            array names [$obj fref table]

### Class-method: `method`

            $cmd method name args body

Define a new instance method `name` that will be defined in an object instantiated from this class. The `args` and `body` parameters are identical to `proc`. In fact, all `method` does is arrange for a procedure to be defined in the object's namespace when it is instantiated.

### Class-method `field`

            $cmd field name ?value?

Define the a new instance field `name`. The field will be defined and set to the optional `value` in objects instantiated from this class. Array fields may not have values assigned to elements with the `field` method. Array elements maybe initialized in the `construct` method.

### Class-method: `new`

            $cmd new ?arg0? ?arg1? ...

Create an object as an instance of this class and return a command associated with that object. All of the instance methods and fields that have been specified up to this point become members of the new object. If a method `construct` has been defined, it will be called to finish initialization of the object. The arguments `arg0`, `arg1`, etc are passed to `construct`.

### Class-method: `localNew`

            $cmd localNew ?arg0? ?arg1? ...

Creates a new object that is an instance this class in the caller's namespace and return a command associated with that object. Local objects are useful because they are deleted when the defining namespace is deleted, making it possible to easily cleanup a collection of objects. Often, the namespace is another Sterno object.

### Class-method: `new`

            $cmd new ?arg0? ?arg1? ...

Create an object as an instance of this class and return a command associated with that object. All of the instance methods and fields that have been specified up to this point become members of the new object. If a method `construct` has been defined, it will be called to finish initialization of the object. The arguments `arg0`, `arg1`, etc are passed to `construct`.