nx::Class create AbstractQueue { + + :public method enqueue {item} {error "not implemented"} + :public method dequeue {} {error "not implemented"} + + :public object method create {args} { + error "Cannot instantiate abstract class [self]" + } +}
Index: doc/example-scripts/rosetta-abstract-type.html =================================================================== diff -u -r93bb0947d582f274afb1cdbc885909d55e100b36 -r24cb8f4bffd49c9375c1c64aa0610933b62511bb --- doc/example-scripts/rosetta-abstract-type.html (.../rosetta-abstract-type.html) (revision 93bb0947d582f274afb1cdbc885909d55e100b36) +++ doc/example-scripts/rosetta-abstract-type.html (.../rosetta-abstract-type.html) (revision 24cb8f4bffd49c9375c1c64aa0610933b62511bb) @@ -3,7 +3,7 @@
- +package req nx
Define a class AbstractQueue
nx::Class create AbstractQueue { + + :public method enqueue {item} {error "not implemented"} + :public method dequeue {} {error "not implemented"} + + :public object method create {args} { + error "Cannot instantiate abstract class [self]" + } +}
Define a concrete queue (named ListQueue) based on the Abstract Queue
nx::Class create ListQueue -superclass AbstractQueue { + + :variable list {} + + :public method enqueue {item} { + lappend :list $item + } + + :public method dequeue {} { + set item [lindex ${:list} 0] + set :list [lrange ${:list} 1 end] + return $item + } +}
Trying to create an instance of the AbstraceQueue returns an error message:
% AbstractQueue new +Cannot instantiate abstract class ::AbstractQueue
Create an instance of the concrete queue:
% set q [ListQueue new]
Enqueue and dequeue items
% $q enqueue 100 +100 +% $q enqueue 101 +100 101 +% $q dequeue +100