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 STRING

B TYPE STRING,

*定义getter方法,分别得到姓名

GETFIRSTNAME RETURNING VALUE(FI) TYPE STRING,

GETLASTNAME RETURNING VALUE(LA) TYPE STRING,

*定义两个抽象方法,因为各种employee的收入结构不同,必须在其子类中

*实例化

EARNINGS ABSTRACT

RETURNING VALUE(EARN) TYPE F,

PRINT ABSTRACT.

PRIVATE SECTION.

*定义private变量,该变量不能在子类中使用

DATA:

FIRST_NAME TYPE STRING,

LAST_NAME TYPE STRING.

ENDCLASS.

*类的实现

CLASS EMPLOYEE IMPLEMENTATION.

*初始化类

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 STRING

BOSS_B TYPE STRING

S TYPE F,

*定义boss类的方法(setter方法)

SETWEEKLYSALARY IMPORTING WS TYPE F,

*实现基类中的抽象方法,因为boss类有自己的工资结构

*所以在此部分实现

EARNINGS REDEFINITION,

PRINT REDEFINITION.

PRIVATE SECTION.

DATA:

WEEKLYSALARY TYPE F.

ENDCLASS.

CLASS BOSS IMPLEMENTATION.

METHOD CONSTRUCTOR.

*调用父类的构造函数

CALL METHOD SUPER->CONSTRUCTOR

EXPORTING A = BOSS_A

B = BOSS_B.

*根据新的传入变量,设置boss类私有实例变量

WEEKLYSALARY = S.

ENDMETHOD.

*setter方法的实现

METHOD SETWEEKLYSALARY.

WEEKLYSALARY = WS.

ENDMETHOD.

*定义工资以及输出的实现

METHOD EARNINGS.

EARN = WEEKLYSALARY.

ENDMETHOD.

METHOD PRINT.

DATA: 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 STRING

B TYPE STRING

C TYPE F

D TYPE F

E TYPE I,

*定义setter以及getter方法

SETSALARY

IMPORTING S TYPE F,

GETSALARY

RETURNING VALUE(SA) TYPE F,

SETCOMMISSION

IMPORTING C TYPE F,

SETQUANTITY

IMPORTING Q TYPE I,

*重定义父类的抽象方法

EARNINGS REDEFINITION,

PRINT REDEFINITION.

PRIVATE SECTION.

*定义私有实例变量

DATA:

SALARY TYPE F,

COMMISSION TYPE F,

QUANTITY TYPE I.

ENDCLASS.

*实现commission worker类

CLASS COMMISSIONWORKER IMPLEMENTATION.

METHOD CONSTRUCTOR.

CALL METHOD SUPER->CONSTRUCTOR

EXPORTING 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.

DATA: 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 STRING

B TYPE STRING

W TYPE F

Q TYPE I,

*setter方法

SETWAGE

IMPORTING W TYPE F,

SETQUANTITY

IMPORTING Q TYPE I,

*实例化抽象方法

EARNINGS REDEFINITION,

PRINT REDEFINITION.

PRIVATE SECTION.

DATA:

WAGE TYPE F,

QUAN TYPE I.

ENDCLASS.

CLASS PIWORKER IMPLEMENTATION.

METHOD CONSTRUCTOR.

CALL METHOD SUPER->CONSTRUCTOR

EXPORTING 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.

DATA: 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.

*定义引用变量

DATA:

EM_REF TYPE REF TO EMPLOYEE,

BO_REF TYPE REF TO BOSS,

CO_REF TYPE REF TO COMMISSIONWORKER,

PI_REF TYPE REF TO PIWORKER.

DATA:

EARNS TYPE F.

START-OF-SELECTION.

*创建boss对象

CREATE OBJECT BO_REF

EXPORTING BOSS_A = 'Jhon'

BOSS_B = 'Smith'

S = '800.00'.

*narrowing cast

EM_REF = BO_REF.

*输出到屏幕

CALL METHOD EM_REF->PRINT.

EARNS = EM_REF->EARNINGS( ).

WRITE: / 'Earned: $',EARNS DECIMALS 2 EXPONENT 0.

