Common lisp object system specification

IntroductionThe Common Lisp Object System is an object-oriented extension toCommon Lisp as defined in Common Lisp: The Language, by GuyL. Steele Jr. It is based on generic functions, multipleinheritance, declarative method combination, and a meta-objectprotocol. The first two chapters of this specification present adescription of the standard Programmer Interface for the CommonLisp Object System. The first chapter contains a description of theconcepts of the Common Lisp Object System, and the second containsa description of the functions and macros in the Common Lisp ObjectSystem Programmer Interface. The chapter "The Common Lisp ObjectSystem Meta-Object Protocol" describes how the Common Lisp ObjectSystem can be customized. The fundamental objects of the Common Lisp Object System areclasses, instances, generic functions, and methods. A class object determines the structure and behavior of aset of other objects, which are called its instances. EveryCommon Lisp object is an instance of a class. The class ofan object determines the set of operations that can be performed onthe object. A generic function is a function whose behavior dependson the classes or identities of the arguments supplied to it. Ageneric function object contains a set of methods, a lambda-list, amethod combination type, and other information. The methodsdefine the class-specific behavior and operations of the genericfunction; a method is said to specialize a generic function.When invoked, a generic function executes a subset of its methodsbased on the classes of its arguments. A generic function can be used in the same ways that an ordinaryfunction can be used in Common Lisp; in particular, a genericfunction can be used as an argument to funcall andapply and can be given a global or a local name. A method is an object that contains a method function, asequence of parameter speclalizers that specify when thegiven method is applicable, and a sequence of qualifiersthat is used by the method combination facility todistinguish among methods. Each required formal parameter of eachmethod has an associated parameter specializer, and the method willbe invoked only on arguments that satisfy its parameterspecializers. The method combination facility controls the selection ofmethods, the order in which they are run, and the values that arereturned by the generic function. The Common Lisp Object Systemoffers a default method combination type and provides a facilityfor declaring new types of method combination.