Page таңдаңыз

ABAP бағдарламасында кастинг

by | Jun 4, 2018 | ABAP бағдарламалары

Home » SAP » ABAP » ABAP бағдарламалары » ABAP бағдарламасында кастинг

кіріспе – Бұл жазбаның бөлігі ABAP бағдарламалары сериясы.

a1 СЫНЫП АНЫҚТАМА.
 ҚОҒАМДЫҚ БӨЛІМ.
 ДЕРЕКТЕР: num1 TYPE i VALUE 100.
 ӘДІСТЕР: м1.
 СОҢҒЫ СЫНЫП.
 a1 СЫНЫПЫН ЖҮЗЕГЕ АСЫРУ.
 ӘДІС m1.
 ЖАЗУ: 'a1:',num1.
 ENDMETHOD.
 СОҢҒЫ СЫНЫП.
 b1 СЫНЫП a1-ден мұрагер АНЫҚТАМА.
 ҚОҒАМДЫҚ БӨЛІМ.
 ӘДІСТЕР: м2, м1 ҚАЙТА АНЫҚТАУ.
 СОҢҒЫ СЫНЫП.
 b1 СЫНЫПЫН ЖАСАУ.
 ӘДІС m1.
 сан1 = сан1 .
 ЖАЗУ: 'b1:',num1.
 ENDMETHOD.
 ӘДІС m2.
 ЖАЗЫҢЫЗ: 'b2 класындағы М1'.
 ENDMETHOD.
 СОҢҒЫ СЫНЫП.
 ТАҢДАУДЫ БАСТАУ.
 ДЕРЕКТЕР: a1 РЕФ ТИПІ.
 ДЕРЕКТЕР: b TYPE REF TO b1.
 *деректер: c түрі REF TO c1.
 ************************************************* ************* НЫСАНЫ ЖАСАУ b.
 a = b.  "Қоңырау шалу әдісі a->m1( ).
 *a->m2( ) әдісін шақыру.  " біз супер класс реф. көмегімен жеке қосалқы сынып әдістеріне қол жеткізе алмаймыз.
 ЖАҢА LINE.
 b ?= a.  "төмен құю ҚОҢЫРАУ ӘДІСІ b->m1( ).
 ЖАҢА LINE.
 ҚОҢЫРАУ ӘДІСІ b->m2( ).
 ************************************************* *************** " қате null ref OBJECT жасау a.
 b ?= a.  "төмен құю әлі де оның демп шақыру ӘДІСІ b->m1( ).
 ************************************************* *************** НЫСАНЫ ЖАСАУ a.
 ТЫРЫСУ.
 b ?= a.  "CATCH cx_sy_move_cast_error" NULL' нысан анықтамасының демпін пайдалануға әрекет жасадыңыз.
 ҚОҢЫРАУ ӘДІСІ b->m1( ).
 ENDTRY.
 ************************************************* *************** НЫСАНЫ ЖАСАУ a.
 ОБЪЕКТІ ЖАСАУ b.
 ТЫРЫСУ.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 ҚОҢЫРАУ ӘДІСІ b->m1( ).
 b->m2( ) әдісін шақырыңыз.
 ENDTRY.
 КЛАСС lcl_shape АНЫҚТАМА.
 ҚОҒАМДЫҚ БӨЛІМ.
 ӘДІСТЕР сызу.
 СОҢҒЫ СЫНЫП.
 КЛАСС lcl_circle lcl_shape-ден МҰРА АЛУ АНЫҚТАМАСЫ.
 ҚОҒАМДЫҚ БӨЛІМ.
 ӘДІСТЕР: ҚАЙТА АНЫҚТАУ, кальк_аймақ.
 СОҢҒЫ СЫНЫП.
 КЛАСС lcl_shape ЖАСАУ.
 сызу әдісі.
 WRITE :/ 'Кез келген фигураны салу'.
 ENDMETHOD.
 СОҢҒЫ СЫНЫП.
 CLASS lcl_circle ЖАСАУ.
 сызу әдісі.
 WRITE :/ 'Арнайы пішінді салу: Шеңбер'.
 ENDMETHOD.
 ӘДІС есептеу_аймағы.
 WRITE :/ 'Area Of Crcle = 2iiR'.
 ENDMETHOD.
 СОҢҒЫ СЫНЫП.
 ТАҢДАУДЫ БАСТАУ.
 DATA : o_cir TYPE REF TO lcl_circle.
 ОБЪЕКТІ ЖАСАУ o_cir.
 ҚОҢЫРАУ ӘДІСІ o_cir->draw( ).  " қосымша сыныбын Draw() әдісін шақырады CALL METHOD o_cir->calc_area( ).
 ULINE.
 "--------- Тар трансляция(Upcast)---------------" ДЕРЕКТЕР : o_shp TYPE REF TO lcl_shape.
 o_shp = o_cir.  " Тар cast(Upcast) ҚОҢЫРАУ ӘДІСІ o_shp->draw( ).  " Draw() әдісінің қосалқы класын шақырады "METHOD o_shp->calc_area( ) шақырады.  " компиляция қатесі ULINE.
 "---------- Кеңейту Cast(төмен) -----------" ДЕРЕКТЕР : o_cir1 TYPE REF TO lcl_circle.
 " o_cir1 = o_shp.  " комплиляция қатесі o_cir1 ?= o_shp.  " Трансляцияны кеңейту(төмен) ҚОҢЫРАУ ӘДІСІ o_cir1->draw( ).  " қосымша сыныбын Draw() әдісін шақырады CALL METHOD o_cir1->calc_area( ).
 a1 СЫНЫП АНЫҚТАМА.
 ҚОҒАМДЫҚ БӨЛІМ.
 ДЕРЕКТЕР: num1 TYPE i VALUE 100.
 ӘДІСТЕР: м1.
 СОҢҒЫ СЫНЫП.
 a1 СЫНЫПЫН ЖҮЗЕГЕ АСЫРУ.
 ӘДІС m1.
 ЖАЗУ: 'a1:',num1.
 ENDMETHOD.
 СОҢҒЫ СЫНЫП.
 b1 СЫНЫП a1-ден мұрагер АНЫҚТАМА.
 ҚОҒАМДЫҚ БӨЛІМ.
 ӘДІСТЕР: м2, м1 ҚАЙТА АНЫҚТАУ.
 СОҢҒЫ СЫНЫП.
 b1 СЫНЫПЫН ЖАСАУ.
 ӘДІС m1.
 сан1 = сан1 .
 ЖАЗУ: 'b1:',num1.
 ENDMETHOD.
 ӘДІС m2.
 ЖАЗЫҢЫЗ: 'b2 класындағы М1'.
 ENDMETHOD.
 СОҢҒЫ СЫНЫП.
 ТАҢДАУДЫ БАСТАУ.
 ДЕРЕКТЕР: a1.
 ДЕРЕКТЕР: еншілес TYPE REF TO b1.
 *деректер: c түрі REF TO c1.
 ************************************************* ************** ОБЪЕКТ ЖАСАУ бала.
 ата-ана = бала.  "жоғарғы CALL ӘДІСІ ата-ана->m1( ).
 ҚОҢЫРАУ ӘДІСІ child->m1( ).
 ҚОҢЫРАУ ӘДІСІ child->m2( ).
 *a->m2( ) әдісін шақыру.  " біз супер класс реф. көмегімен жеке қосалқы сынып әдістеріне қол жеткізе алмаймыз.
 ЖАҢА LINE.
 бала ?= ата-ана.  " төмен casting ҚОҢЫРАУ ӘДІСІ child->m1( ).
 ЖАҢА LINE.
 ҚОҢЫРАУ ӘДІСІ child->m2( ).
 ************************************************* **************** *" қате null ref *ОБЪЕКТ жасау a.
 *b ?= a.  "төмен құю бұрынғысынша оның беру дамп *шақыру ӘДІСІ b->m1( ).
 ************************************************* **************** * ОБЪЕКТ ЖАСАУ a.
 ТЫРЫСУ.
 b ?= a.  "CATCH cx_sy_move_cast_error" NULL' нысан анықтамасының демпін пайдалануға әрекет жасадыңыз.
 ҚОҢЫРАУ ӘДІСІ b->m1( ).
 ENDTRY.
 ************************************************* **************** * ОБЪЕКТ ЖАСАУ a.
 ОБЪЕКТІ ЖАСАУ b.
 ТЫРЫСУ.
 b ?= a.
 CATCH cx_sy_move_cast_error.
 ҚОҢЫРАУ ӘДІСІ b->m1( ).
 b->m2( ) әдісін шақырыңыз.
 ENDTRY.
 ******** Бірегей мәндер******************** ДЕРЕКТЕР : lv_string TYPE жолы, lv_string2 TYPE жолы, lv_string_final TYPE жолы.
 ТҮРЛЕР: ty_data БАСТАЛУЫ, auth TYPE c, ty_data СОҢЫ.
 ДЕРЕКТЕР: ls_user TYPE ty_data, ls_user2 TYPE ty_data, lt_user2 TYPE ty_data, lt_user TYPE TABLE ty_data.
 lv_string = 'a,b,c,a'.
 lv_string2 = 'd,b,c,a'.
 ',' AT TABLE LT_user INTO lv_string BÖLÜK.
 lv_string2 AT ',' LT_user2 КЕСТЕСІНЕ БӨЛІҢІЗ.
 LT_user2 ТАҢДАУ ӨРІСІНДЕГІ ЦИКЛ ( ).
 INSERT INTO TABLE lt_user.
 ENDLOOP.
 lt_user аутентификациясы бойынша СҰРЫПТАУ.
 lt_user COMPARING аутентификациясынан іргелес көшірмелерді ЖОЮ.
 IF sy-subrc = 0.
 LT_user ТАҒАЙЫНДАУ ӨРІСІНДЕГІ ТҮРКЕЛУ( ).
 ЕГЕР lv_string_final БАСТАУЫ БОЛСА.
 lv_string_final = -авт.
 БАСҚА.
 lv_string_final ҚОСУ -auth INTO lv_string_final ',' АРҚЫЛЫ БӨЛГЕН.
 ENDIF.
 ENDLOOP.
 ENDIF.

 

автор

0 Пікірлер

Пікір қалдыру

Сіздің электрондық пошта мекенжайы емес жарияланады. Міндетті өрістер таңбаланған *

Бұл сайт спамның төмендеуі үшін Akismet пайдаланады. Деректеріңіздің қалай өңделетінін біліңіз.

автор