Casting dans le programme ABAP

DÉFINITION DE LA CLASSE a1.
 PARTIE PUBLIQUE.
 DONNÉES : num1 TYPE i VALEUR 100.
 MÉTHODES : m1.
 FIN DE CLASSE.
 MISE EN ŒUVRE DE CLASSE a1.
 MÉTHODE m1.
 ÉCRIRE : 'a1 :',num1.
 ENDMETHODE.
 FIN DE CLASSE.
 CLASSE b1 DÉFINITION HÉRITANT DE a1.
 PARTIE PUBLIQUE.
 MÉTHODES : m2, m1 REDÉFINITION.
 FIN DE CLASSE.
 MISE EN ŒUVRE DE CLASSE b1.
 MÉTHODE m1.
 num1 = num1 .
 ÉCRIRE : 'b1 :',num1.
 ENDMETHODE.
 MÉTHODE m2.
 ÉCRIRE : 'M2 en classe b1'.
 ENDMETHODE.
 FIN DE CLASSE.
 DEBUT DE SELECTION.
 DONNEES : a TYPE REF TO a1.
 DONNEES : b TYPE REF A b1.
 *données : c type REF TO c1.
 ****************************************************** ************** CRÉER UN OBJET b.
 un = b.  "upcasting CALL METHOD a->m1( ).
 *appeler METHODE a->m2( ).  " nous ne pouvons pas accéder aux propres méthodes de la sous-classe en utilisant la super classe ref.
 NOUVELLE LIGNE.
 b ?= un.  " downcast CALL METHOD b->m1( ).
 NOUVELLE LIGNE.
 MÉTHODE D'APPEL b->m2( ).
 ****************************************************** *************** " erreur null ref créer OBJET a.
 b ?= un.  "Downcasting toujours son appel de vidage METHOD b-> m1 ().
 ****************************************************** *************** CRÉER UN OBJET a.
 ESSAYER.
 b ?= un.  "Votre tentative d'utilisation d'un vidage de référence d'objet 'NULL' CATCH cx_sy_move_cast_error.
 MÉTHODE D'APPEL b->m1( ).
 ENDTRY.
 ****************************************************** *************** CRÉER UN OBJET a.
 CRÉER UN OBJET b.
 ESSAYER.
 b ?= un.
 CATCH cx_sy_move_cast_error.
 MÉTHODE D'APPEL b->m1( ).
 appeler METHODE b->m2( ).
 ENDTRY.
 CLASSE lcl_shape DÉFINITION.
 PARTIE PUBLIQUE.
 MÉTHODES dessiner.
 FIN DE CLASSE.
 CLASSE lcl_circle DÉFINITION HÉRITANT DE lcl_shape.
 PARTIE PUBLIQUE.
 MÉTHODES : dessiner REDÉFINITION, calc_area.
 FIN DE CLASSE.
 CLASSE lcl_shape IMPLEMENTATION.
 MÉTHODE dessiner.
 WRITE :/ 'Dessiner n'importe quelle forme'.
 ENDMETHODE.
 FIN DE CLASSE.
 MISE EN ŒUVRE DE LA CLASSE lcl_circle.
 MÉTHODE dessiner.
 WRITE :/ 'Forme spécifique du dessin : Cercle'.
 ENDMETHODE.
 METHODE calc_area.
 ÉCRIRE :/ 'Aire du Crcle = 2iiR'.
 ENDMETHODE.
 FIN DE CLASSE.
 DEBUT DE SELECTION.
 DATA : o_cir TYPE REF TO lcl_circle.
 CREER OBJET o_cir.
 CALL METHOD o_cir->draw( ).  " appelle la méthode Draw() de la sous-classe CALL METHOD o_cir->calc_area().
 ULINE.
 "--------- Narrow cast(Upcast)---------------" DATA : o_shp TYPE REF TO lcl_shape.
 o_shp = o_cir.  " MÉTHODE D'APPEL de distribution étroite (Upcast) o_shp->draw( ).  " appelle la méthode Draw() de la sous-classe " appelle METHOD o_shp->calc_area() .  " erreur de compilation ULINE.
 "---------- Distribution élargie (Downcast) -----------" DATA : o_cir1 TYPE REF TO lcl_circle.
 " o_cir1 = o_shp.  " erreur de compilation o_cir1 ?= o_shp.  " Élargissement de la diffusion (Downcast) MÉTHODE D'APPEL o_cir1->draw( ).  " appelle la méthode Draw() de la sous-classe CALL METHOD o_cir1->calc_area().
 DÉFINITION DE LA CLASSE a1.
 PARTIE PUBLIQUE.
 DONNÉES : num1 TYPE i VALEUR 100.
 MÉTHODES : m1.
 FIN DE CLASSE.
 MISE EN ŒUVRE DE CLASSE a1.
 MÉTHODE m1.
 ÉCRIRE : 'a1 :',num1.
 ENDMETHODE.
 FIN DE CLASSE.
 CLASSE b1 DÉFINITION HÉRITANT DE a1.
 PARTIE PUBLIQUE.
 MÉTHODES : m2, m1 REDÉFINITION.
 FIN DE CLASSE.
 MISE EN ŒUVRE DE CLASSE b1.
 MÉTHODE m1.
 num1 = num1 .
 ÉCRIRE : 'b1 :',num1.
 ENDMETHODE.
 MÉTHODE m2.
 ÉCRIRE : 'M2 en classe b1'.
 ENDMETHODE.
 FIN DE CLASSE.
 DEBUT DE SELECTION.
 DONNÉES : parent TYPE REF TO a1.
 DONNEES : enfant TYPE REF TO b1.
 *données : c type REF TO c1.
 ****************************************************** ************** CRÉER UN OBJET enfant.
 parent = enfant.  "upcasting CALL METHOD parent->m1( ).
 MÉTHODE D'APPEL enfant->m1( ).
 MÉTHODE D'APPEL enfant->m2( ).
 *appeler METHODE a->m2( ).  " nous ne pouvons pas accéder aux propres méthodes de la sous-classe en utilisant la super classe ref.
 NOUVELLE LIGNE.
 enfant ?= parent.  " downcast CALL METHOD enfant->m1( ).
 NOUVELLE LIGNE.
 MÉTHODE D'APPEL enfant->m2( ).
 ****************************************************** **************** *" erreur null ref *create OBJECT a.
 *b ?= un.  "Down casting toujours son vidage donnant *call METHOD b->m1( ).
 ****************************************************** **************** * CRÉER UN OBJET a.
 ESSAYER.
 b ?= un.  "Votre tentative d'utilisation d'un vidage de référence d'objet 'NULL' CATCH cx_sy_move_cast_error.
 MÉTHODE D'APPEL b->m1( ).
 ENDTRY.
 ****************************************************** **************** * CRÉER UN OBJET a.
 CRÉER UN OBJET b.
 ESSAYER.
 b ?= un.
 CATCH cx_sy_move_cast_error.
 MÉTHODE D'APPEL b->m1( ).
 appeler METHODE b->m2( ).
 ENDTRY.
 ******** Valeurs uniques******************* DONNÉES : chaîne TYPE lv_string, chaîne TYPE lv_string2, chaîne TYPE lv_string_final.
 TYPES : DÉBUT DE ty_data, auth TYPE c, FIN DE ty_data.
 DONNÉES : ls_user TYPE ty_data, ls_user2 TYPE ty_data, lt_user2 TYPE TABLE OF ty_data, lt_user TYPE TABLE OF ty_data.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 SPLIT lv_string AT ',' INTO TABLE lt_user.
 SPLIT lv_string2 AT ',' INTO TABLE lt_user2.
 BOUCLE SUR lt_user2 ASSIGNING FIELD-SYMBOL( ).
 INSÉRER DANS TABLE lt_user.
 BOUCLE FINALE.
 TRIER lt_user PAR auth.
 SUPPRIMER LES DOUBLONS ADJACENTS DE lt_user COMPARING auth.
 SI sy-subrc = 0.
 BOUCLE SUR lt_user ASSIGNING FIELD-SYMBOL( ).
 SI lv_string_final EST INITIAL.
 lv_string_final = -auth.
 AUTRE.
 CONCATENER lv_string_final -auth INTO lv_string_final SEPARATED BY ','.
 FIN SI.
 BOUCLE FINALE.
 FIN SI.

 

Laissez un commentaire

Ce site utilise Akismet pour réduire les spams. Découvrez comment sont traitées les données de vos commentaires..