Casting v programu ABAP

OPREDELITEV RAZREDA a1.
 JAVNI ODDELEK.
 PODATKI: num1 TYPE i VALUE 100.
 METODE:m1.
 KONČNI RAZRED.
 IZVAJANJE RAZREDA a1.
 METODA m1.
 NAPIŠITE: 'a1:', št1.
 KONČNA METODA.
 KONČNI RAZRED.
 OPREDELITEV RAZREDA b1 DEDOVANJE IZ a1.
 JAVNI ODDELEK.
 METODE: m2, m1 REDEFINICIJA.
 KONČNI RAZRED.
 IZVAJANJE RAZREDA b1.
 METODA m1.
 št1 = število1.
 NAPIŠITE: 'b1:', št1.
 KONČNA METODA.
 METODA m2.
 NAPIŠITE: 'M2 v razredu b1'.
 KONČNA METODA.
 KONČNI RAZRED.
 ZAČETEK IZBORA.
 PODATKI: a VRSTA REF TO a1.
 PODATKI: b VRSTA REF TO b1.
 *podatki: c tip REF TO c1.
 ************************************************ ************* USTVARI OBJEKT b.
 a = b.  "upcasting CALL METHOD a->m1( ).
 *pokličite METODO a->m2( ).  " ne moremo dostopati do lastnih metod podrazreda z uporabo ref.
 NOVA LINE.
 b ?= a.  " oddajanje navzdol KLICNA METODA b->m1( ).
 NOVA LINE.
 KLICNA METODA b->m2( ).
 ************************************************ *************** " error null ref create OBJECT a.
 b ?= a.  "oddajanje navzdol še vedno daje izpisni klic METODA b->m1( ).
 ************************************************ *************** USTVARI OBJEKT a.
 POSKUSI.
 b ?= a.  "skušal si uporabiti izpis sklicevanja na objekt 'NULL' CATCH cx_sy_move_cast_error.
 KLICNA METODA b->m1( ).
 KONEC.
 ************************************************ *************** USTVARI OBJEKT a.
 USTVARJANJE OBJEKTA b.
 POSKUSI.
 b ?= a.
 UJEMI cx_sy_move_cast_error.
 KLICNA METODA b->m1( ).
 pokličite METODO b->m2( ).
 KONEC.
 RAZRED lcl_shape DEFINICIJA.
 JAVNI ODDELEK.
 METODE risanje.
 KONČNI RAZRED.
 RAZRED lcl_circle DEFINICIJA DEDOVANJE IZ lcl_shape.
 JAVNI ODDELEK.
 METODE: narišite REDEFINICIJA, calc_area.
 KONČNI RAZRED.
 RAZRED lcl_shape IMPLEMENTACIJA.
 METODA žrebanje.
 WRITE :/ 'Risanje poljubne oblike'.
 KONČNA METODA.
 KONČNI RAZRED.
 RAZRED lcl_circle IMPLEMENTACIJA.
 METODA žrebanje.
 WRITE :/ 'Specifična oblika za risanje: krog'.
 KONČNA METODA.
 METODA calc_area.
 NAPIŠITE :/ 'Območje Crcle = 2iiR'.
 KONČNA METODA.
 KONČNI RAZRED.
 ZAČETEK IZBORA.
 PODATKI: o_cir TYPE REF TO lcl_circle.
 USTVARI OBJEKT o_cir.
 KLICNA METODA o_cir->draw().  " pokliče metodo podrazreda Draw() KLIC METODA o_cir->calc_area().
 ULINE.
 "--------- Ozko preoblikovanje (navzgor) ---------------" PODATKI: o_shp TYPE REF TO lcl_shape.
 o_shp = o_cir.  " Ozko oddajanje (navzgor) METODA KLICA o_shp->draw( ).  " pokliče metodo podrazreda Draw() "pokliči METODO o_shp->calc_area() .  " napaka pri prevajanju ULINE.
 "--------- Širitev Cast(Downcast) -----------" PODATKI: o_cir1 TYPE REF TO lcl_circle.
 " o_cir1 = o_shp.  " napaka kompilacije o_cir1 ?= o_shp.  " Razširitev Cast(Downcast) METODA KLICA o_cir1->draw().  " pokliče metodo podrazreda Draw() METODA KLICA o_cir1->calc_area().
 OPREDELITEV RAZREDA a1.
 JAVNI ODDELEK.
 PODATKI: num1 TYPE i VALUE 100.
 METODE:m1.
 KONČNI RAZRED.
 IZVAJANJE RAZREDA a1.
 METODA m1.
 NAPIŠITE: 'a1:', št1.
 KONČNA METODA.
 KONČNI RAZRED.
 OPREDELITEV RAZREDA b1 DEDOVANJE IZ a1.
 JAVNI ODDELEK.
 METODE: m2, m1 REDEFINICIJA.
 KONČNI RAZRED.
 IZVAJANJE RAZREDA b1.
 METODA m1.
 št1 = število1.
 NAPIŠITE: 'b1:', št1.
 KONČNA METODA.
 METODA m2.
 NAPIŠITE: 'M2 v razredu b1'.
 KONČNA METODA.
 KONČNI RAZRED.
 ZAČETEK IZBORA.
 PODATKI: nadrejeni VRSTA REF TO a1.
 PODATKI: otrok TIP REF TO b1.
 *podatki: c tip REF TO c1.
 ************************************************ ************* CREATE OBJECT otroka.
 starš = otrok.  "upcasting CALL METHOD parent->m1( ).
 KLICNA METODA otrok->m1( ).
 KLICNA METODA otrok->m2( ).
 *pokličite METODO a->m2( ).  " ne moremo dostopati do lastnih metod podrazreda z uporabo ref.
 NOVA LINE.
 otrok ?= starš.  " oddajanje navzdol CALL METODA otrok->m1( ).
 NOVA LINE.
 KLICNA METODA otrok->m2( ).
 ************************************************ **************** *" napaka null ref *ustvari OBJEKT a.
 *b ?= a.  "oddajanje navzdol še vedno daje smetišče *pokliči METODO b->m1( ).
 ************************************************ **************** * USTVARI OBJEKAT a.
 POSKUSI.
 b ?= a.  "skušal si uporabiti izpis sklicevanja na objekt 'NULL' CATCH cx_sy_move_cast_error.
 KLICNA METODA b->m1( ).
 KONEC.
 ************************************************ **************** * USTVARI OBJEKAT a.
 USTVARJANJE OBJEKTA b.
 POSKUSI.
 b ?= a.
 UJEMI cx_sy_move_cast_error.
 KLICNA METODA b->m1( ).
 pokličite METODO b->m2( ).
 KONEC.
 ******** Edinstvene vrednosti******************* PODATKI: lv_string TYPE niz, lv_string2 TYPE niz, lv_string_final TYPE niz.
 VRSTE: BEGIN OF ty_data, auth TYPE c, END OF ty_data.
 PODATKI: ls_user TYPE ty_data, ls_user2 TYPE ty_data, lt_user2 TYPE TABELA ty_data, lt_user TYPE TABELA ty_data.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 RAZDELI lv_string NA ',' V TABELE lt_user.
 RAZDELI lv_string2 NA ',' V TABELE lt_user2.
 ZANKA NA lt_user2 DODELITEV POLJA-SIMBOL( ).
 VSTAVI INTO TABLE lt_user.
 ENDLOOP.
 RAZVRŠI lt_user PO avt.
 IZBRIŠI SOSEDNE DVOJENIKE IZ lt_user PRIMERJAVA prist.
 ČE sy-subrc = 0.
 ZANKA PRI lt_user DODELITEV POLJA-SIMBOL( ).
 ČE JE lv_string_final ZAČETNA.
 lv_string_final = -avt.
 DRUGO.
 KONCATENATI lv_string_final -auth V lv_string_final, LOČEN Z ','.
 ENDIF.
 ENDLOOP.
 ENDIF.

 

Pustite komentar

Ta stran uporablja Akismet za zmanjšanje nezaželene pošte. Preberite, kako se vaš komentar obravnava.