Pooh program example 08-object-prototype-point.p
# 0bject oriented programming with prototypes: point class
sub make_point( x, y )
return { 'x_pos' : x,
'y_pos' : y,
'move' : sub ( dx, dy )
this . x_pos = this . x_pos + dx
this . y_pos = this . y_pos + dy
return this
end,
'print' : sub ( )
# println( ~msg 'point x-pos: [ this . x_pos ] y-pos: [ this . y_pos ] ' )
println( ~msg 'point x-pos: ' .. this . x_pos .. ' y-pos: ' .. this . y_pos )
end,
'get_x' : sub ( )
return this . x_pos
end,
'get_y' : sub ( )
return this . y_pos
end
}
end
pt = make_point( ~x 10 ~y 10 )
pt . print ()
pt . move ( ~dx 1 ~dy -1 )
pt . print ()
println( ~msg 'point-accessors x = [ pt . get_x () ] y = [ pt . get_y() ]' )
point x-pos: 10 y-pos: 10 point x-pos: 11 y-pos: 9 point-accessors x = 11 y = 9Trace output for 08-object-prototype-point.p
032|... = make_point( ~x 10 ~y 10 )... 005| return { 'x_pos' : x:10 , 'y_pos' : y:10 , 'move' : sub (~dx , ~dy) , 'print' : sub () , 'get_x' : sub () , 'get_y' : sub () } 032|pt = make_point( ~x 10 ~y 10 ):{ 'move' : sub , 'get_y' : sub , 'x_pos' : -> 10, 'print' : sub , 'get_x' : sub , 'y_pos' : -> 10 } 034|pt{'print'}:sub ( )... 018| println( ~msg 'point x-pos: ' .. this{'x_pos'}:10 .. ' y-pos: ' .. this{'y_pos'}:10 )... 036|pt{'move'}:sub ( ~dx 1 ~dy - 1 )... 010| this{'x_pos'}:11 = (this{'x_pos'}:10 + dx:1):11 011| this{'y_pos'}:9 = (this{'y_pos'}:10 + dy:-1):9 013| return this:{ 'move' : sub (~dx , ~dy), 'get_y' : sub (), 'x_pos' : -> 11, 'print' : sub (), 'get_x' : sub (), 'y_pos' : -> 9 } 036|pt{'move'}:sub ( ~dx 1 ~dy - 1 ):-> { 'move' : sub , 'get_y' : sub , 'x_pos' : -> 11, 'print' : sub , 'get_x' : sub , 'y_pos' : -> 9 } 038|pt{'print'}:sub ( )... 018| println( ~msg 'point x-pos: ' .. this{'x_pos'}:11 .. ' y-pos: ' .. this{'y_pos'}:9 )... 040|println( ~msg 'point-accessors x = ' .. pt{'get_x'}:sub ( )... 022| return this{'x_pos'}:11 040|println( ~msg 'point-accessors x = ' .. pt{'get_x'}:sub ( ):-> 11 .. ' y = ' .. pt{'get_y'}:sub ( )... 026| return this{'y_pos'}:9 040|println( ~msg 'point-accessors x = ' .. pt{'get_x'}:sub ( ):-> 11 .. ' y = ' .. pt{'get_y'}:sub ( ):-> 9 .. '' )...