日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

ABAP面向?qū)ο罂偨Y(jié)

 昵稱46169147 2017-08-07
clipboard.png

實例屬性  靜態(tài)屬性

clipboard.png

組件

clipboard.png

訪問區(qū)域;權(quán)限

聲明項目時,要注意聲明訪問區(qū)域

clipboard.png

訪問實力對象,需要首先聲明一個對象。  DATA 名   TYPE REF TO  類。

訪問實例屬性格式 對象->屬性名稱

clipboard.png

調(diào)用方法,如下

clipboard.png

類中定義的變量也可以修改

clipboard.png

一個類可以有多個實例,多個實例之間相對獨立,一個實例修改了值,不會影響其他實例的值。

clipboard.png

在類中(definition)靜態(tài)屬性聲明

clipboard.png

clipboard.png

在類中(implementation)靜態(tài)方法實現(xiàn)

clipboard.png

靜態(tài)屬性的訪問,不依附對象,直接通過類=>訪問

clipboard.png

靜態(tài)方法的訪問

clipboard.png

clipboard.png

Class構(gòu)成要素

·構(gòu)成要素的分類

–實例組件(Instance-specific component)

·參照類創(chuàng)建對象時,內(nèi)存中存在的項目,每次創(chuàng)建對象時都會被初始化。各個類的對象中都存在

·聲明方式:屬性:DATA;方法:METHODS。訪問:OBJECT->COMP

–靜態(tài)組件(Static component)

·遇到創(chuàng)建類的語句(CREATE OBJECT)開始,直到程序結(jié)束都存儲于內(nèi)存中,是依賴類存在的項目。即使不創(chuàng)建對象,若已存在與內(nèi)存中即可以直接使用。

·聲明方式:屬性:CLASS-DATA;方法:CLASS-METHODS。訪問:CLASS=>COMP

·類的所有要素在聲明部分實現(xiàn)(Class Definition)

–屬性(Attributes)

·可以擁有ABAP所有數(shù)據(jù)類型的類內(nèi)部數(shù)據(jù)字段,對象狀態(tài)由屬性決定。DATA/CONSTANTS

–方法(Method)

·用來定義決定對象行為的類內(nèi)部執(zhí)行步驟,可以訪問類的所有屬性,切可通過方法修改對象的內(nèi)容,另外,方法提供傳入傳出參數(shù),便于用戶交互

–事件(Event)

·事件是沒有繼承關(guān)系的類之間可以互相調(diào)用彼此方法的特殊方法

clipboard.png

對象

·對象指的是類的實例,每個對象都有自己固有的屬性。

·一個類可以創(chuàng)建多個對象。

·在ABAP程序中要訪問對象,需要使用參照對象(Object Reference),參照對象始終存在于參照對象變量中

–DATA    obj TYPE REF TO class.

方法

·方法定義的基本語法

–METHOD

IMPORTING …TYPE….

EXPORTING…TYPE…

CHANGING …TYPE…

EXCEPTIONS … X1…

–CALL METHOD [oref->|class=>]meth

EXPORTING … i1 = f1…

RECEIVING       R  = h .

–IMPORT/EXPORT:數(shù)據(jù)輸入/輸出接口,接口參數(shù)可以參考單個變量,結(jié)構(gòu),或者內(nèi)表

–CHANGING:同時作為輸入輸出接口,接口參數(shù)可以參考單個變量,結(jié)構(gòu),或者內(nèi)表

–RETURNING:返回類傳遞數(shù)值。該定義不能喝CHANGING/EXPORTING同時使用

–EXCEPTIONS:返回執(zhí)行中所出現(xiàn)的錯誤

·類函數(shù)可以擁有多個輸入?yún)?shù),但只能有一個輸出參數(shù)。類的輸出接口參數(shù)必須與類函數(shù)中所定義類型保持一致

方法的調(diào)用

·當方法沒有輸出參數(shù)(EXPORTING)的時候可以通過以下方式調(diào)用:

–CALL METHOD meth().  “ 沒有輸入?yún)?shù)

–CALL METHOD meth( a ). “ 一個輸入

–CALL METHOD meth( f1 = a1………fn = an ) . “N個輸入

類的繼承

clipboard.png

CLASS LCL_SUB DEFINITION INHERITING FROM LCL_COOMPT."類的繼承

ENDCLASS.   

子類LCL_SUB中沒有任何數(shù)據(jù);都是繼承來自父類LCL_COMPT。

clipboard.png

子類可以繼承  publicsection,protectedsection的內(nèi)容

privatesection的內(nèi)容不可以被繼承。

clipboard.png

方法中參數(shù)的使用

定義:一個函數(shù)導入?yún)?shù)  一個函數(shù)傳出參數(shù)

clipboard.png

實現(xiàn)(gv_change在這里知識起到一個橋梁的的作用)

