ABAPObject - ooxxvv/MySAPnotes GitHub Wiki
PageOutline {{{#!comment -------------------- 以上的部份是固定的,不要變動 ----- ---------------------------------------- 在建立連結時,請標明連結的頁面類型,例如:wiki:WikiStart,而不要只用 WikiStart ----- }}}
ABAPObject
- 目前是存放物件導向程式的相關資料
Other
-
Tcode
-
SE24 => Class Builder
-
Others
Source Code
{{{#!abap
REPORT ZHEF_ABAP_OBJECTS_EXAMPLE2.
- Local classes Example 2
- Using enheritance
- Raising and handling events
- Super class Empolyee
*定義一個父類,只是定義裡面的一些數據類型,
- 具體的方法和內容在下面實現. CLASS Employee DEFINITION. *定義公共部分的數據和方法 PUBLIC SECTION. DATA/ nEmployeeNo(4) type n, "僱員員工號 cEmployeeName(30) type c, "僱員姓名 iNoOfUnits type i, "生產的的單元的數量 iPayPerUnit type i. "每個單元的價格 *定義兩個方法,一個是輸出,一個是輸入 METHODS/ CalculatePay RETURNING VALUE(iPay) TYPE i, WritePay IMPORTING VALUE(iPay) TYPE i. ENDCLASS.
*這裡是具體的實現的 CLASS Employee IMPLEMENTATION. *實現上面的方法 METHOD CalculatePay. iPay=iNoOfUnits * iPayPerUnit. ENDMETHOD.
METHOD WritePay. WRITE/ / 'The pay for employee ', nEmployeeNo, cEmployeeName, ' is / ', iPay. ENDMETHOD. ENDCLASS.
- Subclass Factory Worker
- The class FactoryWorker is a subclass of the superclass Employee.
- Note that the attribute iExtraNoUnits have been added and the
- method CalculatePay has been redefined.
*定義一個子類.從父類中繼承過來 CLASS FactoryWorker DEFINITION INHERITING FROM Employee. PUBLIC SECTION.
- 定義一個事件. EVENTS/ LazyEmployee.
- 增加一個屬性 DATA/ iExtraNoUnits type i. *覆蓋父的方法,現在從新定義CalculatePay. METHODS/
- Redefinition af the CalculatePay method from the Superclass CalculatePay REDEFINITION. ENDCLASS.
*現在實現這個個子類. CLASS FactoryWorker IMPLEMENTATION. METHOD CalculatePay.
- 重新定義方法 iPay=( iNoOfUnits * iPayPerUnit ) + ( iExtraNoUnits * iPayPerUnit * 2 ).
- 拋出處理 IF iNoOfUnits < 100. raise event LazyEmployee. ENDIF. ENDMETHOD. ENDCLASS.
- This class only to show how you can handle an event that have been
- raised in another class
- 這個類只能處理一個在其他類中拋出的事件.
- 被開除的員工的類的定義 CLASS FireEmployee DEFINITION. PUBLIC SECTION.
- Method for handling the event LazyEmployee in the FactoryWorker
- subclass.
- 定義YOUAREFIRED方法為FACTORYWORKER類中的LAZYEMPLOYEE事件. METHODS YouAreFired FOR EVENT LazyEmployee OF FactoryWorker. ENDCLASS.
*來實現這個CLASS吧
- 然後實現具體的方法,就是輸出一句話,具體處理. CLASS FireEmployee IMPLEMENTATION. METHOD YouAreFired. WRITE// 'You lazy worker, you have produced less than 100 units.' color col_heading, 'YOU ARE FIRED !!!' color col_negative intensified. ENDMETHOD. ENDCLASS.
*下面是使用CLASS
- U S I N G T H E C L A S S E S
DATA/ MyPay TYPE i.
START-OF-SELECTION. *-----------------------------------------------------------------------
-
Using the superclass Employee *-----------------------------------------------------------------------
-
Declare new Employee from the EmployeeClass DATA/ SamSmith TYPE REF TO Employee. CREATE OBJECT/ SamSmith. SamSmith->nEmployeeNo=433. SamSmith->cEmployeeName='Sam Smith'. SamSmith->iNoOfUnits=150. SamSmith->iPayPerUnit=3. MyPay=SamSmith->CalculatePay( ). CALL METHOD SamSmith->WritePay( MyPay ). SKIP. *-----------------------------------------------------------------------
-
Using the subclass FactoryWorker *-----------------------------------------------------------------------
-
Declare new FactoryWorker as subclass of the EmployeeClass DATA/ JessicaJones TYPE REF TO FactoryWorker. CREATE OBJECT/ JessicaJones. JessicaJones->nEmployeeNo=1500. JessicaJones->cEmployeeName='Jessica Jones'. JessicaJones->iNoOfUnits=300. JessicaJones->iExtraNoUnits=500. "子類中額外的一些單元 JessicaJones->iPayPerUnit=3. MyPay=JessicaJones->CalculatePay( ). CALL METHOD JessicaJones->WritePay( MyPay ). SKIP.
-
以下是處理一個事件所寫的例子,上面的兩個,一個用到父類,一個用到了子類.
-
現在是用到事件處理的例子. *-----------------------------------------------------------------------
-
Using the subclass FactoryWorker with event *----------------------------------------------------------------------- *定義個員工實例 *再定義個處理事件的對象 DATA/ LazyJohn TYPE REF TO FactoryWorker, FireHim TYPE REF TO FireEmployee. CREATE OBJECT/ LazyJohn, FireHim.
-
The SET HANDLER statement, registers a runtime trigger.
-
It links a list of handler methods to corresponding event triggers
-
Each SET HANDLER statement creates an entry in an event handler table
-
為LAZYJOHN設置一個處理HANDLER ,具體的方法是 SET HANDLER FireHim->YouAreFired FOR LazyJohn. LazyJohn->nEmployeeNo=1500. LazyJohn->cEmployeeName='Lazy John'. LazyJohn->iNoOfUnits=90. LazyJohn->iExtraNoUnits=500. LazyJohn->iPayPerUnit=3. WRITE/ / 'Lazy John has produced less than 100 units'. MyPay=LazyJohn->CalculatePay( ).
}}}