4 Parameterization and Parametric Polymorphism
abstract object
collection[T];
abstract object
list[T]isa
collection[T];signature
do[T](list[T], &(T):void):void;concrete representation
nil[T]isa
list[T];template representation
cons[T]isa
list[T];field
head[T](@:cons[T]):T;field
tail[T](@:cons[T]):list[T] := nil[T];method
prepend[T](h:T, t:list[T]):list[T] {concrete object
isa
cons[T] { head := h, tail := t } }abstract
object
table[Key,Value]isa
collection[Value];template
object
array[T]isa
table[int,T];method
new_array[T](size:int, initial_value:T):array[T] {concrete object
isa
array[T] { size := size, initial_value := initial_value } }
type
printable_array[T <= printable]subtypes
array[T], printable;
Generated with Harlequin WebMaker