fork(1) download
  1. Object subclass: Machine [
  2. wakeUp [ ^self ]
  3. sleep [ ^self ]
  4. hi [ self subclassResponsibility ]
  5. state [ ^self class displayNl ]
  6. Other := nil.
  7. ]
  8.  
  9. Machine class extend [
  10. new [ ^WakeUp basicNew ]
  11. ]
  12.  
  13. Machine subclass: WakeUp [
  14. hi [ 'hello' displayNl ]
  15. ]
  16.  
  17. Machine subclass: Sleep [
  18. hi [ 'zzz...' displayNl ]
  19. ]
  20.  
  21. Machine extend [ Other := Sleep basicNew ]
  22.  
  23. WakeUp extend [
  24. sleep [ ^self become: Other ]
  25. ]
  26.  
  27. Sleep extend [ wakeUp [
  28. ^self become: Other ]
  29. ]
  30.  
  31. | machine |
  32. machine := Machine new.
  33. machine state. "=> WakeUp "
  34. machine hi. "=> hello "
  35. machine sleep; state. "=> Sleep "
  36. machine hi. "=> zzz... "
  37. machine wakeUp; state. "=> WakeUp "
  38. machine wakeUp; state. "=> WakeUp "
  39. machine sleep; state. "=> Sleep "
  40. machine sleep; state. "=> Sleep "
Success #stdin #stdout 0s 168192KB
stdin
Standard input is empty
stdout
WakeUp
hello
Sleep
zzz...
WakeUp
WakeUp
Sleep
Sleep