The design of S combines three programming paradigms: object-oriented programming, functional languages, and interfaces between different systems.
The next version of S will extend its object-oriented features
by allowing {\em methods} --
functions that automatically replace the definition of a generic
function for a particular class of objects.

Users can expect generic functions to adapt to new classes of data without
any action on the users' part.
Designers of new classes of
S objects can 
provide this adaptation without rewriting the generic functions.
New classes can inherit methods from one or more existing classes.
The methods themselves can make use of the class hierarchy; for example, by invoking
the next inherited method.

Extensions of the method mechanism match appropriately the arguments to 
operators,
allow single methods corresponding to groups of functions,
and handle actions in S that are not quite functions (e.g., 
assignment and replacement).

The method extension to S is a useful tool for software designers.
The combination of paradigms also gives opportunities for an unusual,
and rather powerful, use of object-oriented programming techniques.

I describe here the background, how to design
methods and classes, and
the general approach to the implementation.
