Chinaunix首页 | 论坛 | 博客
  • 博客访问: 70695
  • 博文数量: 42
  • 博客积分: 2025
  • 博客等级: 大尉
  • 技术积分: 437
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-03 12:17
文章分类

全部博文(42)

文章存档

2010年(12)

2009年(30)

我的朋友

分类:

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( ).

 

 

 

 

 

阅读(2881) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~