Héritage multiple

Une classe CLOS peut hériter de plusieurs autres classes. On parle d'héritage multiple. L'héritage multiple donne la possibilité de créer un objet instance de plusieurs classes non apparentées par héritage. Cette possibilité simplifie considérablement les programmes.

En particulier, l'héritage multiple permet de programmer avec des classes mixins. Une classe mixin est une classe qui n'est pas censée être directement instanciée. Sa seule raison d'être est d'être héritée par d'autres classes afin de fournir un comportement (créneaux, méthodes) particulier. Exemple :

(defclass sheet-single-child-mixin ()
  ((children :initform nil
             :initarg :child
             :accessor sheet-children)))

Cet exemple montre une classe sheet-single-child-mixin contenant un créneau children. Cette classe est censée être héritée par d'autres classes, sous-classes de sheet, ayant un seul enfant. Voici un exemple de méthode dont l'un des paramètres est spécialisé par cette classe :

(defmethod sheet-adopt-child ((sheet sheet-single-child-mixin)
                              (child sheet-parent-mixin))
  (setf (sheet-children sheet) (list child)))



Irene DURAND
2011-10-14