aboutsummaryrefslogtreecommitdiff
path: root/README.oo
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2022-08-01 09:19:52 +1000
committerSteve Bennett <steveb@workware.net.au>2022-08-20 15:25:28 +1000
commit5af9d6a919b83e28a37ade2db8090a375a93ba53 (patch)
treefbfbbc5913481bb3baf4b4098f3d1ef772bd3902 /README.oo
parentd0c75cd790ce8b1eca79489c006dad5d530dc405 (diff)
downloadjimtcl-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.oo29
1 files changed, 22 insertions, 7 deletions
diff --git a/README.oo b/README.oo
index 8dd7a30..a9b9d4f 100644
--- a/README.oo
+++ b/README.oo
@@ -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
-----------------