面向对象、模块化、宏

文章介绍了ABAP编程中的面向对象概念,包括声明、继承、多态和接口。同时,提到了异常类的分类,如CX_STATIC_CHECK和CX_DYNAMIC_CHECK。在模块化方面,讲解了子例程(FORM)、功能模块(SE37)以及INCLUDE和MACRO的使用。此外,还讨论了宏定义和调用、包含程序以及子程序的调用方式和参数传递机制。
摘要由CSDN通过智能技术生成

一、面向对象

* 1.声明

* CLASS DEFINITION | IMPLEMENTATION | DEFERRED

* PUBLIC SECTION | PROTECTED | PRIVATE

* DATA | CLASS-DATA | METHODS | CLASS-METHODS

* TYPE REF TO | CREATE OBJECT

* 构造器:constructor | class_constructor

* 2.继承

* INHERITING FROM | REDEFINITION

* FRIENDS | ABSTRACT | FINAL

* me | super

* 3.多态

* = | ?=

* 4.接口

* INTERFACE | ALIAS

* 5.事件

* EVENTS XXX EXPORTING XXX | CLASS-EVENTS

* RAISE EVENTS XXX

* METHOD XXX FOR EVENT XXX OF XXX IMPORTING XXX

* SET HANDLER XXX FOR XXX | ALL INSTANCE

二、异常类

  1. Exceptions
  1. Class-Based
  1. CX_STATIC_CHECK
  1. CX_DYNAMIC_CHECK
  1. CX_NO_CHECK
  1. 异常消息类
  1. IF_T100_DYN_MSG

三、模块化

  1. SE38、SE37、SE24
  1. INCLUDE | MACRO
  1. 事件

LOAD-OF-PROGRAM(程序加载前执行 一般进行一些初始化操作)

| START-OF-SELECTION(程序加载后执行)

end-of-selection 过时

  1. FORM | FUNCTION MODULE | METHOD

四、新语法

* NEW | CAST | REF

* VALUE | CONV | EXACT

* CORRESPONDING | FILTER

* REDUCE

* COND | SWITCH

面向对象

待续

模块化

From子例程(代码块)[se38创建]

以下是子程序定义的一般语法。

FORM <subroutine_name>.
  
<statements> "这里面声明的变量为局部变量
  
ENDFORM.

我们可以通过使用PERFORM语句调用子例程。 控制跳转到子例程< subroutine_name>中的第一可执行语句。 当遇到ENDFORM时,控制跳回到PERFORM语句之后的语句。

示例:

REPORT ZSUBTEST. 
PERFORM Sub_Display.

* Form Sub_Display 
* -->  p1 text 
* <--  p2 text 
 
FORM Sub_Display. 
Write: 'This is Subroutine'. 
Write: / 'Subroutine created successfully'. 
ENDFORM.                    " Sub_Display

结果

Subroutine Test:
   
This is Subroutine
  
Subroutine created successfully

FUNCTION MODULE 功能模块[se37]

要了解如何创建功能模块,必须探索函数构建器。 您可以找到事务代码为SE37的函数构建器。 只需用通配符键入功能模块名称的一部分,以演示可以搜索功能模块的方式。 键入* amount *,然后按F4键。

搜索结果将显示在新窗口中。 功能模块显示在具有蓝色背景的行中,其功能组以粉红色的行显示。 您可以使用对象导航器屏幕(事务SE80)进一步查看功能组ISOC。 您可以看到功能模块列表以及功能组中保存的其他对象。 让我们考虑函数模块SPELL_AMOUNT。 此功能模块将数字转换为字。

CALL FUNCTION <函数模块名>"调用模块

 INCLUDE程序

 INCLUDE程序是用于模块化源代码的全局存储库对象。 它们允许您在不同的程序中使用相同的源代码。 包含程序还允许您以有序的方式管理复杂的程序。 为了在另一个程序中使用include程序,我们使用以下语法:

INCLUDE <program_name>.

