SAP ABAP OO面向对象入门实例
abap中co包含用法

abap中co包含用法CO(Conversation Objects)是SAP ABAP中一种非常重要的技术,它主要用于处理客户端与服务器之间的交互。
CO包含了丰富的功能,可以帮助我们轻松地实现复杂的业务逻辑。
在本文中,我们将详细介绍CO在ABAP中的包含用法。
一、CO概述CO是SAP ABAP中一种面向对象的编程概念,它代表了一个与客户端进行交互的对话对象。
通过使用CO,开发者可以更方便地处理用户界面、业务逻辑和数据传输等问题。
CO的出现,使得ABAP从传统的面向过程编程语言逐渐演变为一种面向对象的编程语言。
二、CO在ABAP中的作用1.用户界面处理:CO可以用于创建和管理用户界面元素,如按钮、文本框等,方便开发者实现个性化的用户体验。
2.业务逻辑处理:CO封装了大量的业务逻辑功能,如数据验证、数据转换等,可以帮助开发者简化代码,提高开发效率。
3.数据传输:CO提供了丰富的数据传输功能,如将数据从服务器传输到客户端,或将客户端数据存储到服务器等。
三、CO包含的常用功能1.数据获取:CO提供了多种方法用于从数据库或其他数据源获取数据,如SQL查询、BAPI等。
2.数据处理:CO内置了多种数据处理功能,如数据排序、筛选、转换等。
3.数据展现:CO可以帮助开发者创建各种数据显示控件,如表格、图表等。
4.用户交互:CO提供了丰富的用户交互功能,如提示框、菜单、对话框等。
5.事务处理:CO支持事务的创建、提交和回滚等操作。
四、CO的应用场景1.企业内部业务系统开发:CO可用于开发企业内部业务系统,如订单管理、库存管理等。
2.外部接口开发:CO可用于开发与外部系统(如电商平台、第三方软件等)的接口。
3.用户定制化开发:CO可以帮助企业为用户提供个性化的业务系统,满足不同用户的需求。
五、总结CO作为SAP ABAP中一种重要的技术,其在业务逻辑处理、用户界面设计和数据传输等方面的应用非常广泛。
掌握CO的包含用法,有助于提高开发效率,降低维护成本。
abap 例子程序

abap 例子程序
ABAP(Advanced Business Application Programming)是一种由SAP开发的编程语言,用于开发企业级应用程序。
下面我将给你一个简单的ABAP例子程序来展示它的基本语法和结构:
ABAP.
REPORT ZHELLO_WORLD. "定义一个报表。
DATA: lv_message TYPE string. "定义一个字符串类型的变量。
lv_message = 'Hello, World!'. "将字符串赋值给变量。
WRITE: / lv_message. "在屏幕上输出变量的值。
在这个例子中,我们首先定义了一个报表(REPORT
ZHELLO_WORLD.),然后声明了一个字符串类型的变量(DATA:
lv_message TYPE string.),并将字符串'Hello, World!'赋值给这个变量(lv_message = 'Hello, World!')。
最后,我们使用
WRITE语句在屏幕上输出了这个变量的值(WRITE: /
lv_message.)。
这个例子很简单,但展示了ABAP的基本语法和结构。
ABAP还有许多其他功能和特性,比如数据库操作、面向对象编程等,但这个例子足以让你对ABAP有一个基本的了解。
希望这个例子能够帮助你更好地理解ABAP编程语言。
SAP ABAP OO面向对象入门实例

*& Report Y_TEST_A * *&---------------------------------------------------------------------* *& 简单ABAP对象 * *&---------------------------------------------------------------------*REPORT y_test_a .*&---------------------------------------------------------------------* *& Class simpleobj*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS simpleobj DEFINITION.PUBLIC SECTION.METHODS: show_text.PRIVATE SECTION.DATA text(100) TYPE c VALUE 'This is my first ABAP object.'. ENDCLASS. "simpleobj*&---------------------------------------------------------------------* *& Class (Implementation) SIMPLEOBJ*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS simpleobj IMPLEMENTATION.METHOD show_text.WRITE text.ENDMETHOD. "show_textENDCLASS. "SIMPLEOBJ* Global Data DeclaratioinDATA ob_app TYPE REF TO simpleobj.START-OF-SELECTION.CREATE OBJECT ob_app.CALL METHOD ob_app->show_text.*& Report Y_TEST_A_1 * *& * *&---------------------------------------------------------------------* *& * *& 类的静态属性 * *&---------------------------------------------------------------------*REPORT y_test_a_1 .*&---------------------------------------------------------------------* *& Class vehicle*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS vehicle DEFINITION.PUBLIC SECTION.CLASS-DATA class_name(10) VALUE 'Vehicle'.METHODS:accelerate,show_speed.PROTECTED SECTION.DATA speed TYPE i.CONSTANTS: pi TYPE p DECIMALS 2 VALUE '3.14'.ENDCLASS. "vehicle*&---------------------------------------------------------------------* *& Class (Implementation) vehicle*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS vehicle IMPLEMENTATION.METHOD accelerate.speed = speed + 1.ENDMETHOD. "accelerateMETHOD show_speed.WRITE: / 'Speed:' ,speed.ENDMETHOD. "show_speedENDCLASS. "vehicleDATA ob_app1 TYPE REF TO vehicle.DATA ob_app2 TYPE REF TO vehicle.DATA ob_app3 TYPE REF TO vehicle.DATA o_vehicle TYPE REF TO z_cl_vehicle. "引用全局类START-OF-SELECTION.CREATE OBJECT ob_app1.CREATE OBJECT ob_app2.WRITE: 'ob_app1',ob_app1->class_name.WRITE: / 'ob_app2',ob_app2->class_name.WRITE: / 'vehicle',vehicle=>class_name.SKIP.ob_app1->class_name = 'Ship'.WRITE: / 'ob_app1',ob_app1->class_name.WRITE: / 'ob_app2',ob_app2->class_name.WRITE: / 'vehicle',vehicle=>class_name.SKIP.vehicle=>class_name = 'Bus'.CREATE OBJECT ob_app3.WRITE: / 'ob_app3',ob_app3->class_name.CALL METHOD ob_app3->accelerate.CALL METHOD ob_app3->show_speed.CREATE OBJECT o_vehicle.DO 5 TIMES.CALL METHOD o_vehicle->accelerate.ENDDO.CALL METHOD o_vehicle->show_speed.DATA o_vehicle2 LIKE o_vehicle.o_vehicle2 = o_vehicle.CLEAR o_vehicle.CALL METHOD o_vehicle2->show_speed.WRITE '对象只要有被引用的变量,就是活动的。
SAP_ABAP_OO_实现_CL_SALV_TABLE

