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.