4.模块化技术之子程序

 总学习目录请点击下面连接

SAP ABAP开发从0到入职,冷冬备战-CSDN博客


目录

​编辑

1.模块化基础和概述

使用模块化有什么好处

两大类模块化技术

程序局部的模块化

SAP系统内全局模块化

封装有什么好处?

2.子程序模块化

三种传递类型

子程序结构

参数命名习惯

子程序调用和生成语法

使用调试器,来分析代码

3.子程序模块化操作

创建新包

启动编辑器,创建一个程序


1.模块化基础和概述

为什么要学习模块化,模块化有什么意义

目标:能够指出ABAP基础的模块化技术

使用模块化有什么好处

程序A写了三个一样的代码,程序B写了一个代码,在需要用的时候进行调用

好处:有条例,便于修改,不容易改错,易于维护,可读性好

两大类模块化技术

程序局部的模块化

有两种实现方式

1.子程序,subroutine

也称为from程序,因为子程序封装在perform和endform之间

2.本地类的方法

在本地创建class,为这个类创建方法,在本地进行调用

这两个方法都只能在主程序内使用,所以也是本地方法

对于A程序,perform是子程序调用的关键字,下面的Subroutine是一个子程序快

对于B程序,右边有一个CALL METHOD 是调用本地的类方法的关键字

A中定义的方法不能再B中使用,反过来同理

SAP系统内全局模块化

也有两种方法

1.函数组中的函数模块

左边是一个function group 全局函数

2.全局类中的方法

右边是一个global_class 全局类,里面有一个Method

这两种方式都可以被ABC三个函数进行调用。

是属于一个懒加载模式,只有要用到了,才会从知识库进行加载这个模块。

调用时都使用CALL METHOD关键字。

理想情况下,被调用的模块单元不直接使用调用程序的数据对象。有一个数据封装性,参考C语言局部变量。

封装有什么好处?

易于修改,保持一致性,时模块可复用性的基础。

因为封装性,所以要访问数据时,必须要提供接口,对于function group来说接口叫做,interface。对于全局类来说,叫做signature。其实都是接口。

在定义接口参数时,可见性也是要被定义的。后面学习。

参数分为三种:

1.传入参数,给模块的参数,importing 参数

2.返回参数,从模块返回数据到调用者,exporting 参数

3.变动参数,传递数据给模块单元,并在被修改后返回参数,changing 参数,本质时把变量的内存地址赋给了模块,模块操作这个参数时,操作的是内存中参数的地址空间。

2.子程序模块化

如何在ABAP中使用子程序,子程序参数是如何传递的,参数传输类型之间的差别

目标:能够在ABAP中定义子程序,能够调用子程序,能够调试和分析子程序。

看下面程序,外面大框是一个主程序,里面浅色的是一个子程序

子程序必须在主程序内部定义,必须在from和endform之间进行定义,二者都必须以.结尾。

这个代码没有带参数,通常都是那三种参数,甚至可以传链表。

如果变量被定义在主程序中,那么是全局可以使用的。并在整个程序的任意位置都是可以修改的,包括子程序。

一般来说呢,为了复用,所以要使用占位符。相当于C语言形参和实参部分。

当子程序被调用的时候,主程序就会把变量传递给形式参数。参数个数,形式必须一致。

三种传递类型

主程序中的变量被传递到子程序的形式参数时,需要在子程序接口中对每个参数进行指定

1.值拷贝调用

分配给子程序中对应形式参数的拷贝,而不是实际参数的本身。

创建拷贝的时候会消耗一定的时间,此时应用服务器就会给拷贝服务器分配内存和时间。

2.通过值和结果传递

通过提供跟值调用一样的拷贝,但是返回结果时会被写回到原型。如果子程序被stop,结果不会写回。

3.通过引用调用

实际时把地址赋给参数,所以对参数的修改会同步到实际参数。

子程序结构

以form开始,后面指定子程序的接口名称。

下面是实现语句。

以endform结尾。

using下面跟按值传递,和按值和返回传递的变量,changing是按引用传递的。

下面有个value(f1),表示按值传递,没有value就表示按值和返回传递。

changing下面没有value表示按引用传递。

在调用时,如果实际参数不使用value,就要在change和value下面指定

例子中,a分配给f1,b分配给f2,c分配给f3

主程序中定义的变量是全局数据对象,这些变量在整个主程序中都可以使用,包括子程序。

子程序内部定义的变量只能在子程序内部使用

关于SAP的内存管理,是系统自动进行管理的。进入子程序加载,出去后释放。实际也可以自己去手动管理内存。

参数命名习惯

一般情况下,为了清晰的标明程序内的对象,应该使用如下的前缀,对全局数据对象使用g,对using使用p,对changing参数使用c,对局部数据对象使用I

子程序调用和生成语法

在程序中使用perform来调用子程序,首先要定义子程序,然后保存主程序,

