26 |
@ifinfo |
@ifinfo |
27 |
This file documents GOOPS, an object oriented extension for Guile. |
This file documents GOOPS, an object oriented extension for Guile. |
28 |
|
|
29 |
Copyright (C) 1999, 2000, 2001 Free Software Foundation |
Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation |
30 |
|
|
31 |
Permission is granted to make and distribute verbatim copies of |
Permission is granted to make and distribute verbatim copies of |
32 |
this manual provided the copyright notice and this permission notice |
this manual provided the copyright notice and this permission notice |
2651 |
with the default metaclass @code{<class>}, has the following internal |
with the default metaclass @code{<class>}, has the following internal |
2652 |
protocol. |
protocol. |
2653 |
|
|
|
[ *fixme* I'm not sure that I understand this sufficiently to explain |
|
|
it. Also, the internals of the default class redefinition method are |
|
|
extremely implementation-specific, and I'm not sure that there is that |
|
|
much point trying to describe the internal protocol such that it could |
|
|
be customized without going to look at the source code. ] |
|
|
|
|
2654 |
@code{class-redefinition @var{(old <class>)} @var{(new <class>)}} |
@code{class-redefinition @var{(old <class>)} @var{(new <class>)}} |
2655 |
(method) |
(method) |
2656 |
|
|
2665 |
@code{update-direct-subclass! @var{subclass} @var{old} @var{new}} (generic) |
@code{update-direct-subclass! @var{subclass} @var{old} @var{new}} (generic) |
2666 |
@end itemize |
@end itemize |
2667 |
|
|
2668 |
|
This protocol cleans up things that the definition of the old class |
2669 |
|
once changed and modifies things to work with the new class. |
2670 |
|
|
2671 |
|
The default @code{remove-class-accessors!} method removes the |
2672 |
|
accessor methods of the old class from all classes which they |
2673 |
|
specialize. |
2674 |
|
|
2675 |
|
The default @code{update-direct-method!} method substitutes the new |
2676 |
|
class for the old in all methods specialized to the old class. |
2677 |
|
|
2678 |
The default @code{update-direct-subclass!} method invokes |
The default @code{update-direct-subclass!} method invokes |
2679 |
@code{class-redefinition} recursively to handle the redefinition of the |
@code{class-redefinition} recursively to handle the redefinition of |
2680 |
subclass. |
subclasses. |
2681 |
|
|
2682 |
When a class is redefined, any existing instance of the redefined class |
When a class is redefined, any existing instance of the redefined class |
2683 |
will be modified for the new class definition before the next time that |
will be modified for the new class definition before the next time that |
2684 |
any of the instance's slot is referenced or set. GOOPS modifies each |
any of the instance's slot is referenced or set. GOOPS modifies each |
2685 |
instance by calling the generic function @code{change-class}. [ *fixme* |
instance by calling the generic function @code{change-class}. |
|
Actually it sometimes calls @code{change-class} and sometimes |
|
|
@code{change-object-class}, and I don't understand why. ] |
|
2686 |
|
|
2687 |
The default @code{change-class} method copies slot values from the old |
The default @code{change-class} method copies slot values from the old |
2688 |
to the modified instance, and initializes new slots, as described in |
to the modified instance, and initializes new slots, as described in |