clipboard.png

帶參函數(shù)的調(diào)用

clipboard.png

多個參數(shù)的函數(shù)調(diào)用

clipboard.png

clipboard.png

clipboard.png

返回類傳遞數(shù)值   即返回值 切 只有一個

clipboard.png

定義

clipboard.png

實現(xiàn)

clipboard.png

調(diào)用

clipboard.png

常量  隨意用什么訪問   類=>常量名   或者 對象->常量名  進行 訪問

clipboard.png

clipboard.png

訪問常量

returning調(diào)用的特點

clipboard.png

clipboard.png

clipboard.png

異常

clipboard.png

clipboard.png

clipboard.png

構(gòu)造方法

使用 METHODS  CONSTRUCTOR . 

每個類只能有一個構(gòu)造方法,在CREATE OBJECT語句中自動調(diào)用構(gòu)造方法

使用幾個create object就調(diào)用幾次構(gòu)造方法。

·什么時候使用構(gòu)造方法

–需要分配(外部)資源

–需要初始化一些不能用DATA 語句的VALUE 指定的屬性值

–需要修改靜態(tài)屬性

–通常不能顯式的調(diào)用構(gòu)造器

構(gòu)造器方法

clipboard.png

參數(shù)要在carete object的時候?qū)搿?/p>

clipboard.png

clipboard.png

·什么是類的繼承?

–繼承的本質(zhì)是代碼重用。當要構(gòu)造一個新類時,無需從零開始,可以參考一個已有類,再其基礎(chǔ)上簡歷一個新類。

–參考類:基類/父類。新建類:派生類/子類

–派生類可以繼承基類所有的屬性和方法,并可以在此基礎(chǔ)上添加新的特性

·語句

–CLASSDEFINITION INHERITING FROM.

·多態(tài)性類繼承的實現(xiàn)

–由于每個派生類的屬性不同,相同的基類對象在不同的派生類中需要以不同的方式來表現(xiàn),因此提供多態(tài)的概念。

–在派生類中定義和基類相同的接口,但是可以使用不同的代碼來實現(xiàn)。

·語句

–METHOD 父類方法名REDEFINITION .對父類已有方法的重定義“

–在派生類中使用基類的方法(子類調(diào)用父類方法的語句),

使用SUPER:CALL METHOD SUPER->.

clipboard.png

–重載方法,使用ME:CALL METHOD ME->.

調(diào)用子類的方法   以下兩種調(diào)用效果類似

clipboard.png

clipboard.png

抽象類以及方法

抽象類

·CLASSDEFINITION ABSTRACT .  / ENDCLASS .

clipboard.png

抽象類的聲明定義

·抽象方法

–僅包含方法定義,但沒有具體實現(xiàn)的方法,需要通過派生類來實現(xiàn)

·METHODSABSTRACT .

clipboard.png

clipboard.png

抽象類中可以定義實例方法,并實現(xiàn);

也可以定義抽象方法,但是抽象方法只需定義不需要實現(xiàn)。

非抽象類中不能定義抽象方法

如果需要實現(xiàn)抽象類中的抽象方法;則需要一個類繼承抽象類,并且重新定義抽象方法然后實現(xiàn)。

clipboard.png

接口

–和抽象類相似,定義了一些未實現(xiàn)的屬性和方法,所有繼承它的類都繼承這些成員

–不需要方法實現(xiàn),不能直接實例化

–接口所有成員都是抽象的

–接口成員一般是公有的

–接口中不能含有構(gòu)造方法

clipboard.png

接口的定義;在類之外

clipboard.png

在類中的publicsection中將接口寫進去

在類的實現(xiàn)(implementation)中寫出接口中包含的方法的實現(xiàn)。

clipboard.png

METHOD 接口名~(波浪線)方法名.

ENDMETHOD.

"接口中的方法調(diào)用

clipboard.png

CALL METHOD  對象名->接口~方法

若在接口中定義的方法名太長,可以在類定義中的接口中給方法取別名

clipboard.png

ALIASES 別名 FOR 接口名~原方法名.;;在取別名之后,

調(diào)用方法就可以直接對象名->方法別名。

不需要加上   接口~

·事件(EVENT)(事件的發(fā)生至少需要兩個類)

clipboard.png

·事件類型分為4種

–定義在類中的:實例事件,靜態(tài)事件

–定義在接口中的:實例事件,靜態(tài)事件

·對于實例事件,注冊語句必須使用FOR指定注冊對象

–… FOR ref .

–… FOR ALL INSTANCES(注冊所有可以觸發(fā)該事件的實例,包括尚未被創(chuàng)建的實例)

·注冊靜態(tài)事件,不需加FOR后綴,自動應(yīng)用于整個類

·