参数的话,有对应的参数一一匹配。

ABAP工作台中可以直接拖拽子程序进入主程序,可以自动生成命令。

也可以在ABAP编辑器中,使用Pattern按钮,然后输入要调用的子程序的名称,然后生成代码。

使用调试器,来分析代码

在子程序调用部分打上断点,然后选择执行按钮F6,来执行整个程序,也可以使用F5来进入程序的第一行语句,更详细的追踪子程序的操作。

如果当前语句在子程序内,可以使用F7执行完子程序剩余的部分,子程序被执行完。

在ABAP调试器中,所有的调试控制功能,单步执行返回继续都代表相同的意义。

在调试器的standard页签下,能够看到子程序被那个程序调用了,这个工具就是调用栈。

3.子程序模块化操作

开始做子程序练习

创建新包

先去创建一个包se21

点击显示,返回不存在,此时创建

点击对勾

显示需要请求,这里没有就新创建一个

输入描述后确认

点击确认

点击保存然后退出

启动编辑器,创建一个程序

点击保存

进入了编辑器

先通过写代码创建一个子程序

然后点击上面显示对象列表,使用第二种方式上下文菜单,自动生成代码

右键,创建,子程序

选上面表示创建一个新的程序,并将子程序放进去。选下面表示在主程序中添加子程序。

在前面放了个注释区。

还有一种创建方式

在要创建的位置,写一个PERFORM F_Test01 USING GV_T1 GV_T2 CHANGING GV_T3

然后双击文件名,问你是否要创建

也是选一下位置,然后就创建好了

稍微修改下参数名称并指定类型,不然任意类型的参数都可以传入,如果传入的类型和使用的出现了冲突,就会stop。而不能让他称为any类型。

REPORT Z_YITING_12061.
DATA : GV_T1 TYPE I.
DATA : GV_T2 TYPE I.
DATA : GV_T3 TYPE I.
GV_T1 = 10.
GV_T2 = 20.
WRITE /.
WRITE GV_T1.
WRITE GV_T2.
WRITE GV_T3.
PERFORM F_Test01 USING GV_T1 GV_T2 CHANGING GV_T3.
WRITE /.
WRITE GV_T1.
WRITE GV_T2.
WRITE GV_T3.
FORM F_Test01 USING VALUE(gv_t1) TYPE I
gv_t2 TYPE I
CHANGING cv_t3 TYPE I.
cv_t3 = 100.
gv_t2 = gv_t1 + gv_t2.
gv_t1 = 100.
ENDFORM.

输出结果

下面调试一下子程序。

光标放在要调试的代码部分,点击执行

堆栈的规则是先进入后出,可以在这里看堆栈的一个情况。

下一节更新函数和本地类模块化操作和概念。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/36327.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

69 mysql 中 is null 的实现

前言 Mysql 中我们偶尔会用到 字段为 NULL 的情况 这时候 我们只能使用查询 “select * from tz_test_02 where field1 is null;” 来进行 field1 字段为 null 的行的查询 然后如果是使用 “select * from tz_test_02 where field1 null;” 你会发现查询 不出数据 但是如…

51c嵌入式~单片机合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12581900 一、STM32代码远程升级之IAP编程 IAP是什么 有时项目上需要远程升级单片机程序,此时需要接触到IAP编程。 IAP即为In Application Programming,解释为在应用中编程,用户自己的程…

网上图书购物管理系统|Java|SSM|VUE| 前后端分离

【一】可以提供远程部署安装,包扩环境 【二】提供软件相关的安装包 【三】如果需要提供java入门资料可咨询 【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、M…

Python酷库之旅-第三方库Pandas(264)

目录 一、用法精讲 1251、pandas.tseries.offsets.WeekOfMonth.is_year_end方法 1251-1、语法 1251-2、参数 1251-3、功能 1251-4、返回值 1251-5、说明 1251-6、用法 1251-6-1、数据准备 1251-6-2、代码示例 1251-6-3、结果输出 1252、pandas.tseries.offsets.Las…

“为您的家电穿上防震铠甲:优质电器缓冲器

在地震频发地区或日常生活中,确保家电的安全和稳定至关重要。为了防止地震、意外碰撞或其他外力对家电造成损害,采用优质的电器缓冲器就像是为家电穿上了一层坚固的“防震铠甲”。这不仅能够有效减少因震动导致的损坏风险,还能显著延长家电的…

全连接层与链式求导法则在神经网络中的应用

目录 ​编辑 引言 全连接层的工作原理 前向传播 反向传播 链式求导法则及其在神经网络中的应用 链式求导法则 应用于全连接层 计算梯度 结论 引言 在深度学习领域,全连接层(Fully Connected Layer,FC)和链式求导法则是…

基于框架的逻辑回归:原理、实现与应用

