Forth bound methods

You can think of CREATE DOES> as the creator of an object with a single bound method.

: counter
    create 0 ,
    does>  1 over +! @ ;
counter apple

Here counter is the constructor word - it constructs a zero-based counter - and apple is its method. More exactly, apple is a bound method, it is tied to the object itself, so does not need an object parameter:

apple . apple . apple .
0 1 2 ok

But what about multiple methods on the object? Use multiple CREATE DOES> words, one for each method. All the methods need to share the same object, so an extra level of indirection is necessary.

: up   create dup , does> @ 1 over +! @ ;
: down create dup , does> @ -1 over +! @ ;
: counter
    here 0 ,
    up down
    drop
;
counter +banana -banana

Or even:

: method>
    postpone create postpone dup postpone ,
    postpone does> postpone @
; immediate

: up    method> 1 over +! @ ;
: down  method> -1 over +! @ ;
: counter
    here 0 ,
    up down
    drop
;

counter +banana -banana