La particularité de ces objets est d'être uniquement manipulables par des objets METHODE. L'opérateur OBJET est chargé de créer un objet de type OBJET. Celui-ci est un collecteur, à la manière d'une table. Il faut préciser la classe de l'objet. Cette classe est un constructeur c'est-à-dire une méthode. C'est le premier accès à l'objet. Il est donc nécessaire de définir dans ce constructeur les entrées et les méthodes caractérisant la classe. Nous vous conseillons de lire l'exemple suivant dans lequel les listings produits, encadrés par de "******", ont été introduits juste après la commande de liste e (voir le fichier objet.dgibi qui est fournit avec Castem2000).
* * creation of object of class "complex number". * * define first the constructor DEBMETH COMPLEX; %REA=FAUX; %IMA=FAUX; %METHODE SET_IMA IMAG; %METHODE SET_REA REAL; %METHODE GET_IMA GIMAG; %METHODE GET_REA GREAL; FINMETH; * define standard methods of the class DEBMETH IMAG I*'FLOTTANT'; %IMA = I; 'SI' ('EGA' ('TYPE' %REA ) 'FLOTTANT'); %METHODE MODULE MODUL; 'FINSI'; %OUBLIER SET_IMA; FINMETH; DEBMETH REAL RR*'FLOTTANT'; %REA = RR; 'SI' ('EGA' ('TYPE' %IMA ) 'FLOTTANT'); %METHODE MODULE MODUL; 'FINSI'; %OUBLIER SET_REA; FINMETH; DEBMETH GIMAG ; II = %IMA; 'SI' ( 'NEG' ( 'TYPE' II) 'FLOTTANT'); 'MESSAGE' 'The imaginary value is not yet defined'; 'ERREUR' 19; 'FINSI'; FINMETH II; DEBMETH GREAL; RR = %REA; 'SI' ( 'NEG' ( 'TYPE' RR) 'FLOTTANT'); 'MESSAGE' 'The real value is not yet defined'; 'ERREUR' 19; 'FINSI'; FINMETH RR; DEBMETH MODUL; * It is not neccessary to check that real and imaginary exist AA= %REA* %REA + ( %IMA*%IMA) ** 0.5; FINMETH AA; * * creation of a COMPLEX OBJET and use * COM = OBJET COMPLEX; list com; ******************** start of listing ************************ Objet de type OBJET de pointeur 25089 Indice Objet Type Valeur Type Valeur MOT CLASSE MOT COMPLEX METHODE METHODE MOT METHODE METHODE HERITE MOT HERI METHODE OUBLIER MOT ANNU MOT REA LOGIQUE FAUX MOT IMA LOGIQUE FAUX METHODE SET_IMA PROCEDUR 294 METHODE SET_REA PROCEDUR 295 METHODE GET_IMA PROCEDUR 296 METHODE GET_REA PROCEDUR 297 ********************* end of listing ************************** COM%SET_REA 2.5; UU=COM%GET_REA; MESS ' real value ' uu; ******************** start of listing ************************ real value 2.5000 ********************* end of listing ************************** COM%SET_IMA 3.5; list com; ******************** start of listing ************************* Objet de type OBJET de pointeur 25089 Indice Objet Type Valeur Type Valeur MOT CLASSE MOT COMPLEX METHODE METHODE MOT METHODE METHODE HERITE MOT HERI METHODE OUBLIER MOT ANNU MOT REA FLOTTANT .25000000E+01 MOT IMA FLOTTANT .35000000E+01 METHODE GET_IMA PROCEDUR 296 METHODE GET_REA PROCEDUR 297 METHODE MODULE PROCEDUR 298 ********************* end of listing ************************** ZZ = COM%MODULE ; list ZZ; ******************** start of listing ************************ Réel valant: 4.3012 ********************* end of listing ************************** * * set a new method MULTIplication * DEBMETH MULT RR; 'SI' (( 'EGA' ('TYPE' RR ) 'ENTIER ') 'OU' ( 'EGA' ('TYPE' RR ) 'FLOTTANT')); %REA=%REA*RR; %IMA=%IMA*RR; 'SINON'; 'SI' ( 'EGA' ('TYPE' RR ) 'OBJET ') ; RE = %REA*(RR%GET_REA) -( %IMA * (RR%GET_IMA)); IM = %REA*(RR%GET_IMA) +(%IMA *(RR%GET_REA)); %REA=RE; %IMA=IM; 'SINON'; MESS ' Multiplication impossible'; ERREUR 19; 'FINSI'; 'FINSI'; FINMETH; * * add the new method to the object COM * COM%METHODE MULTI MULT; list com; ******************** start of listing ************************ Objet de type OBJET de pointeur 25089 Indice Objet Type Valeur Type Valeur MOT CLASSE MOT COMPLEX METHODE METHODE MOT METHODE METHODE HERITE MOT HERI METHODE OUBLIER MOT ANNU MOT REA FLOTTANT .25000000E+01 MOT IMA FLOTTANT .35000000E+01 METHODE GET_IMA PROCEDUR 296 METHODE GET_REA PROCEDUR 297 METHODE MODULE PROCEDUR 298 METHODE MULTI PROCEDUR 299 ********************* end of listing ************************** COM%MULTI 3.5; list com; ******************** start of listing ************************ Objet de type OBJET de pointeur 25089 Indice Objet Type Valeur Type Valeur MOT CLASSE MOT COMPLEX METHODE METHODE MOT METHODE METHODE HERITE MOT HERI METHODE OUBLIER MOT ANNU MOT REA FLOTTANT .87500000E+01 MOT IMA FLOTTANT .12250000E+02 METHODE GET_IMA PROCEDUR 296 METHODE GET_REA PROCEDUR 297 METHODE MODULE PROCEDUR 298 METHODE MULTI PROCEDUR 299 ********************* end of listing ************************** aa = OBJET complex; aa%set_ima 2; aa%set_rea 2; com%multi aa; list com; ******************** start of listing ************************ Objet de type OBJET de pointeur 25089 Indice Objet Type Valeur Type Valeur MOT CLASSE MOT COMPLEX METHODE METHODE MOT METHODE METHODE HERITE MOT HERI METHODE OUBLIER MOT ANNU MOT REA FLOTTANT -.70000000E+01 MOT IMA FLOTTANT .42000000E+02 METHODE GET_IMA PROCEDUR 296 METHODE GET_REA PROCEDUR 297 METHODE MODULE PROCEDUR 298 METHODE MULTI PROCEDUR 299 ********************* end of listing ************************** yy = com%GET_REA; xx = COM%GET_IMA; * aa will get the MULTI method by * inherits between objects aa%HERITE COM; list aa; ******************** start of listing ************************ Objet de type OBJET de pointeur 25259 Indice Objet Type Valeur Type Valeur MOT CLASSE MOT COMPLEX METHODE METHODE MOT METHODE METHODE HERITE MOT HERI METHODE OUBLIER MOT ANNU MOT REA FLOTTANT .20000000E+01 MOT IMA FLOTTANT .20000000E+01 METHODE GET_IMA PROCEDUR 296 METHODE GET_REA PROCEDUR 297 METHODE MODULE PROCEDUR 298 METHODE MULTI PROCEDUR 299 ********************* end of listing ************************** 'SI' (( ABS( YY + 7.00)) > 1.e-5); ERREUR 5;FINSI; 'SI' (( ABS( XX - 42.0)) > 1.e-5) ; erreur 5; finsi; FIN;A l'intérieur d'une méthode on applique une autre méthode sur l'objet par :
% METH1 ARG1 ARG2 .. où METH1 est le nom de la méthode tandis qu'à l'extérieur d'une méthode l'utilisateur peut appliquer une méthode sur un objet par :
NOMOBJ%METH1 ARG1 ARG2 .. L'emploi des méthodes est encore à découvrir, elles permettent sûrement un contrôle syntaxique beaucoup plus précis que les procédures. La réécriture de certaines procédures de Castem2000 en METHODES et OBJET est envisagée.