·當程序執(zhí)行到RAISE EVENT語句后,所有已注冊的處理方法都將在下一個語句之前被處理。處理方法按照其在系統(tǒng)內(nèi)部注冊的順序被執(zhí)行。為避免無限循環(huán),目前事件處理最多不能超過64級嵌套。

clipboard.png

clipboard.png

創(chuàng)建方法  查找 數(shù)據(jù)  若查到就觸發(fā)事件輸出數(shù)據(jù)

clipboard.png

觸發(fā)事件:

RAISE EVENT事件名

clipboard.png

創(chuàng)建一個新類;方法綁定事件;METHODS  名 FOR EVENT  名 OF  類名  導入/導出  數(shù)據(jù);;并在實現(xiàn)中寫出方法功能

注冊是針對 對象 注冊

clipboard.png

新類創(chuàng)建對象;;并注冊事件   SET  HANDLER   對象名-->方法名  FOR  上一對象名

附錄:代碼

REPORT ZWEN_0804.

*----------------------------------------------------------------------*

*       INTERFACE INTER IMPLEMENTATION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

INTERFACE INTER."接口

METHODS WRITE_INTER.

ENDINTERFACE.                    "INTER IMPLEMENTATION

*----------------------------------------------------------------------*

*       CLASS LCL_COMPT DEFINITION

*----------------------------------------------------------------------*

*定義類中的項目(屬性;方法;事件)

*----------------------------------------------------------------------*

CLASS LCL_COMPT  DEFINITION.

* 如 DATA ------

* 如 MESSAGE ------

* 如 METHODS ------

PUBLIC SECTION."公有

"實例屬性

DATA GV_CHAR(10) TYPE C VALUE '實例CHAR變量'.

DATA GS_SCHOOL TYPE ZWEN_TEST_SCHOOL.

"實例方法

METHODS WRITE_CHAR.

TYPES GTY_CHAR10(10) TYPE C .

TYPES GTY_CHAR5(10) TYPE C .

METHODS SET_VALUE IMPORTING P_VALUE TYPE GTY_CHAR10."對gv——change賦值

METHODS GET_VALUE EXPORTING E_VALUE TYPE GTY_CHAR10."得到gv——change賦值

METHODS CON_VALUE IMPORTING I_VALUE1 TYPE GTY_CHAR5

I_VALUE2 TYPE GTY_CHAR5

I_VALUE3 TYPE GTY_CHAR5

EXPORTING R_SUBRC TYPE GTY_CHAR5.

CLASS-DATA GV_CHANGE(10) TYPE C.

DATA GV_CONCATENATE TYPE GTY_CHAR10..

"靜態(tài)屬性

CLASS-DATA GV_STATIC(20) TYPE C VALUE '靜態(tài)屬性'.

"靜態(tài)方法

CLASS-METHODS WRITE_STATIC.

"接口

INTERFACES INTER.

METHODS GET_DATA IMPORTING P_SCHOOL LIKE GS_SCHOOL-ZSCHOOL.

"事件    傳出

EVENTS DATA_EXIST EXPORTING VALUE(PS_SCHOOL) LIKE GS_SCHOOL.

PROTECTED SECTION."保護

CLASS-DATA  GV_SUPER   TYPE C VALUE 'fuleishuxing'.

ENDCLASS .                    "LCL_COMPT DEFINITION

*----------------------------------------------------------------------*

*       CLASS LCL_HANDLER DEFINITION

*----------------------------------------------------------------------*

*事件接收器

*----------------------------------------------------------------------*

CLASS LCL_HANDLER DEFINITION.

PUBLIC SECTION.

METHODS WRITE_DATA FOR EVENT DATA_EXIST OF LCL_COMPT

IMPORTING PS_SCHOOL."方法綁定事件

ENDCLASS.                    "LCL_HANDLER DEFINITION

*----------------------------------------------------------------------*

*       CLASS LCL_HANDLER IMPLEMENTATION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

CLASS LCL_HANDLER IMPLEMENTATION.

METHOD WRITE_DATA.

WRITE:/ PS_SCHOOL-ZSCHOOL,PS_SCHOOL-ZSNAME.

ENDMETHOD.                    "WRITE_DATA

ENDCLASS.                    "LCL_HANDLER IMPLEMENTATION

*----------------------------------------------------------------------*

*       CLASS LCL_COPMT IMPLEMENTATION

*----------------------------------------------------------------------*

*定義類中方法的內(nèi)容;

*----------------------------------------------------------------------*

CLASS LCL_COMPT IMPLEMENTATION.

"實現(xiàn)實例方法

METHOD WRITE_CHAR.

WRITE:/  '調(diào)用方法:', GV_CHAR.

ENDMETHOD.                    "WRITE_CHAR

METHOD SET_VALUE.

GV_CHANGE = P_VALUE.

ENDMETHOD.                    "SET_VALUE

METHOD GET_VALUE.

