類(lèi)用于指定對(duì)象的形式,它將數(shù)據(jù)表示和將該數(shù)據(jù)操作為一個(gè)整齊包的方法組合。 類(lèi)中的數(shù)據(jù)和函數(shù)稱(chēng)為類(lèi)的成員。
定義類(lèi)時(shí),可以為數(shù)據(jù)類(lèi)型定義藍(lán)圖。 這實(shí)際上不定義任何數(shù)據(jù),但它定義了類(lèi)名稱(chēng)的意義,類(lèi)的對(duì)象將包括什么,以及可以對(duì)這樣的對(duì)象執(zhí)行什么操作。 也就是說(shuō),它定義對(duì)象的抽象特性,例如屬性,字段和屬性。
以下語(yǔ)法顯示如何定義類(lèi):
CLASS <class_name> DEFINITION. .......... .......... ENDCLASS.
類(lèi)定義從關(guān)鍵字CLASS開(kāi)始,后面跟著類(lèi)名DEFINITION和類(lèi)主體。 類(lèi)的定義可以包含類(lèi)的各種組件,如屬性,方法和事件。 當(dāng)我們?cè)陬?lèi)聲明中聲明一個(gè)方法時(shí),方法實(shí)現(xiàn)必須包含在類(lèi)實(shí)現(xiàn)中。 以下語(yǔ)法顯示如何實(shí)現(xiàn)類(lèi):
CLASS <class_name> IMPLEMENTATION. ........... .......... ENDCLASS.
注意 - 類(lèi)的實(shí)現(xiàn)包含其所有方法的實(shí)現(xiàn)。 在ABAP對(duì)象中,類(lèi)的結(jié)構(gòu)包含諸如屬性,方法,事件,類(lèi)型和常量等組件。
屬性是可以具有任何數(shù)據(jù)類(lèi)型(如C,I,F(xiàn)和N)的類(lèi)的數(shù)據(jù)字段。它們?cè)陬?lèi)聲明中聲明。 這些屬性可以分為兩類(lèi):實(shí)例和靜態(tài)屬性。 實(shí)例屬性定義對(duì)象的實(shí)例特定狀態(tài)。 不同對(duì)象的狀態(tài)不同。 使用DATA語(yǔ)句聲明實(shí)例屬性。
靜態(tài)屬性定義由類(lèi)的所有實(shí)例共享的類(lèi)的公共狀態(tài)。 也就是說(shuō),如果您更改類(lèi)的一個(gè)對(duì)象中的靜態(tài)屬性,該更改對(duì)該類(lèi)的所有其他對(duì)象也是可見(jiàn)的。 使用CLASS-DATA語(yǔ)句聲明靜態(tài)屬性。
方法是表示類(lèi)中的對(duì)象的行為的函數(shù)或過(guò)程。 類(lèi)的方法可以訪問(wèn)類(lèi)的任何屬性。 方法的定義也可以包含參數(shù),以便在調(diào)用方法時(shí)可以向這些參數(shù)提供值。 方法的定義在類(lèi)聲明中聲明,并在類(lèi)的實(shí)現(xiàn)部分實(shí)現(xiàn)。 METHOD和ENDMETHOD語(yǔ)句用于定義方法的實(shí)現(xiàn)部分。 以下語(yǔ)法顯示如何實(shí)現(xiàn)一種方法:
METHOD <m_name>. .......... .......... ENDMETHOD.
在此語(yǔ)法中,< m_name> 表示方法的名稱(chēng)。 注意 - 您可以使用CALL METHOD語(yǔ)句調(diào)用方法。
類(lèi)組件可以在控制如何訪問(wèn)這些組件的公共,私有或受保護(hù)的可見(jiàn)性部分中定義。 私有可見(jiàn)性部分用于拒絕從類(lèi)外部訪問(wèn)組件。 這樣的組件只能從類(lèi)內(nèi)部訪問(wèn),例如方法。
在公共可見(jiàn)性部分中定義的組件可以從任何上下文訪問(wèn)。 默認(rèn)情況下,類(lèi)的所有成員都是私有的。 實(shí)際上,我們?cè)谒接泄?jié)中定義數(shù)據(jù),在公共節(jié)中定義相關(guān)方法,以便可以從類(lèi)外面調(diào)用它們,如下面的程序所示。
在類(lèi)中的Public部分中聲明的屬性和方法可以由該類(lèi)和程序的任何其他類(lèi),子類(lèi)訪問(wèn)。
當(dāng)屬性和方法在類(lèi)的Protected部分中聲明時(shí),那些類(lèi)和子類(lèi)(派生類(lèi))只能訪問(wèn)它們。
當(dāng)在類(lèi)的Private部分中聲明屬性和方法時(shí),這些屬性和方法只能由該類(lèi)訪問(wèn),而不能由任何其他類(lèi)訪問(wèn)。
Report ZAccess1. CLASS class1 Definition. PUBLIC Section. Data: text1 Type char25 Value 'Public Data'. Methods meth1. PROTECTED Section. Data: text2 Type char25 Value 'Protected Data'. PRIVATE Section. Data: text3 Type char25 Value 'Private Data'. ENDCLASS. CLASS class1 Implementation. Method meth1. Write: / 'Public Method:', / text1, / text2, / text3. Skip. EndMethod. ENDCLASS. Start-Of-Selection. Data: Objectx Type Ref To class1. Create Object: Objectx. CALL Method: Objectx→meth1. Write: / Objectx→text1.
上面的代碼產(chǎn)生以下輸出:
Public Method: Public Data Protected Data Private Data Public Data
靜態(tài)屬性用語(yǔ)句CLASS-DATA聲明。 所有對(duì)象或?qū)嵗伎梢允褂妙?lèi)的靜態(tài)屬性。 靜態(tài)屬性直接在類(lèi)名的幫助下訪問(wèn),像class_name?name_1='Some Text'。
例
下面是一個(gè)程序,我們要打印一個(gè)文本行4到8次。 我們定義一個(gè)類(lèi)class1,在公共部分我們聲明CLASS-DATA(靜態(tài)屬性)和一個(gè)方法。 在實(shí)現(xiàn)類(lèi)和方法之后,我們直接訪問(wèn)Start-Of-Selection事件中的static屬性。 然后我們只創(chuàng)建類(lèi)的實(shí)例并調(diào)用該方法。
Report ZStatic1. CLASS class1 Definition. PUBLIC Section. CLASS-DATA: name1 Type char45, data1 Type I. Methods: meth1. ENDCLASS. CLASS class1 Implementation. Method meth1. Do 4 Times. data1 = 1 + data1. Write: / data1, name1. EndDo. Skip. EndMethod. ENDCLASS. Start-Of-Selection. class1?name1 = 'ABAP Object Oriented Programming'. class1?data1 = 0. Data: Object1 Type Ref To class1, Object2 Type Ref To class1. Create Object: Object1, Object2. CALL Method: Object1→meth1, Object2→meth1.
上面的代碼產(chǎn)生以下輸出:
構(gòu)造函數(shù)是在創(chuàng)建對(duì)象或訪問(wèn)類(lèi)的組件時(shí)自動(dòng)調(diào)用的特殊方法。 每當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí),構(gòu)造器被觸發(fā),但是我們需要調(diào)用一個(gè)方法來(lái)觸發(fā)一般方法。 在下面的例子中,我們聲明了兩個(gè)公共方法method1和constructor。 這兩種方法都有不同的操作。 在創(chuàng)建類(lèi)的對(duì)象時(shí),構(gòu)造函數(shù)方法觸發(fā)其操作。
Report ZConstructor1. CLASS class1 Definition. PUBLIC Section. Methods: method1, constructor. ENDCLASS. CLASS class1 Implementation. Method method1. Write: / 'This is Method1'. EndMethod. Method constructor. Write: / 'Constructor Triggered'. EndMethod. ENDCLASS. Start-Of-Selection. Data Object1 Type Ref To class1. Create Object Object1.
上面的代碼產(chǎn)生以下輸出:
Constructor Triggered
當(dāng)你在類(lèi)的public節(jié)中聲明任何類(lèi)型的變量時(shí),你可以在任何其他實(shí)現(xiàn)中使用它。 變量可以在public section中用初始值聲明。 我們可以在一個(gè)具有不同值的方法中再次聲明該變量。 當(dāng)我們?cè)诜椒ㄖ袑?xiě)入變量時(shí),系統(tǒng)將打印更改的值。 要反映變量的先前值,我們必須使用“ME"運(yùn)算符。
在這個(gè)程序中,我們聲明了一個(gè)公共變量text1,并用一個(gè)值初始化。 我們已經(jīng)再次聲明相同的變量,但是用不同的值實(shí)例化。 在該方法中,我們使用“ME"運(yùn)算符寫(xiě)該變量以獲取先前啟動(dòng)的值。 我們通過(guò)直接聲明獲得更改的值。
Report ZMEOperator1. CLASS class1 Definition. PUBLIC Section. Data text1 Type char25 Value 'This is CLASS Attribute'. Methods method1. ENDCLASS. CLASS class1 Implementation. Method method1. Data text1 Type char25 Value 'This is METHOD Attribute'. Write: / ME→text1, / text1. ENDMethod. ENDCLASS. Start-Of-Selection. Data objectx Type Ref To class1. Create Object objectx. CALL Method objectx→method1.
上面的代碼產(chǎn)生以下輸出:
This is CLASS Attribute This is METHOD Attribute
更多建議: