分类:
2010-01-07 21:26:36
sap abap面向对象(OOP)编程实例
*定义一个父类,只是定义里面的一些数据类型,
* 具体的方法和内容在下面实现.
CLASS Emploryee 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.
定义一个子类.从父类中继承过来
CLASS FactoryWorker DEFINITION INHERITING FROM Emploryee.
PUBLIC SECTION.
定义一个事件
EVENTS: LazyEmployee.
增加一个属性
DATA: iExtraNoUnits type i.
覆盖父的方法,现在从新定义CalculatePay.
METHODS:
CalculatePay REDEFINITION.
ENDCLASS.
现在实现这个个子类.
CLASS FactoryWorker IMPLEMENTATION.
METHOD CalculatePay.
重新定义方法
iPay = ( iNoOfUnits * iPayPerUnit ) +
( iExtraNoUnits * iPayPerUnit * 2 ).
抛出处理
IF iNoOfUnits < 100.
RAISE EVENT LazyEmployee.
ENDIF.
ENDMETHOD.
ENDCLASS.
这个类只能处理一个在其他类中抛出的事件.
被开除的员工的类的定义
CLASS FireEmployee DEFINITION.
PUBLIC SECTION.
*Method for handling the event LazyEmployee in the FactoryWorker
定义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
DATA: MyPay TYPE i.
START-OF-SELECTION.
DATA: SamSmith TYPE REF TO Emploryee.
CREAT OBJECT: SamSmith.
SamSmith->nEmployeeNo = 433.
SamSmith-> cEmployeeName = 'Sam Smith'.
SamSmith-> iNoOfUnits = 150.
SamSmith->iPayPerUnit = 3.
MyPay = SamSmith-> CalculatePay().
CALL METHOD SamSmith-> WritePay( MyPay ).
SKIP.
DATA: JessicaJones TYPE REF TO FactoryWorker.
CREAT 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.
以下是处理一个事件所写的例子,上面的两个,一个用到父类,一个用到了子类.
现在是用到事件处理的例子.
定义个员工实例
再定义一个处理事件的对象
DATA: LazyJohn TYPE REF TO FactoryWorker,
FireHim TYPE REF TO FireEmployee.
CREATE OBJECT: LazyJohn, FireHim.
为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( ).