INCLUDE语句具有与复制包含程序< program_name>的源代码相同的效果。 进入另一个程序。 由于包括程序不能独立运行,它必须内置到其他程序中。 您也可以嵌套包含程序。

 INCLUDE程序创建se38中创建zdemo程序

report zdemo.
include zdemo_top."双击include程序名称进入创建
include zdemo_main.

define宏(se38创建)

语法

DEFINE <macro_name>. 
<statements> 
END-OF-DEFINITION.

宏就是一个词代替一堆语句的效果.

示例:

define demo.
write 'demo'.
end-of-definition.
demo.
define demo1.
write:':','&1','&2','&3'."最多支持加参数9个
end-of-definition.
demo1'A''B'.

结果

demo:AB
ABAP/4 中所谓的模块在一般语言称之为子程序,其数据传递方式皆相似,如传值调用
CALL BY VALUE ),参数调用( CALL BY REFERENCE )等,可分成以下几个部分:
1. 宏块( Macro Block
2. 包含程序( Include Program
3. 子程序( Subroutine Program
4. 函数模块( Function Module
宏块( Macro Block
在程序中可以定义一段宏代码,并且可以传入参数,参数占位符 (Placeholder) 可自 &1, &2
&9
1. 宏的定义
DEFINE <macro>.
< 宏的内容 >
END-OF-DEFINITION.
2. 宏的调用使用
<macro> [<p1> <p2>….]
<p1> 为传入宏的参数值,在参数间至少要给予一个空格
示例:利用宏计算 N 次方
DATA RESULT TYPE I.
DEFINE MULTI.
RESULT = &1 ** &2.
WRITE: / '&1 ^ &2 = ', RESULT.
END-OF-DEFINITION.
MULTI 3 4.
执行结果为 3 ^ 4 = 81
包含程序( Include Program
1. ABAP/4 中可以使用 Include 语句加载另一个程序的全部语句 ,通常用于共享数
据项的声明,很类似 C Include 头文件的做法。
语法:
INCLUDE <include program file>
示例:
程序 YStart 的内容如下 :
***INCLUDE YSTART.
WRITE: / 'User Name = ', SY-UNAME.
WRITE: / 'Host Server = ', SY-HOST.
另一程序如下:
PROGRAM YTEST1.
INCLUDE YSTART. " 载入 YSstart 的所有内容
执行结果:
User Name = MIS-CHOU
Host Server = deidv01
2. 全局变量声明应用
语法:
DATA: BEGIN OF COMMON PART [<name>],
<data 声明 >
END OF COMMON PART [<name>]
此常使用在 Include 的文件中,如
***INCLUDE INCOMMON.
DATA: BEGIN OF COMMON PART NUMBERS,
MID(8),
MNUM TYPE I,
END OF COMMON PART NUMBERS.
子程序( Subroutine Procedure
ABAP/4 子程序的调用可分成内部调用和外部调用,前者撰写在程序中,后者存在另一
程序中,通常为专存放子程序的公用程序集,可提供给不同的程序调用。
1. 子程序的声明
FORM <subr> [<pass>].
<subroutine statement block>
ENDFORM.
2. 调用的方法
(1). 内部调用
语法:
PERFORM <subr> [<pass>]
示例:
NUM1 = 100. NUM2 = 200.
PROFORM ADD.
FORM ADD.
SUM = NUM1 + NUM2.
WRITE: / 'NUM1 + NUM2 = ', SUM.
ENDFORM.
执行结果:
NUM1 + NUM2 = 300
(2). 外部调用另一程序
语法:
PERFORM <subr>(<prog>) [<pass>] [IF FOUND]
<subr>: 子程序名称
<prog>: 存放子程序的程序名称
IF FOUND: 找到才执行
示例:
PROGRAM FORMPOOL.
FORM HEADER.
WRITE: / 'USER NAME: ', SY-UNAME.
ENDFORM.
在程序中调用 HEADER 子程序
PROGRAM YTEST1.
PERFORM HEADER(FORMPOOL) IF FOUND.
(3). 外部调用另一专存放子程序的程序文件
语法:
PERFORM (<fsubr>) [IN PROGRAM (<fprog>) [<pass>] [IF FOUND]
示例:
存放子程序的程序文件
PROGRAM FORMPOOL.
FORM SUB1.
WRITE: / 'USER NAME:', SY-UNAME.
ENDFORM.
FORM SUB2.
WRITE: / 'HOST SERVER:', SY-HOST.
ENDFORM.
在程序中调用 FORMPOOL 中的 SUB2 子程序
SUBNAME = 'SUB2'.
PROGNAME = 'FORMPOOL'.
PERFORM (SUBNAME) IN PROGRAM (PROGNAME) IF FOUND
参数值的传递
ABAP/4 中参数的传递可分成
1. 参数调用( Call By Reference
传参数时将数据的存放地址 (address) 传至参数中,也就是子程序中的参数变量与外部实际
变量共享地址内的值,又称为传地址调用( Call By Address ),若在子程序中地址中的值改变
了,外部实际变量的值也会跟着改变。
语法:
FORM <subr> [USING <f1> <f2>…] [CHANGING <f1>…]
PERFORM <subr> [USING <f1> <f2>…] [CHANGING <f1>…]
Using 之后接在子程序中不会改变的变量, CHANGING 接会改变值的变量但实际上
USING 之后的参数在子程序中也可将值改变
示例:
SUM = 0.
NUM1 = 100. NUM2=200.
PERFORM ADD USING NUM1 NUM2 CHANGING SUM.
WRITE: / NUM1, NUM2, SUM ' SUM 0 变成 300
FORM ADD USING NUM1 NUM2 CHANGING SUM.
SUM = NUM1 + NUM2.
ENDFORM.
执行结果 :
100 200 300
2. 传值调用( Call By Value
传参数时将数据的值复制一份至另一地址中,所以在子程序中参数变量值改变,并不会影
响外部实际变数的值。
语法:
FORM <subr> USING VALUE(<f1>…)
使用 VALUE(<f1>) 表示 <f1> Call By Value 的传递
PERFORM <subr> USING <f1>
示例:
SUM = 0.
NUM1 = 5.
PERFORM MULTI USING NUM1 CHANGING SUM.
WRITE: / NUM1,SUM "NUM1 值还是 5, SUM 0 变成 120
FORM MULTI USING VALUE(NUM1) CHANGING SUM.
SUM = 1.
WHILE NUM1 > 1
SUM = SUM * NUM1.
NUM1 = NUM1 – 1.
ENDWHILE..
ENDFORM.
执行结果:
5 120
3. 传值调用并返回结果( Call By Value and Return Result
传入参数值的方式同 Call By Value ,但在子程序结束执行时会将传入的参数值复制一份传
回给外部实际变数。
语法:
FORM ….. CHANGING VALUE(<f1>)
PERFORM …. CHANGING …. <f1>
示例:
SUM = 0.
NUM1 = 100. NUM2=200.
PERFORM ADD USING NUM1 NUM2 CHANGING SUM.
WRITE: / NUM1, NUM2, SUM " SUM 0 变成 300
FORM ADD USING NUM1 NUM2 CHANGING VALUE(S).
S = NUM1 + NUM2.
WRITE: / NUM1, NUM2, SUM " 得到结果为 100 200 0
ENDFORM.
执行结果:
100 200 0 " 在子程序中 SUM 值尚未改变
100 200 300 " 返回程序时,将变量 S 的值复制给 SUM ,所以 SUM 值变成 300
FORM ADD tables itab type scarr.
endform.
perform add table itab1.
传表.
子程序的控制
1. CHECK <Condition>
CHECK 之后条件成立才继续往下子程序语句
示例:
PERFORM SUB1.
CHECK NUM1 < 10.
WRITE / NUM1.
NUM1 = NUM1 + 1.
ENDFORM.
2. EXIT
强迫结束子程序执行,返回上一层程序
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值