--> CE SONT DES CLASSES PRÉDÉFINIES
HÉRITAGE :
= DÉFINIR UNE NOUVELLE CLASSE,
QUI "HÉRITE" DE LA PRÉCÉDENTE
TOUTES LES CLASSES SONT ORGANISÉES EN "HIÉRARCHIE"
==> CHAQUE NOUVELLE CLASSE HÉRITE :
LES PARAMÈTRES DONT UNE NOUVELLE CLASSE HÉRITE SONT INITIALISÉS PAR (SUPER-INIT ...)
(DEFINE TOTO%
(CLASS OBJECT% ()
(PUBLIC (X 0))
(SEQUENCE (SUPER-INIT))))
--> DÉFINIT UNE CLASSE "TOTO%" (DEFINE TOTO1 (MAKE-OBJECT TOTO%))--> CRÉE UN OBJET TOTO1 DE LA CLASSE TOTO%
(IVAR <OBJET> <VARIABLE>)
--> DONNE LA VALEUR D'UNE VARIABLE DANS UN OBJET :
(IVAR TOTO1 X) --> 0
"MÉTHODE" :
(DEFINE TITI%
(CLASS OBJECT% ()
(PUBLIC
(Y +))
(SEQUENCE (SUPER-INIT))))
(DEFINE TITI1 (MAKE-OBJECT TITI%))
(SEND <OBJET> <METHODE> <VAL1> <VAL1> . . .) --> APPLIQUE UNE METHODE D'UN OBJET À DES VALEURS :
(SEND TITI1 Y 1 2) --> 3
(SEND TITI1 Y 1 2 3) --> 6
TOTO1
PROBLÈME : EST-CE QU'ON PEUT MODIFIER LA VALEUR DE X DANS TOTO1 ?
--> IL FAUT UNE FONCTION DE MODIFICATION :
(DEFINE TATA%
(CLASS OBJECT% ()
(PUBLIC
(X 0)
(MODIF-X (LAMBDA (VAL) (SET! X VAL))))
(SEQUENCE (SUPER-INIT))))
(DEFINE TATA1 (MAKE-OBJECT TATA%))
(IVAR TATA1 X) --> 0 (SEND TATA1 MODIF-X 3)
--> MODIFIE LA VALEUR DE X DANS TATA1
(= APPLIQUE MODIF-X)
(IVAR TATA1 X) --> 3
EXEMPLE :
(DEFINE MOT%
(CLASS TEXT-FIELD% ()
(PUBLIC
(MOT (NTH (RANDOM (LENGTH L)) L))
(SET-MOT (LAMBDA (Z) (SET! MOT Z))))
(SEQUENCE (SUPER-INIT "le mot mysterieux" V VOID))))
PROBLÈME POSÉ PAR ALEXANDRE-LE-GRAND :
-->
(DEFINE OEUF% (CLASS OBJECT% ()
(PUBLIC
(POIDS 100)
(MODIF-POIDS (LAMBDA (P) (SET! POIDS P)))
(MARQUE " ")
(MODIF-MARQUE
(LAMBDA (M) (IF (OR (EQUAL? MARQUE " ")
(EQUAL? MARQUE M))
(SET! MARQUE M)
(SET! MARQUE "egal")))))
(SEQUENCE (SUPER-INIT))))
(DEFINE OEUF1 (MAKE-OBJECT OEUF%))
(DEFINE OEUF2 (MAKE-OBJECT OEUF%))
(DEFINE OEUF3 (MAKE-OBJECT OEUF%))
(DEFINE (PESEE X Y Z)
(LET ((PX (IVAR X POIDS)) (PY (IVAR Y POIDS)))
(COND ((= PX PY)
(SEND X MODIF-MARQUE "egal")
(SEND Y MODIF-MARQUE "egal"))
(ELSE (SEND X MODIF-MARQUE
(IF (> PX PY) "plus" "moins"))
(SEND Y MODIF-MARQUE
(IF (> PX PY) "moins" "plus"))
(SEND Z MODIF-MARQUE "egal"))))
(RAFFRAICHIR-FENETRE))
(RAFFRAICHIR-FENETRE)
(DEFINE BOUTON-PESEE1
(MAKE-OBJECT BUTTON%
"PREMIERE PESEE : Oeuf1 + Oeuf2"
PANNEAU
(LAMBDA (OBJ EVEN) (PESEE OEUF1 OEUF2 OEUF3))))
(DEFINE BOUTON-PESEE2
(MAKE-OBJECT BUTTON%
"DEUXIEME PESEE : Oeuf1 + Oeuf3"
PANNEAU
(LAMBDA (OBJ EVEN) (PESEE OEUF1 OEUF3 OEUF2))))
