* fichier : objet.dgibi ************************************************************************ * Section : Langage Objets ************************************************************************ * * 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'; FINMETH; DEBMETH REAL RR*'FLOTTANT'; %REA = RR; 'SI' ('EGA' ('TYPE' %IMA ) 'FLOTTANT'); %METHODE MODULE MODUL; 'FINSI'; 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; COM%SET_REA 2.5; UU=COM%GET_REA; MESS ' real value ' uu; COM%SET_IMA 3.5; list com; ZZ = COM%MODULE ; list ZZ; * * 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; COM%MULTI 3.5; list com; aa = OBJET complex; aa%set_ima 2; aa%set_rea 2; com%multi aa; list com; yy = com%GET_REA; xx = COM%GET_IMA; * aa va heriter de la methode MULTI via * l'heritage entre objet aa%HERITE COM; list aa; 'SI' (( ABS( YY + 7.00)) > 1.e-5); ERREUR 5;FINSI; 'SI' (( ABS( XX - 42.0)) > 1.e-5) ; erreur 5; finsi; FIN;