diff options
author | Steve Bennett <steveb@workware.net.au> | 2022-08-01 09:19:52 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2022-08-20 15:25:28 +1000 |
commit | 5af9d6a919b83e28a37ade2db8090a375a93ba53 (patch) | |
tree | fbfbbc5913481bb3baf4b4098f3d1ef772bd3902 /README.oo | |
parent | d0c75cd790ce8b1eca79489c006dad5d530dc405 (diff) | |
download | jimtcl-5af9d6a919b83e28a37ade2db8090a375a93ba53.zip jimtcl-5af9d6a919b83e28a37ade2db8090a375a93ba53.tar.gz jimtcl-5af9d6a919b83e28a37ade2db8090a375a93ba53.tar.bz2 |
oo: better object construction
Now a default constructor is created, as an alias for defaultconstrutor.
The constructor is passed the arguments to new and by default
this accepts a dictionary that is checked for valid instance variables and sets them.
However the constructor can be replaced by one that takes arbitrary arguments.
Thus we can how have:
a new -optiona -optionb
And the constructor is invoked with arguments '-optiona -optionab'.
This makes object initialisation more flexible.
** Note: This is an incompatible change if you have classes with a constructor
and you create object instances with new <dict>.
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Documentation fixes -
Co-authored-by: Adrian Ho <the.gromgit@gmail.com>
Diffstat (limited to 'README.oo')
-rw-r--r-- | README.oo | 29 |
1 files changed, 22 insertions, 7 deletions
@@ -47,10 +47,12 @@ PREDEFINED CLASS METHODS Declaring a class pre-defines a number of "class" methods. i.e. those which don't require an object and simply return or manipulate properties of the class. These are: - new ?instancevars?:: + new ?args...?:: Creates and returns new object, optionally overriding the default class variable values. Note that the class name is an alias for 'classname new {}' and can be used as a shorthand - for creating new objects with default values. + for creating new objects with default values. If the default constructor is used, + 'args' is interpreted as a dictionary of instance variables that are set as given. + These can be interpreted differently if a custom constructor is used. method name arglist body:: Creates or redefines a method for the class with the given name, argument list and body. @@ -87,6 +89,14 @@ PREDEFINED OBJECT METHODS Declaring a class pre-defines a number of "object" methods. i.e. those which operate on a specific object. + defaultconstructor ?dict?:: + This is the default constructor. It sets instance variables from the dictionary. + + constructor ?args...?:: + Invoked after an object is created with the arguments to 'new'. The default implementation + is 'defaultconstructor', but this may be replaced and then the arguments can be + interpreted in a class-specific manner. + destroy:: Destroys the object. This method may be overridden, but note that it should delete the object with {rename $self ""}. This method will also be called @@ -102,10 +112,7 @@ on a specific object. RESERVED METHODS ---------------- -The following methods are special - - constructor:: - If this method exists, it is invoked (with no arguments) after an object is created +The following method is special unknown methodname ...:: If an undefined method is invoked, and this method exists, it is called with the methodname @@ -132,7 +139,15 @@ For example: . $b get balance 1000 -If the 'constructor' method exists, it is invoked just after the object is created +The default constructor is used above. Alternatively, we could define a custom constructor: + + Account method constructor {initial} { + set balance $initial + } + +Now we can do: + + set b [Account new 1000] DECLARING METHODS ----------------- |