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.
Commenti