E_VALUE =   GV_CHANGE.

ENDMETHOD.                    "GET_VALUE

*實現(xiàn)靜態(tài)方法

METHOD WRITE_STATIC.

WRITE:/   '靜態(tài)方法',GV_STATIC.

ENDMETHOD.                    "WRITE_STATIC

METHOD CON_VALUE .

CONCATENATE I_VALUE1 I_VALUE2 I_VALUE3 INTO  GV_CONCATENATE.

IF SY-SUBRC = 0.

R_SUBRC = 'S'.

ELSE.

R_SUBRC = 'E'.

ENDIF.

ENDMETHOD.                    "CON_VALUE

METHOD INTER~WRITE_INTER.

WRITE:/ '接口中的方法'.

ENDMETHOD.                    "WRITR_INTER

METHOD GET_DATA.

SELECT SINGLE * FROM ZWEN_TEST_SCHOOL

INTO CORRESPONDING FIELDS OF GS_SCHOOL

WHERE ZSCHOOL = P_SCHOOL.

IF SY-SUBRC = 0."成功則輸出數(shù)據(jù)

RAISE EVENT DATA_EXIST

EXPORTING

PS_SCHOOL = GS_SCHOOL."同方向

ELSE."失敗

WRITE:/ '取數(shù)失敗'.

ENDIF.

ENDMETHOD.                    "GET_DATA

ENDCLASS.                    "LCL_COPMT IMPLEMENTATION

*----------------------------------------------------------------------*

*       CLASS LCL_SUB DEFINITION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

CLASS LCL_SUB DEFINITION INHERITING FROM LCL_COMPT."類的繼承

PUBLIC SECTION.

METHODS WRITE_SUPER.

ENDCLASS.                    "LCL_SUB DEFINITION

*----------------------------------------------------------------------*

*       CLASS LCL_SUB IMPLEMENTATION

*----------------------------------------------------------------------*

*

*----------------------------------------------------------------------*

CLASS LCL_SUB IMPLEMENTATION.

METHOD WRITE_SUPER.

WRITE:/ '子類輸出方法',GV_CHAR."繼承父類publicsection屬性

WRITE:/ '子類輸出方法',GV_SUPER."繼承父類PROTECTEDsection屬性

ENDMETHOD.                    "WRITE_SUPER

ENDCLASS.                    "LCL_SUB IMPLEMENTATION

"聲明一個對象

DATA: LCL_OBJECT TYPE REF TO LCL_COMPT,

LCL_OBJECT2 TYPE REF TO LCL_COMPT.

START-OF-SELECTION.

CREATE OBJECT LCL_OBJECT.

CREATE OBJECT LCL_OBJECT2.

"實例化

CREATE OBJECT LCL_OBJECT.

WRITE:/ '訪問實例屬性', LCL_OBJECT->GV_CHAR.

"修改類中定義的變量

LCL_OBJECT->GV_CHAR = '變化1'.

"調(diào)用方法

CALL METHOD LCL_OBJECT->WRITE_CHAR.

CALL METHOD LCL_OBJECT2->WRITE_CHAR.

"靜態(tài)屬性不依附實例

WRITE:/ '訪問靜態(tài)屬性',LCL_COMPT=>GV_STATIC.

CALL METHOD LCL_COMPT=>WRITE_STATIC."調(diào)用靜態(tài)方法

LCL_COMPT=>GV_STATIC = '修改后的靜態(tài)屬性'."修改驚濤屬性

CALL METHOD LCL_COMPT=>WRITE_STATIC.

DATA GV_DATA TYPE LCL_OBJECT->GTY_CHAR10.

"帶有參數(shù)方法的調(diào)用、

CALL METHOD LCL_OBJECT->SET_VALUE

EXPORTING

P_VALUE = '賦值操作'.

CALL METHOD LCL_OBJECT->GET_VALUE

IMPORTING

E_VALUE = GV_DATA.

WRITE :/  GV_DATA.

DATA GV_SUBRC TYPE LCL_OBJECT->GTY_CHAR10.

CALL METHOD LCL_OBJECT->CON_VALUE

EXPORTING

I_VALUE1 = 'HO'

I_VALUE2 = 'WD'

I_VALUE3 = 'CJ'

IMPORTING

R_SUBRC  = GV_SUBRC.

WRITE :/  GV_SUBRC.

"接口中的方法調(diào)用

CALL METHOD LCL_OBJECT->INTER~WRITE_INTER.

"事件的注冊及調(diào)用

DATA EVENT_HANDLER TYPE REF TO LCL_HANDLER.

CREATE OBJECT EVENT_HANDLER.

SET HANDLER EVENT_HANDLER->WRITE_DATA FOR LCL_OBJECT."注冊事件

CALL METHOD LCL_OBJECT->GET_DATA

EXPORTING

P_SCHOOL = '211'.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多