SAP_ABAP_OO_实现_CL_SALV_TABLEOO实现ALV⼀、最简单的ALV显⽰以前都是通过函数“REUSE_ALV_GRID_DISPLAY”来显⽰列表,这种⽅式是⾯向过程的,现在有另外⼀种⾯向对象化的⽅式来显⽰列表,函数REUSE_ALV_GRI D_DISPLAY可以做到的它也能够做到。
它主要是通过⼀个类CL_SALV_TABLE来实现的.下⾯让我们来实现最简单的ALV列表。
1取得要显⽰的数据。
2.调⽤类CL_SALV_TABLE的静态⽅法Factory()创建类的实例。
3.取得实例之后再调⽤⽅法Display()显⽰列表.处理过程完成,最后让我们看⼀下显⽰结果。
下⾯是报表的所有源代码:关于ALV的最全⽂档可以参考SAP Help/doc/67f98ad53186bceb19e8bb3a.html /saphelp_nw70/helpdata/EN/5e/88d440e14f8431e10 000000a1550b0/content.htm⼆、ALV显⽰的三种形式⼀般的ALV有三种显⽰形式,分别为⼀、普通的List⼆、全屏的Grid三、在⾃定义屏幕的显⽰的Grid跟以往实现这三种ALV显⽰⽅式相⽐,以往的三种显⽰⽅式分别是调⽤不同的Function和Class,实现⽅式复杂。
现在这三种显⽰⽅式可以通过⼀个类(CL _SALV_TABLE)来实现,⽽且通过这个类和它的⼦类可以更加容易的实现ALV的功能,⽐如:排序,总计,过滤,页眉页脚,单击双击事件等。
下⾯让我们⼀步⼀步地来实现这三种显⽰形式。
1.⾸先我们先创建选择屏幕,屏幕有三个选项,三个选项分别为三种显⽰⽅式。
2取得要显⽰的数据。
3.判断选择屏幕的选项创建不同的实例。
4.当⽤户选择第⼀个选项,列表输出为全屏的⽹格列表,执⾏⽅法alv_ful l( )。
5.当⽤户选择第⼆个选项,列表输出为普通的列表,执⾏⽅法alv_list( ). alv_list⽅法跟alv_full⽅法不同的是在创建实例的时候多了⼀个选项list_ display = ‘X’.6.当⽤户选择第三个选项,列表在⾃定义屏幕上输出⽹格列表,执⾏⽅法a lv_grid( ).⽅法alv_grid()调⽤了屏幕100。
SAP-ABAP-实例第4章-面向对象程序设计

SAP-ABAP-实例第4章-面向对象程序设计*----------------------------------------------------------------------** CLASS callobj DEFINITION*----------------------------------------------------------------------**类的申明:*----------------------------------------------------------------------*CLASS callobj DEFINITION.PUBLIC SECTION.CLASS-DATA:para(30) type C VALUE'the static class parameter!'.DATA count TYPE I.METHODS:showdata1,showdata2.PROTECTED SECTION.PRIVATE SECTION.METHODS:showdata3.ENDCLASS. "callobj DEFINITION*----------------------------------------------------------------------** CLASS callobj IMPLEMENTATION*----------------------------------------------------------------------**类的实现:*----------------------------------------------------------------------*CLASS callobj IMPLEMENTATION.METHOD showdata1.WRITE:/,'showdata1:Hello sap'.ENDMETHOD. "showdata 1METHOD showdata2.count = 1.WRITE :/,'showdata2:',count.CALL METHOD showdata3.ENDMETHOD. "showdata 1METHOD showdata3.Write:/,'showdata3: the private method!'.ENDMETHOD. "showdata 3ENDCLASS. "callobj IMPLEMENTATION*----------------------------------------------------------------------** CLASS callobj2 DEFINITION*----------------------------------------------------------------------**类2的声明:*----------------------------------------------------------------------*CLASS callobj2 DEFINITION.PUBLIC SECTION.CLASS-METHODS:call_static_class.ENDCLASS. "callobj2 DEFINITION*----------------------------------------------------------------------** CLASS callobj2 IMPLEMENTATION*----------------------------------------------------------------------**类2的实现:*----------------------------------------------------------------------*CLASS callobj2 implementation.METHOD call_static_class.WRITE:/,callobj=>para.ENDMETHOD. "call_static_classENDCLASS. "callobj2 IMPLEMENTATIONdata obj type ref to callobj.data:methname type string.START-OF-SELECTION.CREATE OBJECT obj.methname = 'showdata2'.CALL METHOD:obj->showdata1."obj->(methname).CALL METHOD:obj->showdata2.CALL METHOD:callobj2=>call_static_class.========================================================*----------------------------------------------------------------------** CLASS Demo DEFINITION*----------------------------------------------------------------------** 步骤一:声明变量:*----------------------------------------------------------------------*CLASS Demo DEFINITION.PUBLIC SECTION.Class-METHODs:Display.PROTECTED SECTION.PRIVATE SECTION.ENDCLASS. "Demo DEFINITION*----------------------------------------------------------------------** CLASS Demo IMPLEMENTATION*----------------------------------------------------------------------**步骤二:实现变量:*----------------------------------------------------------------------*CLASS Demo IMPLEMENTATION.METHOD Display.WRITE:'asdfasdf'.ENDMETHOD. "DemoENDCLASS. "Demo IMPLEMENTATION"步骤三:开始START-OF-SELECTION."步骤四:声明对象:Data obj TYPE REF TO Demo."步骤五:实例化对象:CREATE OBJECT obj."步骤六:调用类方法:CALL METHOD obj->Display.。
abap ooalv创建步骤