*下面的代码基本上和上面的相同

CREATE OBJECT CO_REF

EXPORTING 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.

CREATE OBJECT PI_REF

EXPORTING 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.

原文地址:http://blog.51cto.com/13867077/2141978

时间: 2024-08-30 10:44:31

ABAP OO练习的相关文章

[OO]ABAP OO 语法--实例看 "="与"?=" 的区别[转]

ABAP OO 面向对象语法   实例看  "=" 与 "?=" 的区别 1. "="  同类型赋值*&---------------------------------------------------------------------**& Report  Z_WYS_TYPEREF01*&作者:永上*&----------------------------------------------------

通过接口标准化ABAP OO开发

本文是对接口编程的讨论,希望能对年轻的开发者有所帮助. 要点: 通过接口对类方法进行更高层的抽象 接口使代码清晰易读 接口使你可以创建模拟对象(Mockup Object)以提高代码的可测试性 帮助实现SOLID原则 可以在不使用RTTS和类型转换的前提下使用多种类的不同实例. 因为在学习ABAP之前,我曾经学习过其它面向对象语言,因此我很纠结于ABAP中不存在的一个特性——重载方法(overload). 也许你会问,重载是什么? 重载就是函数或者方法有相同的名称,但是参数列表和实现不相同的情形

ABAP OO 开发语法整理

[转自 http://blog.csdn.net/saphome/article/details/6956933] 在类中,只能用TYPE 附加关键字指定数据类型. •TYPES: 一般的类型定义方法 •CONSTANTS: 一般的常数定义方法 只能用LIKE 引用本地数据对象. •DATA: var1 TYPE <TYPES 定义的类型或字典类型>. •DATA: var2 LIKE var1 <不能使用字典对象>. 用DATA 声明的公共属性如果加了READ-ONLY 附加 关

[SAP ABAP开发技术总结]业务对象和BAPI

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 18.3.         业务对象和BAPI 184 18.3.1.     SAP业务对象(SWO1)... 184 18.3.1.1.           业务对象类型的组成... 185 18.3.1.2.           业务对象(BO)设计... 185 18.3.1.2.1.       创建业务表... 185 18.3.1.2.2.       创建

业务对象和BAPI

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4291469.html 业务对象和BAPI 59 SAP业务对象(SWO1)... 59 业务对象类型的组成... 62 测试业务对象... 66 BAPI 68 BAPI与ABAP OO.. 70 BAPI的查找... 70 通过业务对象创

SAP PA Document List

RE-Real Estate 房地产 RE010-EN-Col95-Real Estate Processes in SAP ERP RE200-EN-Col95-Real Estate Management:Implementation RE300-EN-Col95-Land Use Management in SAP Real Estate Management FICO-Finance & Controlling 财务会计成本控制 TFIN50-EN-Financial Accountin

PA教材提纲 TAW12-1

Unit1 Introduction to Object-Oriented Programming(面向对象编程介绍) 1.1 Explaining the Object-Oriented Programming Model(解释面向对象编程) 编程语言发展史: 最早的语言是面向过程语言( procedural programming ): COBOL 差不多同时出现了面向对象( object-oriented programming )和面向逻辑与过程( logical and procedu

ABAP 面向对象(Object Orientation) OO

[转自 http://blog.sina.com.cn/s/blog_7c7b16000101bhof.html]在程序中, 对象的识别和寻址是通过对象引用来实现的, 对象引用变量可以访问对象的属性和方法. ABAP 中的类也有程序内部的局域类和全局类之分, 其作用范围不同. ABAP中的全局类是通过ABAP工作台中的类创建工具 Class Builder 开发的, 保存在系统类库程序 Class Pool 中, 可供所有程序作用. 一. 程序中类的定义. 1. 类声明及实现 * Class D

[ABAP技术总结]ALV

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 7.      ALV. 70 7.1.           Layout重要字段... 70 7.2.           FIELDCATALOG重要字段... 70 7.3.           指定双击触发的FunCode. 71 7.4.           相关函数... 71 7.5.           重要参数接口... 71 7.6.