next up previous contents
Next: Bibliographie Up: les OBJETS du Previous: Les METHODES

Les objets de type OBJET

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.



mer 20 jan 14:43:49 NFT 1999