abap ooalv创建步骤以ABAP OO ALV创建步骤为标题的文章ABAP是一种面向对象的编程语言,用于在SAP系统中进行开发和定制。
其中,OO(面向对象)ALV(ABAP列表视图)是一种用于显示和处理数据的功能强大的工具。
本文将介绍使用ABAP OO ALV创建步骤的详细过程。
第一步:定义内部表和结构在使用ABAP OO ALV之前,首先需要定义一个内部表和一个结构。
内部表用于存储数据,而结构用于定义表格的列。
可以根据实际需要定义多个内部表和结构。
第二步:创建ALV对象使用ABAP OO ALV创建步骤的下一步是创建一个ALV对象。
可以使用CL_GUI_ALV_GRID类来创建一个ALV对象。
在创建对象时,需要传递内部表和结构。
第三步:设置ALV的属性创建ALV对象后,可以通过设置属性来定制ALV的外观和行为。
可以设置行高、列宽、表头、排序等属性。
还可以设置事件处理程序来响应用户的操作。
第四步:显示ALV设置ALV属性后,需要调用ALV对象的显示方法来显示ALV。
可以使用方法SET_TABLE_FOR_FIRST_DISPLAY来显示ALV。
在调用该方法时,需要传递内部表和结构,并指定是否要显示表头。
第五步:处理用户交互一旦ALV显示出来,用户可以通过点击列头进行排序,通过双击行来查看详细信息,通过右键菜单执行其他操作等。
为了处理这些用户交互,需要编写相应的事件处理程序。
第六步:刷新ALV当内部表的数据发生变化时,需要刷新ALV以反映最新的数据。
可以使用方法REFRESH_TABLE_DISPLAY来刷新ALV。
在调用该方法时,需要传递内部表和结构。
第七步:释放资源最后一步是释放ALV对象以释放内存。
可以使用方法FREE来释放ALV对象。
通过以上七个步骤,可以使用ABAP OO ALV创建一个功能强大且灵活的列表视图。
通过定制ALV的外观和行为,并处理用户交互,可以实现各种复杂的数据显示和处理需求。
ABAP_OO开发实例
ABAP面向对象编程在此次的例子中,我们以雇员的工资为蓝图,设计一个程序,然后再一步一步的改进我们写的程序,使其有更好的扩展性以及维护性。
该例中所使用的基类是employee类,其子类包括:boss类,不管工作多长时间,他总是有固定的周薪;销售员类commission worker,他的收入是一小部分工资加上销售额的一定提成;计件工类piece worker,他的收入取决于生产的计件数量。
我会列出代码,基本上是一节一个类,最后是这些类的测试程序。
先给出类图如下:第一节:employee类的实现*&---------------------------------------------------------------------**& Include ZBOBO_OO_EMPLOYEE_CLASS*&---------------------------------------------------------------------** 定义一个基类,该类为抽象类,不能直接实例化,必须在对象中实例化CLASS EMPLOYEE DEFINITION ABSTRACT.PUBLIC SECTION.METHODS:*定义构造方法,有两个参数,分别为姓, 名CONSTRUCTOR IMPORTING A TYPE STRINGB TYPE STRING,* 定义getter方法,分别得到姓名GETFIRSTNAME RETURNING V ALUE(FI) TYPE STRING,GETLASTNAME RETURNING V ALUE(LA) TYPE STRING,*定义两个抽象方法,因为各种employee的收入结构不同,必须在其子类中*实例化EARNINGS ABSTRACT RETURNING V ALUE(EARN) TYPE F,PRINT ABSTRACT.PRIV A TE SECTION.*定义private变量, 该变量不能在子类中使用DA TA: FIRST_NAME TYPE STRING,LAST_NAME TYPE STRING.ENDCLASS.*类的实现CLASS EMPLOYEE IMPLEMENTA TION.*初始化类METHOD CONSTRUCTOR.FIRST_NAME = A.LAST_NAME = B.ENDMETHOD.*实现两getter方法METHOD GETFIRSTNAME.FI = FIRST_NAME.ENDMETHOD.METHOD GETLASTNAME.LA = LAST_NAME.ENDMETHOD.ENDCLASS.第二节:boss类的实现*&---------------------------------------------------------------------**& Include ZBOBO_OO_BOSS_CLASS*&---------------------------------------------------------------------** 定义boss类,该类从employee中继承CLASS BOSS DEFINITION INHERITING FROM EMPLOYEE.PUBLIC SECTION.METHODS:*定义构造函数,初始化对象CONSTRUCTOR IMPORTING BOSS_A TYPE STRINGBOSS_B TYPE STRINGS TYPE F,* 定义boss类的方法(setter方法)SETWEEKLYSALARY IMPORTING WS TYPE F,*实现基类中的抽象方法,因为boss类有自己的工资结构*所以在此部分实现EARNINGS REDEFINITION,PRINT REDEFINITION.PRIV A TE SECTION.DA TA: WEEKLYSALARY TYPE F.ENDCLASS.CLASS BOSS IMPLEMENTA TION.METHOD CONSTRUCTOR.*调用父类的构造函数CALL METHOD SUPER->CONSTRUCTOREXPORTING A = BOSS_AB = BOSS_B.*根据新的传入变量,设置boss类私有实例变量WEEKLYSALARY = S.ENDMETHOD.*setter方法的实现METHOD SETWEEKLYSALARY.WEEKLYSALARY = WS.ENDMETHOD.*定义工资以及输出的实现METHOD EARNINGS.EARN = WEEKLYSALARY.ENDMETHOD.METHOD PRINT.DA TA: FIRST TYPE STRING,LAST TYPE STRING.FIRST = GETFIRSTNAME( ).LAST = ME->GETLASTNAME( ).WRITE: / 'Boss name is:',LAST,FIRST.ENDMETHOD.ENDCLASS.第三节:commission worker类的实现*&---------------------------------------------------------------------**& Include ZBOBO_OO_COMWORKER_CLASS*&---------------------------------------------------------------------** 定义commission worker类,他的收入是一小部分基本工资加上销售额的*一定的百分比CLASS COMMISSIONWORKER DEFINITION INHERITING FROM EMPLOYEE. PUBLIC SECTION.METHODS:*定义构造函数CONSTRUCTOR IMPORTING A TYPE STRINGB TYPE STRINGC TYPE FD TYPE FE TYPE I,*定义setter以及getter方法SETSALARY IMPORTING S TYPE F,GETSALARY RETURNING V ALUE(SA) TYPE F,SETCOMMISSION IMPORTING C TYPE F,SETQUANTITY IMPORTING Q TYPE I,*重定义父类的抽象方法EARNINGS REDEFINITION,PRINT REDEFINITION.PRIV A TE SECTION.*定义私有实例变量DA TA: SALARY TYPE F,COMMISSION TYPE F,QUANTITY TYPE I.ENDCLASS.*实现commission worker类CLASS COMMISSIONWORKER IMPLEMENTA TION.METHOD CONSTRUCTOR.CALL METHOD SUPER->CONSTRUCTOREXPORTING A = A B = B.SALARY = C.COMMISSION = D.QUANTITY = E.ENDMETHOD.METHOD SETSALARY.SALARY = S.ENDMETHOD.METHOD GETSALARY.SA = SALARY.ENDMETHOD.METHOD SETCOMMISSION.COMMISSION = C.ENDMETHOD.METHOD SETQUANTITY.QUANTITY = Q.ENDMETHOD.* 实现工资的算法METHOD EARNINGS.EARN = SALARY + COMMISSION * QUANTITY.ENDMETHOD.*实现输出方法METHOD PRINT.DA TA: FI TYPE STRING,LA TYPE STRING.WRITE: / 'Commission Worker:'.FI = GETFIRSTNAME( ).LA = GETLASTNAME( ).WRITE: FI,LA.ENDMETHOD.ENDCLASS.第四节:piece worker类的实现*&---------------------------------------------------------------------**& Include ZBOBO_OO_PIWORKER_CLASS*&---------------------------------------------------------------------** 定义piece worker类,他的工资取决于他生产的计件数量CLASS PIWORKER DEFINITION INHERITING FROM EMPLOYEE. PUBLIC SECTION.METHODS:*定义构造函数CONSTRUCTOR IMPORTING A TYPE STRINGB TYPE STRINGW TYPE FQ TYPE I,*setter 方法SETWAGE IMPORTING W TYPE F,SETQUANTITY IMPORTING Q TYPE I,*实例化抽象方法EARNINGS REDEFINITION,PRINT REDEFINITION.PRIV A TE SECTION.DA TA: WAGE TYPE F,QUAN TYPE I.ENDCLASS.CLASS PIWORKER IMPLEMENTA TION.METHOD CONSTRUCTOR.CALL METHOD SUPER->CONSTRUCTOREXPORTING A = A B = B.WAGE = W.QUAN = Q.ENDMETHOD.METHOD SETWAGE.WAGE = W.ENDMETHOD.METHOD SETQUANTITY.QUAN = Q.ENDMETHOD.*计算工资METHOD EARNINGS.EARN = QUAN * WAGE.ENDMETHOD.*重定义输出方法METHOD PRINT.DA TA: FI TYPE STRING,LA TYPE STRING.WRITE: / 'Piece Worker:'.FI = GETFIRSTNAME( ).LA = GETLASTNAME( ).WRITE: FI,LA.ENDMETHOD.ENDCLASS.第五节:测试程序的实现*&---------------------------------------------------------------------* *& Report ZBOBO_OO_SAPLINK_004*&*&---------------------------------------------------------------------* *&*&*&---------------------------------------------------------------------* REPORT ZBOBO_OO_SAPLINK_004.INCLUDE ZBOBO_OO_EMPLOYEE_CLASS. INCLUDE ZBOBO_OO_BOSS_CLASS.INCLUDE ZBOBO_OO_COMWORKER_CLASS. INCLUDE ZBOBO_OO_PIWORKER_CLASS.*定义引用变量DA TA: EM_REF TYPE REF TO EMPLOYEE,BO_REF TYPE REF TO BOSS,CO_REF TYPE REF TO COMMISSIONWORKER,PI_REF TYPE REF TO PIWORKER.DA TA: EARNS TYPE F.START-OF-SELECTION.*创建boss对象CREA TE OBJECT BO_REFEXPORTING BOSS_A = 'Jhon'BOSS_B = 'Smith'S = '800.00'.*narrowing castEM_REF = BO_REF.*输出到屏幕CALL METHOD EM_REF->PRINT.EARNS = EM_REF->EARNINGS( ).WRITE: / 'Earned: $',EARNS DECIMALS 2 EXPONENT 0. *下面的代码基本上和上面的相同CREA TE OBJECT CO_REFEXPORTING A = 'Sue'B = 'Jones'C = '800.00'D = '3.0'E = 150.EM_REF = CO_REF.CALL METHOD EM_REF->PRINT.EARNS = EM_REF->EARNINGS( ).WRITE: / 'Earned: $',EARNS DECIMALS 2 EXPONENT 0. CREA TE OBJECT PI_REFEXPORTING A = 'BOB'B = 'LEWIS'W = '2.5'Q = 200.EM_REF = PI_REF.CALL METHOD EM_REF->PRINT.EARNS = EM_REF->EARNINGS( ).WRITE: / 'Earned: $',EARNS DECIMALS 2 EXPONENT 0.。
学习使用OO在ABAP中.简单入门概念.用个例子来说明
学习使用OO在ABAP中.简单入门概念.用个例子来说明ABAP Object Oriented ProgrammingREPORT ZHEF_ABAP_OBJECTS_EXAMPLE2.*定义一个父类,只是定义里面的一些数据类型,* 具体的方法和内容在下面实现.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 SuperclassCalculatePay 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 YouAreFiredFOR EVENT LazyEmployeeOF 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 EmployeeClassDATA: 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 EmployeeClassDATA: 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( ).。
ABAP开发简单教程及案例
ABAP开发简单教程及案例ABAP三月通前言...................................................................... (2)一.基础篇...................................................................... ..................................................... 2 1.什么是ABAP ?.................................................................. ...................................... 2 2.ABAP开发环境的建立...................................................................... ...................... 5 3.获得AccessKey .................................................................... ............................. 6 4.ABAP workbench和ABAP dictionary.............................................................. ... 6 5.第一个程序-Hello World................................................................... ................. 7 6.ABAP语法简介...................................................................... .................................. 7 7.Open SQL和Native SQL..................................................................... .................. 8 8.内表和工作区......................................................................................................... 8 9.使用字段符号...................................................................... ................................... 8 10.模块化程序...................................................................... ..................................... 8 11.文件处理...................................................................... ......................................... 8 12.簇数据库和逻辑数据库...................................................................... ................. 8 13.消息和错误处理...................................................................... ............................. 8 14.使用用户授权...................................................................... ............................... 14 15.调用外部程序和程序动态生产...................................................................... ... 15 16.选择屏幕...................................................................... ....................................... 15 17.使用程序运行变式...................................................................... ....................... 15 18.制作Tcode................................................................... (15)二.加强篇...................................................................... .. (15)1.CATT.................................................................. .. (15)2.BDC................................................................... ...................................................... 16 3.制作background job..................................................................... (16)4.SapScript............................................................. (16)5.Smartform............................................................. ................................................ 16 6.SAP Query................................................................... (16)7.ALV................................................................... (16)8.ALE/iDoc.............................................................. ................................................. 16 9.Report painter和Drilldown Report. (16)10.RFC/BAPI............................................................. ................................................ 16 11.编写用户增强...................................................................... ............................... 16 12.深入ABAP工作台...................................................................... . (16)三.实战篇...................................................................... ................................................... 18 MM模块开发实例...................................................................... ............................... 18 SD模块开发实例...................................................................... ............................... 31 PP模块开发实例...................................................................... ............................... 31 FI模块开发实例...................................................................... ............................... 32 CO模块开发实例...................................................................... ............................... 48 开发项目流程简介...................................................................... . (58)附录:..................................................................... (59)ABAP/Basis TransactionCodes ....................................................... 错误~未定义书签。
SAP ABAP程序设计基础教程第11章
除使用DATA语句定义类属性外,还可以使用CONSTANT语句来 定义类的常量成员,类常量不能在编译和运行期间修改,必须在类 定义时指明其值;还可以使用TYPES语句在类中定义数据类型,数 据类型也相当于静态属性,其定义方法与普通ABAP的程序类似, 如: CLASS test_class DEFINITION. PUBLIC SECTION. CONSTANTS pi TYPE p VALUE '3.14'. "公共常量 TYPES myid_type(18) TYPE c . "自定义类型 ENDCLASS.
在ABAP面向对象中,事件的触发和处理是通过特定的 方法来完成的,一个方法作为触发者触发事件 (Events Trigger),而另一个方法则作为事件处理 者捕获并处理事件(Events user),事件触发者和事 件的用户并不一定需要隶属于同一个类中或同一个对 象中。
Bell类和Teacher类的定义部分
引用变量ME的用法
类继承
基类Person、子类Teacher和Student之间继承关系的定义
基类Person、子类Teacher和Student的类实现
基类Person、子类Teacher和Student的类对象实例方法的访问
构造函数的继承与重定义
抽象类与最终类
抽象类是不能有任何对象实例的基类,其目的就是用于被子类 继承。有时一个基类具有多个子类,但该基类只是作为模板出 现的,不具有任何被实例化的意义,则可以将该类声明为抽象 类(Abstract Class)。 CLASS class DEFINITION ABSTRACT. ...... ENDCLASS. 抽象类中可以包含抽象方法,一个抽象方法不能在抽象类本身 中被实现,而必须在其子类中被实现,含有抽象方法的类必须 被定义为抽象类。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*& Report Y_TEST_A * *&---------------------------------------------------------------------* *& 简单ABAP对象 * *&---------------------------------------------------------------------*REPORT y_test_a .*&---------------------------------------------------------------------* *& Class simpleobj*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS simpleobj DEFINITION.PUBLIC SECTION.METHODS: show_text.PRIVATE SECTION.DATA text(100) TYPE c VALUE 'This is my first ABAP object.'. ENDCLASS. "simpleobj*&---------------------------------------------------------------------* *& Class (Implementation) SIMPLEOBJ*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS simpleobj IMPLEMENTATION.METHOD show_text.WRITE text.ENDMETHOD. "show_textENDCLASS. "SIMPLEOBJ* Global Data DeclaratioinDATA ob_app TYPE REF TO simpleobj.START-OF-SELECTION.CREATE OBJECT ob_app.CALL METHOD ob_app->show_text.*& Report Y_TEST_A_1 * *& * *&---------------------------------------------------------------------* *& * *& 类的静态属性 * *&---------------------------------------------------------------------*REPORT y_test_a_1 .*&---------------------------------------------------------------------* *& Class vehicle*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS vehicle DEFINITION.PUBLIC SECTION.CLASS-DATA class_name(10) VALUE 'Vehicle'.METHODS:accelerate,show_speed.PROTECTED SECTION.DATA speed TYPE i.CONSTANTS: pi TYPE p DECIMALS 2 VALUE '3.14'.ENDCLASS. "vehicle*&---------------------------------------------------------------------* *& Class (Implementation) vehicle*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS vehicle IMPLEMENTATION.METHOD accelerate.speed = speed + 1.ENDMETHOD. "accelerateMETHOD show_speed.WRITE: / 'Speed:' ,speed.ENDMETHOD. "show_speedENDCLASS. "vehicleDATA ob_app1 TYPE REF TO vehicle.DATA ob_app2 TYPE REF TO vehicle.DATA ob_app3 TYPE REF TO vehicle.DATA o_vehicle TYPE REF TO z_cl_vehicle. "引用全局类START-OF-SELECTION.CREATE OBJECT ob_app1.CREATE OBJECT ob_app2.WRITE: 'ob_app1',ob_app1->class_name.WRITE: / 'ob_app2',ob_app2->class_name.WRITE: / 'vehicle',vehicle=>class_name.SKIP.ob_app1->class_name = 'Ship'.WRITE: / 'ob_app1',ob_app1->class_name.WRITE: / 'ob_app2',ob_app2->class_name.WRITE: / 'vehicle',vehicle=>class_name.SKIP.vehicle=>class_name = 'Bus'.CREATE OBJECT ob_app3.WRITE: / 'ob_app3',ob_app3->class_name.CALL METHOD ob_app3->accelerate.CALL METHOD ob_app3->show_speed.CREATE OBJECT o_vehicle.DO 5 TIMES.CALL METHOD o_vehicle->accelerate.ENDDO.CALL METHOD o_vehicle->show_speed.DATA o_vehicle2 LIKE o_vehicle.o_vehicle2 = o_vehicle.CLEAR o_vehicle.CALL METHOD o_vehicle2->show_speed.WRITE '对象只要有被引用的变量,就是活动的。
'.*&---------------------------------------------------------------------* *& Report Y_TEST_A_2 * *& * *&---------------------------------------------------------------------* *& * *& 类方法参数调用 * *&---------------------------------------------------------------------*REPORT y_test_a_2 .*&---------------------------------------------------------------------* *& Class vehicle*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS vehicle DEFINITION.PUBLIC SECTION.METHODS:exp_speed IMPORTING cname TYPE stringEXPORTING ispeed TYPE i,accelerate IMPORTING rate TYPE i,add CHANGING addone TYPE i.PRIVATE SECTION.DATA speed TYPE i VALUE 0.ENDCLASS. "vehicle*&---------------------------------------------------------------------* *& Class (Implementation) vehicle*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS vehicle IMPLEMENTATION.METHOD accelerate.speed = speed + rate.ENDMETHOD. "accelerateMETHOD exp_speed.ispeed = speed.WRITE cname.ENDMETHOD. "show_speedMETHOD add.addone = addone + 1.ENDMETHOD. "addENDCLASS. "vehicleDATA o_vehicle TYPE REF TO vehicle.DATA int TYPE i VALUE 3.DATA fname TYPE string VALUE 'Speed = '.START-OF-SELECTION.CREATE OBJECT o_vehicle.CALL METHOD o_vehicle->accelerateEXPORTINGrate = int.CALL METHOD o_vehicle->accelerateEXPORTINGrate = int.CALL METHOD o_vehicle->exp_speedEXPORTINGcname = fnameIMPORTINGispeed = int.WRITE:int.CALL METHOD o_vehicle->addCHANGINGaddone = int.WRITE: / int.*&---------------------------------------------------------------------* *& Report Y_TEST_A_3 * *& * *&---------------------------------------------------------------------* *& * *& 类函数方法 * *&---------------------------------------------------------------------*REPORT y_test_a_3 .*&---------------------------------------------------------------------* *& Class circle*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS circle DEFINITION.PUBLIC SECTION.METHODS get_area IMPORTING value(i_radius) TYPE iRETURNING value(r_size) TYPE f.PRIVATE SECTION.CONSTANTS pi TYPE f VALUE '3.14159265'.ENDCLASS. "circle*&---------------------------------------------------------------------* *& Class (Implementation) circle*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS circle IMPLEMENTATION.METHOD get_area.r_size = i_radius ** 2 * pi.ENDMETHOD. "get_areaENDCLASS. "circlePARAMETERS radius TYPE i.DATA: o_circle TYPE REF TO circle,area TYPE f.START-OF-SELECTION.CREATE OBJECT o_circle.CALL METHOD o_circle->get_areaEXPORTINGi_radius = radiusRECEIVINGr_size = area.WRITE: / area.area = o_circle->get_area( radius ).WRITE: / area.*&---------------------------------------------------------------------* *& Report Y_TEST_A_4 * *& * *&---------------------------------------------------------------------* *& * *& 类的构造方法 * *&---------------------------------------------------------------------*REPORT y_test_a_4 .*---------------------------------------------------------------------* * CLASS vehicle DEFINITION*---------------------------------------------------------------------* **---------------------------------------------------------------------* CLASS vehicle DEFINITION.PUBLIC SECTION.METHODS: accelerate IMPORTING rate TYPE i,constructor IMPORTING i_speed TYPE i,show_speed.PRIVATE SECTION.DATA speed TYPE i VALUE 0.ENDCLASS. "vehicle DEFINITION*&---------------------------------------------------------------------* *& Class (Implementation) vehicle*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS vehicle IMPLEMENTATION.METHOD accelerate.speed = speed + rate.ENDMETHOD. "accelertateMETHOD show_speed.WRITE / speed.ENDMETHOD. "show_speedMETHOD constructor.speed = i_speed.WRITE: 'constructor i_speed = ',speed.ENDMETHOD. "constructorENDCLASS. "vehicleDATA o_vehicle TYPE REF TO vehicle.START-OF-SELECTION.CREATE OBJECT o_vehicle EXPORTING i_speed = 4.CALL METHOD o_vehicle->accelerateEXPORTINGrate = 2.CALL METHOD o_vehicle->show_speed.*&---------------------------------------------------------------------* *& Report Y_TEST_A_5 * *& * *&---------------------------------------------------------------------* *& * *& 类的继承多态 * *&---------------------------------------------------------------------* REPORT y_test_a_5 .*&---------------------------------------------------------------------* *& Class superclass*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS superclass DEFINITION.PUBLIC SECTION.METHODS write_first.METHODS write_second.ENDCLASS. "superclass*&---------------------------------------------------------------------* *& Class subclass*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS subclass DEFINITION INHERITING FROM superclass.PUBLIC SECTION.METHODS write_third.ENDCLASS. "subclass*&---------------------------------------------------------------------* *& Class redefclass*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS redefclass DEFINITION INHERITING FROM superclass.PUBLIC SECTION.METHODS:write_me,write_first REDEFINITION.ENDCLASS. "redefclass*&---------------------------------------------------------------------* *& Class (Implementation) superclass*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS superclass IMPLEMENTATION.METHOD write_first.WRITE: / 'The first method'.ENDMETHOD. "write_firstMETHOD write_second.WRITE: / 'The second method'.ENDMETHOD. "write_secondENDCLASS. "superclass*&---------------------------------------------------------------------* *& Class (Implementation) subclass*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS subclass IMPLEMENTATION.METHOD write_third.WRITE: / 'The third method'.ENDMETHOD. "write_thirdENDCLASS. "subclass*&---------------------------------------------------------------------* *& Class (Implementation) REDEFCLASS*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS redefclass IMPLEMENTATION.METHOD write_me.CALL METHOD me->write_first.ENDMETHOD. "write_superMETHOD write_first.WRITE: / 'The redefinition method'.CALL METHOD super->write_first.ENDMETHOD. "write_firstENDCLASS. "REDEFCLASSDATA: inher_obj TYPE REF TO subclass.DATA: redef_obj TYPE REF TO redefclass.START-OF-SELECTION.CREATE OBJECT inher_obj.CREATE OBJECT redef_obj.CALL METHOD:inher_obj->write_first,inher_obj->write_second,inher_obj->write_third.SKIP.CALL METHOD:redef_obj->write_first.CALL METHOD:redef_obj->write_me.*&---------------------------------------------------------------------* *& Report Y_TEST_A_6 * *& * *&---------------------------------------------------------------------* *& * *& 类的抽象和抽象方法最终和最终方法 * *&---------------------------------------------------------------------*REPORT y_test_a_6 .*&---------------------------------------------------------------------* *& Class superclass*&---------------------------------------------------------------------** Text*----------------------------------------------------------------------* CLASS superclass DEFINITION ABSTRACT.PUBLIC SECTION.DATA:para(30) TYPE c VALUE 'The super abstract method'.METHODS write_first ABSTRACT.ENDCLASS. "superclass*&---------------------------------------------------------------------* *& Class subclass*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS subclass DEFINITION INHERITING FROM superclass.PUBLIC SECTION.METHODS write_first REDEFINITION.METHODS write_finalmethod FINAL.ENDCLASS. "subclass*&---------------------------------------------------------------------* *& Class finalclass*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS finalclass DEFINITION FINAL.PUBLIC SECTION.METHODS:write_finalclass.ENDCLASS. "finalclass*&---------------------------------------------------------------------* *& Class (Implementation) subclass*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS subclass IMPLEMENTATION .METHOD write_first.WRITE:para.ENDMETHOD. "write_firstMETHOD write_finalmethod .WRITE: / 'The final method'.ENDMETHOD. "write_subENDCLASS. "subclass*&---------------------------------------------------------------------* *& Class (Implementation) finalclass*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS finalclass IMPLEMENTATION.METHOD write_finalclass.WRITE: / 'The final class'.ENDMETHOD. "write_finalclassENDCLASS. "finalclassDATA inher_obj TYPE REF TO subclass.DATA final_obj TYPE REF TO finalclass.START-OF-SELECTION.CREATE OBJECT inher_obj.CREATE OBJECT final_obj.CALL METHOD inher_obj->write_first.CALL METHOD inher_obj->write_finalmethod.CALL METHOD final_obj->write_finalclass.*&---------------------------------------------------------------------* *& Report Y_TEST_A_7 * *& * *&---------------------------------------------------------------------* *& * *& 类的接口 * *&---------------------------------------------------------------------*REPORT y_test_a_7 .*---------------------------------------------------------------------* * INTERFACE output*---------------------------------------------------------------------* **---------------------------------------------------------------------*INTERFACE output.METHODS write.ENDINTERFACE. "output*---------------------------------------------------------------------* * INTERFACE status*---------------------------------------------------------------------* **---------------------------------------------------------------------* INTERFACE status.DATA int TYPE i .CLASS-DATA cint TYPE i.METHODS write.CONSTANTS const TYPE i VALUE 30.ENDINTERFACE. "status*&---------------------------------------------------------------------* *& Class superclass*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS superclass DEFINITION.PUBLIC SECTION.INTERFACES :output,status,zintest.METHODS increment.PRIVATE SECTION.DATA count TYPE i.ENDCLASS. "superclass*&---------------------------------------------------------------------* *& Class (Implementation) superclass*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS superclass IMPLEMENTATION.METHOD output~write.WRITE / 'Hello SAP'.ENDMETHOD. "output~writeMETHOD status~write.WRITE: / 'Count in count is ',count.ENDMETHOD. "status~writeMETHOD zintest~test.WRITE: / 'it is the BADI test interface'.ENDMETHOD. "zintest~testMETHOD increment.ADD 1 TO count.ENDMETHOD. "incrementENDCLASS. "superclassDATA:super_obj TYPE REF TO superclass,super_object TYPE REF TO superclass.DATA:intf_obj TYPE REF TO output, "引用接口outputintf_table TYPE TABLE OF REF TO output. "引用接口创建内表DATA:interface_obj TYPE REF TO status, "引用接口statusinterface_table TYPE TABLE OF REF TO status. "引用接口创建内表DATA:badi_obj TYPE REF TO zintest. "引用接口zintestSTART-OF-SELECTION.*实例调用接口方法,类引用CREATE OBJECT : super_obj,super_object.CALL METHOD: super_obj->output~write.SKIP.* 直接调用接口方法,需要通过内表实现,接口引用APPEND super_obj TO intf_table.LOOP AT intf_table INTO intf_obj.CALL METHOD intf_obj->write.ENDLOOP.APPEND super_obj TO interface_table.LOOP AT interface_table INTO interface_obj.CALL METHOD interface_obj->write.ENDLOOP.SKIP.CALL METHOD super_obj->increment.APPEND super_obj TO interface_table.LOOP AT interface_table INTO interface_obj.CALL METHOD interface_obj->write.ENDLOOP.SKIP.*接口引用赋值类引用interface_obj = super_object.CALL METHOD interface_obj->write.badi_obj = super_object.CALL METHOD super_object->zintest~test. CALL METHOD badi_obj->test.SKIP.*类实例访问变量super_obj->status~int = 5.WRITE / super_obj->status~int.*类实例访问静态变量super_obj->status~cint = 10.WRITE / super_obj->status~cint.*类名访问静态变量superclass=>status~cint = 20.WRITE / superclass=>status~cint .*接口实例访问变量interface_obj->int = 5.WRITE / interface_obj->int.*接口实例访问静态变量interface_obj->cint = 10.WRITE / interface_obj->cint.*接口名访问常量WRITE / status=>const.*&---------------------------------------------------------------------* *& Report Y_TEST_A_8 * *& * *&---------------------------------------------------------------------* *& * *& 类的事件 * *&---------------------------------------------------------------------*REPORT y_test_a_8 .*&---------------------------------------------------------------------* *& Class vehicle*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS vehicle DEFINITION.PUBLIC SECTION.* EVENTS: too_fast.EVENTS: too_fast EXPORTING value(p1) TYPE i.METHODS:accelerate,show_speed.CLASS-DATA speed TYPE i.ENDCLASS. "vehicle*&---------------------------------------------------------------------* *& Class (Implementation) vehicle*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS vehicle IMPLEMENTATION.METHOD accelerate.speed = speed + 1.IF speed > 5 .* RAISE EVENT too_fast.RAISE EVENT too_fast EXPORTING p1 = speed.ENDIF.ENDMETHOD. "accelerateMETHOD show_speed.WRITE: / 'Speed:',speed.ENDMETHOD. "show_speedENDCLASS. "vehicle*&---------------------------------------------------------------------* *& Class handler*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------*CLASS handler DEFINITION.PUBLIC SECTION.* METHODS handle_excess FOR EVENT too_fast OF vehicle.METHODS handle_excess FOR EVENT too_fast OF vehicle IMPORTING p1. ENDCLASS. "handler*&---------------------------------------------------------------------* *& Class (Implementation) handler*&---------------------------------------------------------------------* * Text*----------------------------------------------------------------------* CLASS handler IMPLEMENTATION.METHOD handle_excess.WRITE: / 'Speed can not be too fast.The speed is ', p1LEFT-JUSTIFIED.vehicle=>speed = 1.ENDMETHOD. "handle_excessENDCLASS. "handlerDATA: o_vehicle TYPE REF TO vehicle,o_handle TYPE REF TO handler.START-OF-SELECTION.CREATE OBJECT: o_vehicle,o_handle.SET HANDLER o_handle->handle_excess FOR ALL INSTANCES.DO 11 TIMES.CALL METHOD o_vehicle->accelerate.CALL METHOD o_vehicle->show_speed.ENDDO.。