SAP ABAP OO面向对象入门实例

合集下载

abap中co包含用法

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 例子程序
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面向对象入门实例

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_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章-面向对象程序设计

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 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_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中.简单入门概念.用个例子来说明

学习使用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( ).。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.。

相关文档
最新文档