September Morn Update
This commit is contained in:
parent
4e2d22a71d
commit
aac6731f2c
6856 changed files with 141342 additions and 21127 deletions
|
|
@ -1,54 +1,46 @@
|
|||
import extensions.
|
||||
import system'routines.
|
||||
import extensions;
|
||||
import system'routines;
|
||||
|
||||
class IOperable
|
||||
interface IOperable
|
||||
{
|
||||
operate
|
||||
[
|
||||
NotSupportedException new; raise.
|
||||
]
|
||||
abstract operate() {}
|
||||
}
|
||||
|
||||
class Operable :: IOperable
|
||||
class Operable : IOperable
|
||||
{
|
||||
operate
|
||||
= "delegate implementation".
|
||||
constructor() {}
|
||||
|
||||
operate()
|
||||
= "delegate implementation";
|
||||
}
|
||||
|
||||
class Delegator
|
||||
{
|
||||
object theDelegate.
|
||||
object theDelegate;
|
||||
|
||||
constructor new
|
||||
[
|
||||
theDelegate := nil.
|
||||
]
|
||||
set Delegate(object)
|
||||
{
|
||||
theDelegate := object
|
||||
}
|
||||
|
||||
set Delegate:obj
|
||||
[
|
||||
if ($nil == obj)
|
||||
[ theDelegate := $nil. ];
|
||||
[ theDelegate := obj. ].
|
||||
]
|
||||
internal operate(operable)
|
||||
= "default implementation";
|
||||
|
||||
operate(Object operable)
|
||||
= "default implementation".
|
||||
internal operate(IOperable operable)
|
||||
= operable.operate();
|
||||
|
||||
operate(IOperable operable)
|
||||
= operable operate.
|
||||
|
||||
operate
|
||||
<= operate(theDelegate).
|
||||
operate()
|
||||
<= operate(theDelegate);
|
||||
}
|
||||
|
||||
program =
|
||||
[
|
||||
var delegator := Delegator new.
|
||||
public program()
|
||||
{
|
||||
var delegator := new Delegator();
|
||||
|
||||
(nil, Object new, Operable new) forEach(:o)
|
||||
[
|
||||
delegator Delegate := o.
|
||||
new object[]{nil, new Object(), new Operable()}.forEach:(o)
|
||||
{
|
||||
delegator.Delegate := o;
|
||||
|
||||
console printLine(delegator operate).
|
||||
].
|
||||
].
|
||||
console.printLine(delegator.operate())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,53 +1,47 @@
|
|||
import extensions.
|
||||
import system'routines.
|
||||
import extensions;
|
||||
import system'routines;
|
||||
|
||||
class Operable
|
||||
{
|
||||
operable = $self.
|
||||
Operable = self;
|
||||
|
||||
operate
|
||||
= "delegate implementation".
|
||||
operate()
|
||||
= "delegate implementation";
|
||||
}
|
||||
|
||||
class Delegator
|
||||
{
|
||||
object theDelegate.
|
||||
prop object Delegate;
|
||||
|
||||
constructor new
|
||||
[
|
||||
theDelegate := nil.
|
||||
]
|
||||
constructor()
|
||||
{
|
||||
Delegate := nil
|
||||
}
|
||||
|
||||
set Delegate:obj
|
||||
[
|
||||
if ($nil == obj)
|
||||
[ theDelegate := $nil. ];
|
||||
[ theDelegate := obj. ].
|
||||
]
|
||||
|
||||
operate
|
||||
[
|
||||
operate()
|
||||
{
|
||||
// if the object does not support "get&operable" message - returns nil
|
||||
var anOperable := theDelegate operable \ back:$nil.
|
||||
var operable := Delegate.Operable \ back:nil;
|
||||
|
||||
if ($nil == anOperable)
|
||||
[
|
||||
^ "default implementation".
|
||||
];
|
||||
[
|
||||
^ anOperable operate.
|
||||
].
|
||||
]
|
||||
if (nil == operable)
|
||||
{
|
||||
^ "default implementation"
|
||||
}
|
||||
else
|
||||
{
|
||||
^ operable.operate()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
program =
|
||||
[
|
||||
var delegator := Delegator new.
|
||||
public program()
|
||||
{
|
||||
var delegator := new Delegator();
|
||||
|
||||
(nil, Object new, Operable new) forEach(:o)
|
||||
[
|
||||
delegator Delegate := o.
|
||||
new object[]{nil, new Object(), new Operable()}.forEach:(o)
|
||||
{
|
||||
delegator.Delegate := o;
|
||||
|
||||
console printLine(delegator operate).
|
||||
].
|
||||
].
|
||||
console.printLine(delegator.operate())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue