Casting nel programma ABAP

by | 4 giugno 2018 | Programmi ABAP

Casa » LINFA » ABAP » Programmi ABAP » Casting nel programma ABAP

Prefazione – Questo post fa parte del Programmi ABAP serie.

DEFINIZIONE DI CLASSE a1.
 SEZIONE PUBBLICA.
 DATI: num1 TIPO i VALORE 100.
 METODI:m1.
 END CLASS.
 ATTUAZIONE DELLA CLASSE a1.
 METODO m1.
 SCRIVERE: 'a1:',num1.
 FINE METODO.
 END CLASS.
 CLASSE b1 DEFINIZIONE EREDITIVA DA a1.
 SEZIONE PUBBLICA.
 METODI:m2, m1 RIDEFINIZIONE.
 END CLASS.
 ATTUAZIONE DELLA CLASSE b1.
 METODO m1.
 numero1 = numero1 .
 SCRIVERE: 'b1:',num1.
 FINE METODO.
 METODO m2.
 SCRIVERE: 'M2 in classe b1'.
 FINE METODO.
 END CLASS.
 INIZIO DELLA SELEZIONE.
 DATI: a TIPO RIFERIMENTO A a1.
 DATI: b TIPO RIFERIMENTO A b1.
 *dati: tipo c REF TO c1.
 ************************************************** *************** CREA OGGETTO b.
 un = b.  "upcasting CALL METHOD a->m1( ).
 *chiama METODO a->m2( ).  " non possiamo accedere ai propri metodi di sottoclasse usando il rif.
 NUOVA LINEA.
 b?= a.  " down casting CALL METHOD b->m1( ).
 NUOVA LINEA.
 METODO DI CHIAMATA b->m2( ).
 ************************************************** *************** " errore null ref create OBJECT a.
 b?= a.  "down casting continua a dare la chiamata di dump METHOD b->m1( ).
 ************************************************** *************** CREA OGGETTO a.
 TENTATIVO.
 b?= a.  "ur ha tentato di utilizzare un dump di riferimento oggetto 'NULL' CATCH cx_sy_move_cast_error.
 METODO DI CHIAMATA b->m1( ).
 FINE.
 ************************************************** *************** CREA OGGETTO a.
 CREA OGGETTO b.
 TENTATIVO.
 b?= a.
 CATTURA cx_sy_move_cast_error.
 METODO DI CHIAMATA b->m1( ).
 chiama METODO b->m2( ).
 FINE.
 CLASSE lcl_shape DEFINIZIONE.
 SEZIONE PUBBLICA.
 METODI disegnare.
 END CLASS.
 CLASSE lcl_circle DEFINIZIONE EREDITA DA lcl_shape.
 SEZIONE PUBBLICA.
 METODI: disegnare RIDEFINITION, calc_area.
 END CLASS.
 CLASSE lcl_shape IMPLEMENTAZIONE.
 METODO sorteggio.
 SCRIVI :/ 'Disegnare qualsiasi forma'.
 FINE METODO.
 END CLASS.
 CLASSE lcl_circle IMPLEMENTAZIONE.
 METODO sorteggio.
 SCRIVI :/ 'Forma specifica del disegno: Cerchio'.
 FINE METODO.
 METODO calc_area.
 SCRIVI :/ 'Area Di Cerchio = 2iiR'.
 FINE METODO.
 END CLASS.
 INIZIO DELLA SELEZIONE.
 DATI : o_cir TIPO REF TO lcl_circle.
 CREA OGGETTO o_cir.
 METODO DI CHIAMATA o_cir->draw( ).  " chiama la sottoclasse Draw() metodo CALL METHOD o_cir->calc_area( ).
 ULINE.
 "--------- Cast stretto (Upcast)---------------" DATA : o_shp TYPE REF TO lcl_shape.
 o_shp = o_cir.  " Narrow cast(Upcast) CALL METHOD o_shp->draw( ).  " chiama il metodo Draw() della sottoclasse "call METHOD o_shp->calc_area() .  " errore di compilazione ULINE.
 "---------- Cast allargato(Downcast) -----------" DATA : o_cir1 TYPE REF TO lcl_circle.
 " o_cir1 = o_shp.  " errore di compilazione o_cir1 ?= o_shp.  " Ampliamento Cast(Downcast) CALL METHOD o_cir1->draw( ).  " chiama la sottoclasse Draw() metodo CALL METHOD o_cir1->calc_area( ).
 DEFINIZIONE DI CLASSE a1.
 SEZIONE PUBBLICA.
 DATI: num1 TIPO i VALORE 100.
 METODI:m1.
 END CLASS.
 ATTUAZIONE DELLA CLASSE a1.
 METODO m1.
 SCRIVERE: 'a1:',num1.
 FINE METODO.
 END CLASS.
 CLASSE b1 DEFINIZIONE EREDITIVA DA a1.
 SEZIONE PUBBLICA.
 METODI:m2, m1 RIDEFINIZIONE.
 END CLASS.
 ATTUAZIONE DELLA CLASSE b1.
 METODO m1.
 numero1 = numero1 .
 SCRIVERE: 'b1:',num1.
 FINE METODO.
 METODO m2.
 SCRIVERE: 'M2 in classe b1'.
 FINE METODO.
 END CLASS.
 INIZIO DELLA SELEZIONE.
 DATI: padre TIPO REF TO a1.
 DATI: figlio TIPO RIF A b1.
 *dati: tipo c REF TO c1.
 ************************************************** *************** CREA OGGETTO bambino.
 genitore = figlio.  "upcasting CALL METHOD genitore->m1( ).
 METODO DI CHIAMATA bambino->m1( ).
 METODO DI CHIAMATA bambino->m2( ).
 *chiama METODO a->m2( ).  " non possiamo accedere ai propri metodi di sottoclasse usando il rif.
 NUOVA LINEA.
 figlio ?= genitore.  " down casting CALL METHOD child->m1( ).
 NUOVA LINEA.
 METODO DI CHIAMATA bambino->m2( ).
 ************************************************** **************** *" errore null ref *create OBJECT a.
 *b?= a.  "downcasting continua a dare dump *call METHOD b->m1( ).
 ************************************************** **************** * CREA OGGETTO a.
 TENTATIVO.
 b?= a.  "ur ha tentato di utilizzare un dump di riferimento oggetto 'NULL' CATCH cx_sy_move_cast_error.
 METODO DI CHIAMATA b->m1( ).
 FINE.
 ************************************************** **************** * CREA OGGETTO a.
 CREA OGGETTO b.
 TENTATIVO.
 b?= a.
 CATTURA cx_sy_move_cast_error.
 METODO DI CHIAMATA b->m1( ).
 chiama METODO b->m2( ).
 FINE.
 ******** Valori univoci******************** DATA : stringa TYPE lv_string, stringa TYPE lv_string2, stringa TYPE lv_string_final.
 TYPES: BEGIN OF ty_data, auth TYPE c, END OF ty_data.
 DATI: ls_user TIPO ty_data, ls_user2 TIPO ty_data, lt_user2 TABELLA TIPO DI ty_data, lt_user TABELLA TIPO DI ty_data.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 SPLIT lv_string AT ',' IN TABLE lt_user.
 SPLIT lv_string2 AT ',' NELLA TABELLA lt_user2.
 LOOP AT lt_user2 ASSEGNAZIONE SIMBOLO CAMPO( ).
 INSERIRE INTO TABLE lt_user.
 ENDLOOP.
 ORDINA lt_user PER auth.
 ELIMINA DUPLICATI ADIACENTI DA lt_user CONFRONTO auth.
 SE sy-subrc = 0.
 LOOP AT lt_user ASSEGNAZIONE SIMBOLO CAMPO( ).
 SE lv_string_final È INIZIALE.
 lv_string_final = -auth.
 ALTRO.
 CONCATENATE lv_string_final -auth INTO lv_string_final SEPARATO DA ','.
 FINISCI SE.
 ENDLOOP.
 FINISCI SE.

 

Autore

Commenti

Invia un commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati dei tuoi commenti.

Autore