学习使用OO在ABAP中.简单入门概念

ABAP Object Oriented Programming[@more@]

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/581999/viewspace-899573/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/581999/viewspace-899573/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值