summaryrefslogtreecommitdiffstats
path: root/tcl8.6/pkgs/itcl4.1.1/doc/class.n
diff options
context:
space:
mode:
Diffstat (limited to 'tcl8.6/pkgs/itcl4.1.1/doc/class.n')
-rw-r--r--tcl8.6/pkgs/itcl4.1.1/doc/class.n531
1 files changed, 0 insertions, 531 deletions
diff --git a/tcl8.6/pkgs/itcl4.1.1/doc/class.n b/tcl8.6/pkgs/itcl4.1.1/doc/class.n
deleted file mode 100644
index 930270c..0000000
--- a/tcl8.6/pkgs/itcl4.1.1/doc/class.n
+++ /dev/null
@@ -1,531 +0,0 @@
-'\"
-'\" Copyright (c) 1993-1998 Lucent Technologies, Inc.
-'\"
-'\" See the file "license.terms" for information on usage and redistribution
-'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
-'\"
-.TH class n "" itcl "[incr\ Tcl]"
-.so man.macros
-.BS
-'\" Note: do not modify the .SH NAME line immediately below!
-.SH NAME
-itcl::class \- create a class of objects
-.SH SYNOPSIS
-.nf
-\fBitcl::class \fIclassName \fB{\fR
- \fBinherit \fIbaseClass\fR ?\fIbaseClass\fR...?
- \fBconstructor \fIargs\fR ?\fIinit\fR? \fIbody\fR
- \fBdestructor \fIbody\fR
- \fBmethod \fIname\fR ?\fIargs\fR? ?\fIbody\fR?
- \fBproc \fIname\fR ?\fIargs\fR? ?\fIbody\fR?
- \fBvariable \fIvarName\fR ?\fIinit\fR? ?\fIconfig\fR?
- \fBcommon \fIvarName\fR ?\fIinit\fR?
-
- \fBpublic \fIcommand\fR ?\fIarg arg ...\fR?
- \fBprotected \fIcommand\fR ?\fIarg arg ...\fR?
- \fBprivate \fIcommand\fR ?\fIarg arg ...\fR?
-
- \fBset \fIvarName\fR ?\fIvalue\fR?
- \fBarray \fIoption\fR ?\fIarg arg ...\fR?
-\fB}\fR
-
-\fIclassName objName\fR ?\fIarg arg ...\fR?
-
-\fIobjName method\fR ?\fIarg arg ...\fR?
-
-\fIclassName::proc\fR ?\fIarg arg ...\fR?
-.fi
-.BE
-
-.SH DESCRIPTION
-.PP
-The fundamental construct in \fB[incr\ Tcl]\fR is the class definition.
-Each class acts as a template for actual objects that can be created.
-The class itself is a namespace which contains things common to all
-objects. Each object has its own unique bundle of data which contains
-instances of the "variables" defined in the class definition. Each
-object also has a built-in variable named "this", which contains the
-name of the object. Classes can also have "common" data members that
-are shared by all objects in a class.
-.PP
-Two types of functions can be included in the class definition.
-"Methods" are functions which operate on a specific object, and
-therefore have access to both "variables" and "common" data members.
-"Procs" are ordinary procedures in the class namespace, and only
-have access to "common" data members.
-.PP
-If the body of any method or proc starts with "\fB@\fR", it is treated
-as the symbolic name for a C procedure. Otherwise, it is treated as
-a Tcl code script. See below for details on registering and using
-C procedures.
-.PP
-A class can only be defined once, although the bodies of class
-methods and procs can be defined again and again for interactive
-debugging. See the \fBbody\fR and \fBconfigbody\fR commands for
-details.
-.PP
-Each namespace can have its own collection of objects and classes.
-The list of classes available in the current context can be queried
-using the "\fBitcl::find classes\fR" command, and the list of objects,
-with the "\fBitcl::find objects\fR" command.
-.PP
-A class can be deleted using the "\fBdelete class\fR" command.
-Individual objects can be deleted using the "\fBdelete object\fR"
-command.
-
-.SH "CLASS DEFINITIONS"
-.TP
-\fBclass \fIclassName definition\fR
-.
-Provides the definition for a class named \fIclassName\fR. If
-the class \fIclassName\fR already exists, or if a command called
-\fIclassName\fR exists in the current namespace context, this
-command returns an error. If the class definition is successfully
-parsed, \fIclassName\fR becomes a command in the current context,
-handling the creation of objects for this class.
-.PP
-The class \fIdefinition\fR is evaluated as a series of Tcl
-statements that define elements within the class. The following
-class definition commands are recognized:
-.RS
-.TP
-\fBinherit \fIbaseClass\fR ?\fIbaseClass\fR...?
-.
-Causes the current class to inherit characteristics from one or
-more base classes. Classes must have been defined by a previous
-\fBclass\fR command, or must be available to the auto-loading
-facility (see "AUTO-LOADING" below). A single class definition
-can contain no more than one \fBinherit\fR command.
-.RS
-.PP
-The order of \fIbaseClass\fR names in the \fBinherit\fR list
-affects the name resolution for class members. When the same
-member name appears in two or more base classes, the base class
-that appears first in the \fBinherit\fR list takes precedence.
-For example, if classes "Foo" and "Bar" both contain the member
-"x", and if another class has the "\fBinherit\fR" statement:
-.PP
-.CS
-inherit Foo Bar
-.CE
-.PP
-then the name "x" means "Foo::x". Other inherited members named
-"x" must be referenced with their explicit name, like "Bar::x".
-.RE
-.TP
-\fBconstructor \fIargs\fR ?\fIinit\fR? \fIbody\fR
-.
-Declares the \fIargs\fR argument list and \fIbody\fR used for
-the constructor, which is automatically invoked whenever an
-object is created.
-.RS
-.PP
-Before the \fIbody\fR is executed, the
-optional \fIinit\fR statement is used to invoke any base class
-constructors that require arguments. Variables in the \fIargs\fR
-specification can be accessed in the \fIinit\fR code fragment,
-and passed to base class constructors. After evaluating the
-\fIinit\fR statement, any base class constructors that have
-not been executed are invoked automatically without arguments.
-This ensures that all base classes are fully constructed before
-the constructor \fIbody\fR is executed. By default, this
-scheme causes constructors to be invoked in order from least-
-to most-specific. This is exactly the opposite of the order
-that classes are reported by the \fBinfo heritage\fR command.
-.PP
-If construction is successful, the constructor always returns
-the object name\-regardless of how the \fIbody\fR is defined\-and
-the object name becomes a command in the current namespace context.
-If construction fails, an error message is returned.
-.RE
-.TP
-\fBdestructor \fIbody\fR
-.
-Declares the \fIbody\fR used for the destructor, which is automatically
-invoked when an object is deleted. If the destructor is successful,
-the object data is destroyed and the object name is removed as a command
-from the interpreter. If destruction fails, an error message is returned
-and the object remains.
-.RS
-.PP
-When an object is destroyed, all destructors in its class hierarchy
-are invoked in order from most- to least-specific. This is the
-order that the classes are reported by the "\fBinfo heritage\fR"
-command, and it is exactly the opposite of the default constructor
-order.
-.RE
-.TP
-\fBmethod \fIname\fR ?\fIargs\fR? ?\fIbody\fR?
-.
-Declares a method called \fIname\fR. When the method \fIbody\fR is
-executed, it will have automatic access to object-specific variables
-and common data members.
-.RS
-.PP
-If the \fIargs\fR list is specified, it establishes the usage
-information for this method. The \fBbody\fR command can be used
-to redefine the method body, but the \fIargs\fR list must match
-this specification.
-.PP
-Within the body of another class method, a method can be invoked
-like any other command\-simply by using its name. Outside of the
-class context, the method name must be prefaced an object name,
-which provides the context for the data that it manipulates.
-Methods in a base class that are redefined in the current class,
-or hidden by another base class, can be qualified using the
-"\fIclassName\fR::\fImethod\fR" syntax.
-.RE
-.TP
-\fBproc \fIname\fR ?\fIargs\fR? ?\fIbody\fR?
-.
-Declares a proc called \fIname\fR. A proc is an ordinary procedure
-within the class namespace. Unlike a method, a proc is invoked
-without referring to a specific object. When the proc \fIbody\fR is
-executed, it will have automatic access only to common data members.
-.RS
-.PP
-If the \fIargs\fR list is specified, it establishes the usage
-information for this proc. The \fBbody\fR command can be used
-to redefine the proc body, but the \fIargs\fR list must match
-this specification.
-.PP
-Within the body of another class method or proc, a proc can be
-invoked like any other command\-simply by using its name.
-In any other namespace context, the proc is invoked using a
-qualified name like "\fIclassName\fB::\fIproc\fR". Procs in
-a base class that are redefined in the current class, or hidden
-by another base class, can also be accessed via their qualified
-name.
-.RE
-.TP
-\fBvariable \fIvarName\fR ?\fIinit\fR? ?\fIconfig\fR?
-.
-Defines an object-specific variable named \fIvarName\fR. All
-object-specific variables are automatically available in class
-methods. They need not be declared with anything like the
-\fBglobal\fR command.
-.RS
-.PP
-If the optional \fIinit\fR string is specified, it is used as the
-initial value of the variable when a new object is created.
-Initialization forces the variable to be a simple scalar
-value; uninitialized variables, on the other hand, can be set
-within the constructor and used as arrays.
-.PP
-The optional \fIconfig\fR script is only allowed for public variables.
-If specified, this code fragment is executed whenever a public
-variable is modified by the built-in "configure" method. The
-\fIconfig\fR script can also be specified outside of the class
-definition using the \fBconfigbody\fR command.
-.RE
-.TP
-\fBcommon \fIvarName\fR ?\fIinit\fR?
-.
-Declares a common variable named \fIvarName\fR. Common variables
-reside in the class namespace and are shared by all objects belonging
-to the class. They are just like global variables, except that
-they need not be declared with the usual \fBglobal\fR command.
-They are automatically visible in all class methods and procs.
-.RS
-.PP
-If the optional \fIinit\fR string is specified, it is used as the
-initial value of the variable. Initialization forces the variable
-to be a simple scalar value; uninitialized variables, on the other
-hand, can be set with subsequent \fBset\fR and \fBarray\fR commands
-and used as arrays.
-.PP
-Once a common data member has been defined, it can be set using
-\fBset\fR and \fBarray\fR commands within the class definition.
-This allows common data members to be initialized as arrays.
-For example:
-.PP
-.CS
-itcl::class Foo {
- common boolean
- set boolean(true) 1
- set boolean(false) 0
-}
-.CE
-.PP
-Note that if common data members are initialized within the
-constructor, they get initialized again and again whenever new
-objects are created.
-.RE
-.TP
-\fBpublic \fIcommand\fR ?\fIarg arg ...\fR?
-.TP
-\fBprotected \fIcommand\fR ?\fIarg arg ...\fR?
-.TP
-\fBprivate \fIcommand\fR ?\fIarg arg ...\fR?
-.
-These commands are used to set the protection level for class
-members that are created when \fIcommand\fR is evaluated.
-The \fIcommand\fR is usually \fBmethod\fR, \fBproc\fR,
-\fBvariable\fR or\fBcommon\fR, and the remaining \fIarg\fR's
-complete the member definition. However, \fIcommand\fR can
-also be a script containing many different member definitions,
-and the protection level will apply to all of the members
-that are created.
-.RE
-.SH "CLASS USAGE"
-.PP
-Once a class has been defined, the class name can be used as a
-command to create new objects belonging to the class.
-.TP
-\fIclassName objName\fR ?\fIargs...\fR?
-.
-Creates a new object in class \fIclassName\fR with the name \fIobjName\fR.
-Remaining arguments are passed to the constructor of the most-specific
-class. This in turn passes arguments to base class constructors before
-invoking its own body of commands. If construction is successful, a
-command called \fIobjName\fR is created in the current namespace context,
-and \fIobjName\fR is returned as the result of this operation.
-If an error is encountered during construction, the destructors are
-automatically invoked to free any resources that have been allocated,
-the object is deleted, and an error is returned.
-.RS
-.PP
-If \fIobjName\fR contains the string "\fB#auto\fR", that string is
-replaced with an automatically generated name. Names have the
-form \fIclassName<number>\fR, where the \fIclassName\fR part is
-modified to start with a lowercase letter. In class "Toaster",
-for example, the "\fB#auto\fR" specification would produce names
-like toaster0, toaster1, etc. Note that "\fB#auto\fR" can be
-also be buried within an object name:
-.PP
-.CS
-fileselectiondialog .foo.bar.#auto -background red
-.CE
-.PP
-This would generate an object named ".foo.bar.fileselectiondialog0".
-.RE
-.SH "OBJECT USAGE"
-.PP
-Once an object has been created, the object name can be used
-as a command to invoke methods that operate on the object.
-.TP
-\fIobjName method\fR ?\fIargs...\fR?
-.
-Invokes a method named \fImethod\fR on an object named \fIobjName\fR.
-Remaining arguments are passed to the argument list for the
-method. The method name can be "constructor", "destructor",
-any method name appearing in the class definition, or any of
-the following built-in methods.
-.SH "BUILT-IN METHODS"
-.TP
-\fIobjName \fBcget option\fR
-.
-Provides access to public variables as configuration options. This
-mimics the behavior of the usual "cget" operation for Tk widgets.
-The \fIoption\fR argument is a string of the form "\fB-\fIvarName\fR",
-and this method returns the current value of the public variable
-\fIvarName\fR.
-.TP
-\fIobjName \fBconfigure\fR ?\fIoption\fR? ?\fIvalue option value ...\fR?
-.
-Provides access to public variables as configuration options. This
-mimics the behavior of the usual "configure" operation for Tk widgets.
-With no arguments, this method returns a list of lists describing
-all of the public variables. Each list has three elements: the
-variable name, its initial value and its current value.
-.RS
-.PP
-If a single \fIoption\fR of the form "\fB-\fIvarName\fR" is specified,
-then this method returns the information for that one variable.
-.PP
-Otherwise, the arguments are treated as \fIoption\fR/\fIvalue\fR
-pairs assigning new values to public variables. Each variable
-is assigned its new value, and if it has any "config" code associated
-with it, it is executed in the context of the class where it was
-defined. If the "config" code generates an error, the variable
-is set back to its previous value, and the \fBconfigure\fR method
-returns an error.
-.RE
-.TP
-\fIobjName \fBisa \fIclassName\fR
-.
-Returns non-zero if the given \fIclassName\fR can be found in the
-object's heritage, and zero otherwise.
-.TP
-\fIobjName \fBinfo \fIoption\fR ?\fIargs...\fR?
-.
-Returns information related to a particular object named
-\fIobjName\fR, or to its class definition. The \fIoption\fR
-parameter includes the following things, as well as the options
-recognized by the usual Tcl "info" command:
-.RS
-.TP
-\fIobjName \fBinfo class\fR
-.
-Returns the name of the most-specific class for object \fIobjName\fR.
-.TP
-\fIobjName \fBinfo inherit\fR
-.
-Returns the list of base classes as they were defined in the
-"\fBinherit\fR" command, or an empty string if this class
-has no base classes.
-.TP
-\fIobjName \fBinfo heritage\fR
-.
-Returns the current class name and the entire list of base classes
-in the order that they are traversed for member lookup and object
-destruction.
-.TP
-\fIobjName \fBinfo function\fR ?\fIcmdName\fR? ?\fB-protection\fR? ?\fB-type\fR? ?\fB-name\fR? ?\fB-args\fR? ?\fB-body\fR?
-.
-With no arguments, this command returns a list of all class methods
-and procs. If \fIcmdName\fR is specified, it returns information
-for a specific method or proc. If no flags are specified, this
-command returns a list with the following elements: the protection
-level, the type (method/proc), the qualified name, the argument list
-and the body. Flags can be used to request specific elements from
-this list.
-.TP
-\fIobjName \fBinfo variable\fR ?\fIvarName\fR? ?\fB-protection\fR? ?\fB-type\fR? ?\fB-name\fR? ?\fB-init\fR? ?\fB-value\fR? ?\fB-config\fR?
-.
-With no arguments, this command returns a list of all object-specific
-variables and common data members. If \fIvarName\fR is specified, it
-returns information for a specific data member. If no flags are
-specified, this command returns a list with the following elements: the
-protection level, the type (variable/common), the qualified name, the
-initial value, and the current value. If \fIvarName\fR is a public
-variable, the "config" code is included on this list. Flags can be
-used to request specific elements from this list.
-.RE
-.SH "CHAINING METHODS/PROCS"
-.PP
-Sometimes a base class has a method or proc that is redefined with
-the same name in a derived class. This is a way of making the
-derived class handle the same operations as the base class, but
-with its own specialized behavior. For example, suppose we have
-a Toaster class that looks like this:
-.PP
-.CS
-itcl::class Toaster {
- variable crumbs 0
- method toast {nslices} {
- if {$crumbs > 50} {
- error "== FIRE! FIRE! =="
- }
- set crumbs [expr $crumbs+4*$nslices]
- }
- method clean {} {
- set crumbs 0
- }
-}
-.CE
-.PP
-We might create another class like SmartToaster that redefines
-the "toast" method. If we want to access the base class method,
-we can qualify it with the base class name, to avoid ambiguity:
-.PP
-.CS
-itcl::class SmartToaster {
- inherit Toaster
- method toast {nslices} {
- if {$crumbs > 40} {
- clean
- }
- return [Toaster::toast $nslices]
- }
-}
-.CE
-.PP
-Instead of hard-coding the base class name, we can use the
-"chain" command like this:
-.PP
-.CS
-itcl::class SmartToaster {
- inherit Toaster
- method toast {nslices} {
- if {$crumbs > 40} {
- clean
- }
- return [chain $nslices]
- }
-}
-.CE
-.PP
-The chain command searches through the class hierarchy for
-a slightly more generic (base class) implementation of a method
-or proc, and invokes it with the specified arguments. It starts
-at the current class context and searches through base classes
-in the order that they are reported by the "info heritage" command.
-If another implementation is not found, this command does nothing
-and returns the null string.
-.SH "AUTO-LOADING"
-.PP
-Class definitions need not be loaded explicitly; they can be loaded as
-needed by the usual Tcl auto-loading facility. Each directory containing
-class definition files should have an accompanying "tclIndex" file.
-Each line in this file identifies a Tcl procedure or \fB[incr\ Tcl]\fR
-class definition and the file where the definition can be found.
-.PP
-For example, suppose a directory contains the definitions for classes
-"Toaster" and "SmartToaster". Then the "tclIndex" file for this
-directory would look like:
-.PP
-.CS
-# Tcl autoload index file, version 2.0 for [incr Tcl]
-# This file is generated by the "auto_mkindex" command
-# and sourced to set up indexing information for one or
-# more commands. Typically each line is a command that
-# sets an element in the auto_index array, where the
-# element name is the name of a command and the value is
-# a script that loads the command.
-
-set auto_index(::Toaster) "source $dir/Toaster.itcl"
-set auto_index(::SmartToaster) "source $dir/SmartToaster.itcl"
-.CE
-.PP
-The \fBauto_mkindex\fR command is used to automatically
-generate "tclIndex" files.
-.PP
-The auto-loader must be made aware of this directory by appending
-the directory name to the "auto_path" variable. When this is in
-place, classes will be auto-loaded as needed when used in an
-application.
-.SH "C PROCEDURES"
-.PP
-C procedures can be integrated into an \fB[incr\ Tcl]\fR class
-definition to implement methods, procs, and the "config" code
-for public variables. Any body that starts with "\fB@\fR"
-is treated as the symbolic name for a C procedure.
-.PP
-Symbolic names are established by registering procedures via
-\fBItcl_RegisterC()\fR. This is usually done in the \fBTcl_AppInit()\fR
-procedure, which is automatically called when the interpreter starts up.
-In the following example, the procedure \fCMy_FooCmd()\fR is registered
-with the symbolic name "foo". This procedure can be referenced in
-the \fBbody\fR command as "\fC@foo\fR".
-.PP
-.CS
-int
-Tcl_AppInit(interp)
- Tcl_Interp *interp; /* Interpreter for application. */
-{
- if (Itcl_Init(interp) == TCL_ERROR) {
- return TCL_ERROR;
- }
-
- if (Itcl_RegisterC(interp, "foo", My_FooCmd) != TCL_OK) {
- return TCL_ERROR;
- }
-}
-.CE
-.PP
-C procedures are implemented just like ordinary Tcl commands.
-See the \fBCrtCommand\fR man page for details. Within the procedure,
-class data members can be accessed like ordinary variables
-using \fBTcl_SetVar()\fR, \fBTcl_GetVar()\fR, \fBTcl_TraceVar()\fR,
-etc. Class methods and procs can be executed like ordinary commands
-using \fBTcl_Eval()\fR. \fB[incr\ Tcl]\fR makes this possible by
-automatically setting up the context before executing the C procedure.
-.PP
-This scheme provides a natural migration path for code development.
-Classes can be developed quickly using Tcl code to implement the
-bodies. An entire application can be built and tested. When
-necessary, individual bodies can be implemented with C code to
-improve performance.
-.SH KEYWORDS
-class, object, object-oriented