;; ;; Objects comme representation explicite de la connaissance ;; (defclass PERSON (is-a USER) (role concrete) (pattern-match reactive) (slot nom (default "John Doe") (create-accessor read-write)) (slot age (create-accessor read-write)) (multislot address (create-accessor read-write)) ) (defclass ENSIMAG (is-a PERSON) (role concrete) (slot year (create-accessor read-write)) (slot OPTION (default MD) (create-accessor read-write)) ) (describe-class PERSON) (make-instance [Jim] of PERSON (nom "jim") (age 18)) (send [Jim] print) (send [Jim] get-age) (browse-classes) (defclass animal(is-a USER)) (defclass vertebre(is-a animal)) (defclass mammifere (is-a vertebre)) (defclass chien (is-a mammiferee)) (defclass berger-allemand (is-a chien)) ;; ;; Message Handlers ;; (clear) (defclass THING (is-a USER) (role concrete) (slot NAME (create-accessor read-write) (default A)) ) (defmessage-handler THING ask-name () (return ?self:NAME) ) (defmessage-handler THING ask-name after () (printout t "This is ask-name type after" crlf) (return "something else") ) (make-instance [A] of THING) (send [A] get-NAME) (send [A] ask-name) (defclass THING (is-a USER) (role concrete) (slot NAME (default A)) ) (defmessage-handler THING get-name after () (printout t "Quack" crlf) ) (defmessage-handler THING get-name primary () (printout t "primary" crlf) (return ?self:NAME) ) (defclass THING (is-a USER) (role concrete) (slot NAME (create-accessor read-write) (default A)) (slot COUNT (create-accessor read-write) (default 0)) ) (defmessage-handler THING get-NAME after () (printout t "Quack" crlf) ) (defmessage-handler THING get-NAME before () (bind ?self:COUNT (+ ?self:COUNT 1)) (printout t ?self:NAME " read "?self:COUNT " times." crlf) )