目录 ​编辑 逻辑回归原理 损失函数与优化 正则化 基于框架的实现 1. 数据预处理 2. 模型初始化与训练 3. 模型评估与调优 4. 特征缩放 逻辑回归的应用 信用评分 医疗诊断 垃圾邮件识别 推荐系统 结论 在机器学习领域,逻辑回归是一种基础且强大的分类…

【SpringBoot】Day11-10 yml文件配置

三种配置文件 前面我们一直使用springboot项目创建完毕后自带的application.properties进行属性的配置,那其实呢,在springboot项目当中是支持多种配置方式的,除了支持properties配置文件以外,还支持另外一种类型的配置文件&#x…

强化学习新突破:情节记忆与奖励机制引领多智能体协作

简介 本推文介绍了韩国科学技术院发表在人工智能顶会ICLR 2024上的论文《Efficient Episodic Memory Utilization of Cooperative Multi-Agent Reinforcement Learning》。该论文提出创新性高效情节记忆利用(Efficient Episodic Memory Utilization,EMU…

【python自动化四】日志打印

我们在进行自动化测试时,需要打印过程日志和结果日志等,这里记录下日志的相关配置。这里我们直接自己新建一个logger。 先贴上日志代码如下,可根据需要修改: import logging import os import timefrom logging.handlers import …

【精选】AI Coding 新范式:Windsurf、Cursor、Coze齐上阵

2AGI.NET | 探索 AI 无限潜力,2AGI 为您带来最前沿资讯。 随着人工智能技术的飞速发展,AI Coding领域迎来了前所未有的变革。Codeium的Windsurf、Cursor的agent模式更新、Copilot的新版本以及Coze的AI应用能力,都在推动着编程领域的创新。本期…

Free-RTOS实现LED闪烁

开发板:正点原子探索者 F407 LED定时定时闪烁 本次实验验证: 配置文件 1、打开CubeMX 2、选择芯片型号,然后点击开始项目 3、配置时钟 配置烧录引脚,与FreeRTOS系统时钟 选择FreeRTOS 这里已经默认有一个任务&#xff…

java+ssm+mysql水产品商城

项目介绍: 使用javassmmysql开发的水产品商城,系统包含管理员、用户角色,功能如下: 管理员:用户管理;种类管理;商品管理;订单管理;评论管理;新闻管理&#…

SYN6288语音合成模块使用说明(MicroPython、STM32、Arduino)

模块介绍 SYN6288中文语音合成模块是北京宇音天下科技有限公司推出的语音合成模块。该模块通过串口接收主控传来的语音编码后,可自动进行自然流畅的中文语音播报。 注:SYN6288模块无法播报英文单词和句子,只能按字母播报英文 ;而…

Windows设备go环境安装配置

一、下载go安装包 官网链接:All releases - The Go Programming Language (google.cn) 安装过程比较简单,这里不再赘述,可参考这位博主的文章。本文重点在环境配置。golang环境详细安装、配置_golang安装-CSDN博客 二、环境变量配置 1.添…

vulnhub靶场【hacksudo】之aliens

前言 靶机:hacksudo-aliens 攻击:kali 都是采用虚拟机的形式,网卡桥接模式 主机发现 使用arp-scan -l或者netdiscover -r 192.168.1.1/24进行探索 信息收集 使用nmap扫描 两个http服务,一个ssh服务 网站信息 访问查看 访…

(数据结构与算法)递归 递归是什么 递归的案例和场景 递归进阶

递归的定义和应用条件 递归就是程序调用自身的编程技巧; 把大型复杂的问题转化为一个与原问题相似规模较小的问题来进行求解; 递归每次调用传入的是不同的变量 递归不是算法,是调用自己的过程 调用的那个是一个小问题,自己是一个…

鼠标右键单击Git Bash here不可用

最近在学习git时突然发现右键的git bash没反应,但是去点击应用图标就能正常运行,通常是因为你在安装git之后改变了它的目录名称或者位置,我就是因为安装后改变了一个文件夹的文件名导致不可用 在安装git时系统会默认给鼠标右键选项的git Bas…

【0x0002】HCI_Inquiry_Cancel命令详解

目录 一、命令概述 二、命令格式及参数说明 三、返回事件及参数说明 3.1. HCI_Command_Complete事件 3.2. Status 3.3. 示例 四、命令执行过程 4.1. 前提条件检查 4.2. 命令构建与发送 4.3. 控制器处理 4.4. 返回状态参数 4.5. 主机接收反馈与处理 4.6. 执行流程结…

OpenAI 12Days 第二天 强化微调(RFT):推动语言模型在科学研究中的应用

OpenAI 12Days 第二天 强化微调(RFT):推动语言模型在科学研究中的应用 文章目录 OpenAI 12Days 第二天 强化微调(RFT):推动语言模型在科学研究中的应用RFT的工作原理与应用领域案例研究:基因突变…