(a) Identify the inputs and outputs for a given situation.
(b) Determine the preconditions for devising a solution
to a problem.
(c) The nature, benefits and drawbacks of caching.
(d) The need for reusable program components.