在ABAP中,Class可以是全域的也可以是區域的:
全域類別(Global Class):集中存在class pool 裡,包含了該class的關聯物件,可以被不同的程式重複使用。
區域類別(Local Class):被定義在ABAP的個別程式裡,例如:被定義在一個全域類別中的區域類別。僅在該全域類別內部程式範圍可被呼叫。全域與區域兩者在語法上幾乎完全相同。
下方選單中,有"Local Type"這個選項,開啟後可以在裡面宣告local class,接下來範例中介紹到的loca class宣告皆寫在此處。
"宣告"
CLASS <class_name> DEFINITION.
PUBLIC SECTION.
...
PROTECTED SECTION.
...
PRIVATE SECTION.
...
ENDCLASS.
"實作"
CLASS <class_name> IMPLEMENTATION.
...
ENDCLASS.
class主要分成兩個段落,宣告(definition)與實做(implementation):
宣告:
此部分用來定義類別中的型別(types)、常數()、屬性(attributes)與方法(methods)等。
以CLASS <class_name> DEFINITION.
開頭,中間區分成三個(sections),並以ENDCLASS
結尾。
可見度區段:
位於宣告中的三個區段(sections),按照其可見度分為PUBLIC SECTION / PROTECTED SECTION / PRIVATE SECTION
三個不同區段,且所有類別的宣告都必須寫在這三個區段內。每個區段的宣告為非強制性的,但必須要遵守上述的順序進行宣告。
實作:
包含了要被執行的程式碼,即為方法的實作。用CLASS <class_name> IMPLEMENTATION.
開頭並以ENDCLASS.
結尾。
實作部分是非強制性的,除非宣告階段有可執行的方法。
下表可見可宣告參數的種類及方式,包含型別、變數、常數、方法等:
CLASS <class_name> DEFINITION.
<any>SECTION."任意可見度區段"
TYPES <type> TYPE <type>.
DATA <instance_attribute> TYPE <type>[VALUE <v>].
CLASS-DATA <static_attribute> TYPE <type>[VALUE <v>].
CONSTANTS <constant> TYPE <type> VALUE <v>.
METHODS <instance_method> <signature>.
CLASS-METHODS <static_method> <signature>.
ENDCLASS.
下面程式碼是宣告一個航班類別,在PUBLIC
變數區段,宣告了兩個實體變數及一個靜態變數。然後其他兩個區段PROTECTED
與PRIVATE
因為沒有變數要宣告,所以直接註解起來。
"宣告"
CLASS lcl_connection DEFINITION.
PUBLIC SECTION.
DATA carrier_id TYPE /dmo/carrier_id.
DATA connection_id TYPE /dmo/connection_id.
CLASS-DATA conn_counter TYPE i.
* PROTECTED SECTION.
* PRIVATE SECTION.
ENDCLASS.
"實作"
CLASS lcl_connection IMPLEMENTATION.
ENDCLASS.
宣告完類別,明天來建立class的實體吧~