ABAP - 10 模块化

如果你买过一些外国的科技产品,你有可能在他们的外包装上见过这句话:
designed by ** in ***
Assembled in China 在中国组装
有一些涉及到核心机密的部件人家都是造好了,然后运到中国来,我们给组装。
关键词,组装。
各个部件可能由不同的国家负责设计生产,谁最擅长制造什么,就制造什么,最后到一个地方组装成成品。
这样做,速度最快。
这个在编程语言里经常用到。

什么是模块化

简而言之,就是你这个功能,有一部分是分出去的。像一个工程,会有一部分外包出去。你就不用管这部分怎么实现的了,反正有人帮你实现好了,你只要告诉他让他做,他就把做好的结果拿给你。
模块化有的是系统和系统的模块。不同系统间通过接口去调用别人的数据。别家的那个对你来说就是个模块化的东西。

还有的就是,同一系统不同程序的模块化,你程序A可以调用程序B的功能,程序B就相当于你的外置模块。
再有一种就是,这个程序巨大,有很多很多的功能,而有一些功能呢,在你程序执行过程中不止一次被执行,就是说可能重复执行了几次。那这种情况下呢,就别让它占代码行数了,就直接拿出去吧。要用的时候再调用就好了。这就是程序内部的模块化。
这叫啥?你可以叫它subroutine 或者 function。

subroutine 重用

FORM

举个小例子。你执行一个很小的功能:
在这里插入图片描述
定义成string就是动态长度。

但是我现在不这么弄了,我要弄成subroutine 怎么搞?
在这里插入图片描述
写成一个FORM,这个小模块的功能都在form里面。执行的时候用perform来调用就可以了。
当然输出语句也要调到前面去。因为你去执行perform的时候,FORM的代码就已经被调用了。
so easy…
呵呵,如果程序都这么简单,那确实是easy。然而现实世界不是1+1,而经常是849+234+762.
现实世界中,一个模块可能也有几百行代码。。而且不止这么两三个变量。而且这变量有可能不是全局变量。啥意思呢?我们用的p_fname,p_lname,name是这个大程序一开始就定义好了的,这叫全局变量。就相当于你公司的大老板,他布置的任务,他下面的部门经理得听,部门经理下面的小组长得听,那小员工也必须得听。层层往下,全部通吃。
但是你们的小组长,发布的命令,那只能通行于你们组。。出了这个组,那可能就不好使了。他的任务就是本地变量,就只能用在你们组内。
如果让他用本地变量,在整个公司下,那是没结果的。如果你debug去,程序跑到name无值,你再回过头去看f_name他会告诉你无效变量。因为出了这个小组这个变量行不通。
在这里插入图片描述

USING、CHANGING

你说,那小组长的指令不能白发啊。有时候,小组长有先见之明,揣测好大老板的意图并提前实现了全部功能。就是指令名字不一样。。这里咋办呢?找个媒介来翻译一下。把大老板的指令和小组长的指令衔接一下。再整理一下传回去。
那这个媒介,就是这两货:USING和CHANGING。体会这两个词的意思。用大老板的指令,并修改传回小组长的结果。
在这里插入图片描述

include 重构

include也是模块化的一种,但是和subroutine很不一样。subroutine是说我有一个功能,像是一个公式。我计算三角形面积,我计算⚪的面积。我想要计算的时候哦,我调用它一下就行了。我不用重复写在程序里。
那么include是,我想在程序里看到。但是就像我把家分成了客厅卧室和厨房,我不想把所有功能都混在一起,我不要在马桶旁做饭,那么我用include来隔墙,把各个不同功能分区。为了方便读取程序代码。空间还是这么大,但是有了逻辑意义上的分区,我就能快速找到我想看的功能。

怎么弄呢?你的一个大几百行,一千多行的代码,读起来很痛苦 。那么可以建几个include程序。把变量声明放进一个include里面。把数据选择放进一个include里面,把数据读取放进另一个include里面。
在这里插入图片描述
写一个include,双击后面的名字。
在这里插入图片描述
把变量声明部分放进去。然后依照功能把程序分拆成多个include。
当然还可以和subroutine结合。一个include中可以包含FORM的定义,另一个routine包含perform执行语句。

Function module 重用

可以跨程序,跨系统,跨client。
跟subroutine的功能一样,是可以重用,但是它可以跨程序。回忆一下我们之前的subroutine。
在这里插入图片描述
现在我们来调用一个FM。

Call

和subroutine的perform不同,这里用到call。
如果你知道这个FM的名字。可以用个pattern来帮忙:
在这里插入图片描述
这个里面是importing和exporting。其实和form的格式差不多。
USING就是EXPORTING, CHANGING就是IMPORTING。
你传进去给它的值是exporting (是从我的主程序出给他的),它给你的值是importing(就是从它的处理过的进来的)。
在这里插入图片描述
要确定你的变量和它的定义变量类型一致。

如何创建一个功能模块

什么是tables,什么是exceptions。

***待续 2021.11.29 我明明记得我写过了啊,难道是没保存😭😭😭

现在回头来总结,总的来说呢,关于模块化编程。
其实分为两类,一类是没有参数的。一类是有参数的。
没有参数的就是include程序。
有参数的就是可调用的。又分为内部调用和外部调用。
内部调用的子程序:Form。
外部调用的程序:function module。
Form就相当于C语言的形参实参,需要传参数值。那么用到using,changing。就是传值过去,和修改后的值传回。
function module也有点像,exporting,importing。当然还有更多的tables,exceptions就是不仅能传单个变量值,还能传整张表的值。还可以给出例外的错误提示。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaomici

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值