\Header{Classes}{Class Definitions}
\alias{\_\_ClassMetaData}{Classes}
\keyword{programming}{Classes}
\keyword{classes}{Classes}
\keyword{methods}{Classes}
\begin{Description}\relax
Class definitions are objects that contain the formal definition of a
class of R objects.\end{Description}
\begin{Details}\relax
When a class is defined, an object is stored that contains the
information about that class, including:

\describe{
\item[slots] Each slot is a component object.  Like elements of a list
these may be extracted (by name) and set.  However, they differ
from list components in important ways.

All the objects from a particular class have the same set of slot
names; specifically, the slot names that are contained in the
class definition.  Each slot in each object always has the same
class; again, this is defined by the overall class definition.

Classes don't need to have any slots, and many useful classes do
not.  These objects usually extend other, simple objects, such as
numeric or character vectors.  Finally, classes can have no data
at all---these are known as \emph{virtual} classes and are in fact
very important programming tools.  They are used to group together
ordinary classes that want to share some programming behavior,
without necessarily restricting how the behavior is implemented.

\item[extends] The names of the classes that this class extends.  A
class \code{Fancy}, say, extends a class \code{Simple} if an
object from the \code{Fancy} class has all the capabilities of
the \code{Simple} class (and probably some more as well).  In
particular, and very usefully, any method defined to work for a
\code{Simple} object can be applied to a \code{Fancy} object as
well.

In other programming languages, this relationship is sometimes
expressed by saying that \code{Simple} is a superclass of
\code{Fancy}, or that \code{Fancy} is a subclass of
\code{Simple}.

The actual class definition object contains the names of all the
classes this class extends.  But those classes can themselves
extend other classes also, so the complete extension can only be
known by obtaining all those class definitions.

Class extension is usually defined when the class itself is
defined, by including the names of superclasses as unnamed
elements in the representation argument to \code{\Link{setClass}}.

An object from a given class will then have all the slots
defined for its own class \emph{and} all the slots defined for
its superclasses as well.

Note that \code{extends} relations can be defined in other ways
as well, by using the \code{\Link{setIs}} function.

\item[prototype] Each class definition contains a prototype object
from the class.  This must have all the slots, if any, defined by the
class definition.

The prototype most commonly just consists of the prototypes of
all its slots.  But that need not be the case:  the definition
of the class can specify any valid object for any of the
slots.

There are a number of ``basic'' classes, corresponding to the
ordinary kinds of data occurring in R.  For example,
\code{"numeric"} is a class corresponding to numeric vectors.
These classes are predefined and can then be used as slots or
as superclasses for any other class definitions.  The
prototypes for the vector classes are vectors of length 0 of
the corresponding type.

There are also a few basic virtual classes, the most important
being \code{"vector"}, grouping together all the vector
classes; and \code{"language"}, grouping together all the
types of objects making up the R language.

}\end{Details}
\begin{Author}\relax
John Chambers\end{Author}
\begin{References}\relax
The web page \url{http://www.omegahat.org/RSMethods/index.html} is the primary documentation.

The functions in this package emulate the facility for classes and methods described in
\emph{Programming with Data}, (John M. Chambers, Springer, 1998).  See this book
for further details and examples.\end{References}
\begin{SeeAlso}\relax
\code{\Link{Methods}}, \code{\Link{setClass}}, \code{\Link{is}} \code{\Link{as}} \code{\Link{new}} \code{\Link{slot}}\end{SeeAlso}

