In non OO programming paradigms, an algorithm on lists is expressed as a function or procedure that takes in a list as parameter. In our OO formulation, an alogrithm on lists is an interface that has two methods, each takes in a list as a parameter:
One need not (and should not) check for the type of a list before applying an algorithm to it. THERE IS NO "if"!
MTList
, the empty list
NEList
, a non-empty list
public abstract Object emptyCase(IMTList host, Object inp)
MTList
, the empty list. Since
IEmptyList
has only one method, execute()
,
there is not much the host list can do here. So the code for the empty
case usually involves:inp
, and perhaps
host.execute(..., ...)
.
IMTList
that is executing this algorithm.public abstract Object nonEmptyCase(INEList host, Object inp)
NEList
, a non-empty list. The host list now has
a first and a rest. So the code here usually involves what
host.getFirst()
and host.getRest()
can do to
accomplish the task at hand.host.getFirst()
is simply a data Object
that the host list holds. It is problem-specific, and thus what it can
do depends on the problem the current algorithm is trying to solve.
host.getRest()
in contrast is an IList
!
What can an IList
do? execute
an alogrithm
IListAlgo
with some input. What IListAlgo
can
that be? The current algorithm that is being executed is as good a
candidate as any other IListAlgo
. In Java, we use the key
word this
to reference the current receiver of the
method call. Having the rest of host (recursively) execute the current
algorithm is expressed in Java as:
host.getRest().execute(this, ...)
.To summarize, the code for the non-empty case usually involves:
host.getFirst()
, and the recursive call
host.getRest().execute(this, something involving inp)
.
INEList
that is executing this algorithm