(defclass abstract-class ( standard-class ) (()) ;; pas d'attributs (:metaclass standard-class)) (defmethod make-instance ((c abstract-class) &rest args) ;;signaler une exception (error "~S is an abstract class, cannot be instantiated." c) ) (defgeneric isAbstract (c)) (defmethod isAbstract ((c abstract-class)) t) (defmethod isAbstract ((c standard-class)) nil) ;; une classe abstraite ne peut pas être sous-classe d'une classe non abstraite (defmethod validate-superclass ((cl abstract-class) (sup standard-class)) ()) ;; une classe abstraite peut être sous-classe d'une classe abstraite (defmethod validate-superclass ((cl abstract-class) (sup abstract-class)) t) ;; une classe concrète peut être sous-classe d'une classe abstraite (defmethod validate-superclass ((cl standard-class) (sup abstract-class)) t) ;; une classe abstraite (defclass animal () (()) ;; pas d'attributs (:metaclass abstract-class)) ;; une classe concrète (defclass chien (animal) (()) ;; pas d'attributs ) (make-instance 'chien)