September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
54
Task/Delegates/Elena/delegates-1.elena
Normal file
54
Task/Delegates/Elena/delegates-1.elena
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
import extensions.
|
||||
import system'routines.
|
||||
|
||||
class IOperable
|
||||
{
|
||||
operate
|
||||
[
|
||||
NotSupportedException new; raise.
|
||||
]
|
||||
}
|
||||
|
||||
class Operable :: IOperable
|
||||
{
|
||||
operate
|
||||
= "delegate implementation".
|
||||
}
|
||||
|
||||
class Delegator
|
||||
{
|
||||
object theDelegate.
|
||||
|
||||
constructor new
|
||||
[
|
||||
theDelegate := nil.
|
||||
]
|
||||
|
||||
set Delegate:obj
|
||||
[
|
||||
if ($nil == obj)
|
||||
[ theDelegate := $nil. ];
|
||||
[ theDelegate := obj. ].
|
||||
]
|
||||
|
||||
operate(Object operable)
|
||||
= "default implementation".
|
||||
|
||||
operate(IOperable operable)
|
||||
= operable operate.
|
||||
|
||||
operate
|
||||
<= operate(theDelegate).
|
||||
}
|
||||
|
||||
program =
|
||||
[
|
||||
var delegator := Delegator new.
|
||||
|
||||
(nil, Object new, Operable new) forEach(:o)
|
||||
[
|
||||
delegator Delegate := o.
|
||||
|
||||
console printLine(delegator operate).
|
||||
].
|
||||
].
|
||||
53
Task/Delegates/Elena/delegates-2.elena
Normal file
53
Task/Delegates/Elena/delegates-2.elena
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
import extensions.
|
||||
import system'routines.
|
||||
|
||||
class Operable
|
||||
{
|
||||
operable = $self.
|
||||
|
||||
operate
|
||||
= "delegate implementation".
|
||||
}
|
||||
|
||||
class Delegator
|
||||
{
|
||||
object theDelegate.
|
||||
|
||||
constructor new
|
||||
[
|
||||
theDelegate := nil.
|
||||
]
|
||||
|
||||
set Delegate:obj
|
||||
[
|
||||
if ($nil == obj)
|
||||
[ theDelegate := $nil. ];
|
||||
[ theDelegate := obj. ].
|
||||
]
|
||||
|
||||
operate
|
||||
[
|
||||
// if the object does not support "get&operable" message - returns nil
|
||||
var anOperable := theDelegate operable \ back:$nil.
|
||||
|
||||
if ($nil == anOperable)
|
||||
[
|
||||
^ "default implementation".
|
||||
];
|
||||
[
|
||||
^ anOperable operate.
|
||||
].
|
||||
]
|
||||
}
|
||||
|
||||
program =
|
||||
[
|
||||
var delegator := Delegator new.
|
||||
|
||||
(nil, Object new, Operable new) forEach(:o)
|
||||
[
|
||||
delegator Delegate := o.
|
||||
|
||||
console printLine(delegator operate).
|
||||
].
|
||||
].
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
#import system.
|
||||
#import system'routines.
|
||||
|
||||
#class Operable
|
||||
{
|
||||
#method cast:verb &to:target
|
||||
= target::verb eval &delegate:$self.
|
||||
|
||||
#method operate
|
||||
= "delegate implementation".
|
||||
}
|
||||
|
||||
#class Delegator
|
||||
{
|
||||
#field theDelegate.
|
||||
|
||||
#constructor new
|
||||
[
|
||||
theDelegate := nil.
|
||||
]
|
||||
|
||||
#method set &Delegate:obj
|
||||
[
|
||||
($nil == obj)
|
||||
? [ theDelegate := nil. ]
|
||||
! [ theDelegate := obj. ].
|
||||
]
|
||||
|
||||
#method operate
|
||||
= theDelegate cast:%eval &to:
|
||||
{
|
||||
delegate : o = o operate.
|
||||
|
||||
! : o = "default implementation".
|
||||
}.
|
||||
}
|
||||
|
||||
#symbol program =
|
||||
[
|
||||
#var delegator := Delegator new.
|
||||
|
||||
($nil, Object new, Operable new) run &each: o
|
||||
[
|
||||
delegator set &Delegate:o.
|
||||
|
||||
console writeLine:(delegator operate).
|
||||
].
|
||||
].
|
||||
Loading…
Add table
Add a link
Reference in a new issue