当前位置: 首页 > 后端技术 > Node.js

ABAP 编程语言中 Class(类)的设计原理剖析

时间:2023-04-03 14:55:39 Node.js

ABAP编程语言中类(Class)的设计原理分析ABAP是SAP公司推出的一种高级编程语言。全称是AdvancedBusinessApplicationProgram。在使用ABAP编程语言之前,必须先安装ApplicationServerABAP(以下简称ASABAP)作为ABAP系统的应用层。ASABAP提供ABAP运行时框架,其中ABAP程序独立于平台执行。ASABAP必须连接到数据库层或数据库系统,其核心数据集存储在标准数据库中。基于UI的访问需要一个表示层(PresentationLayer)来显示ASABAP用户界面(在SAPGUI或Web浏览器中)。ABAP应用服务器支持以下三种交互组件:RFC接口这是ASABAP的经典功能接口。远程函数调用是对远程(目标)系统中的函数的调用,而不是调用程序正在运行的本地系统。可以在不同ASABAP之间调用,也可以在ASABAP与外部第三方系统之间调用。在ASABAP中,每一个功能都是通过功能模块(FunctionModule)来实现的。在外部系统中,专门编写的功能称为其接口模拟功能模块。InternetCommunicationManager(ICM)InternetCommunicationManagerICM(InternetCommunicationManager)是ASABAP的一个进程,它允许它使用HTTP、HTTPS或SMTP直接与Internet通信。ICM用于连接基于Web的表示组件,例如SAPUI5、WebDynproABAP、BSP等。ICM还允许使用ASABAP作为Web服务的客户端和服务器。使用Internet通信框架(ICF)的类和接口从ABAP程序访问ICM。ABAP通道(Channel)ABAP通道是AS实例与Internet之间基于事件的通信框架。ABAP消息通道(AMC)用于不同AS实例的ABAP程序之间交换消息,ABAP推送通道(APC)用于ASABAP与Internet之间使用WebSocket协议或TCP套接字协议进行双向通信。ABAPClass广泛用于上述ICM和ABAPChannel。ABAP数据建模使得为在数据库上定义的业务应用程序创建数据模型成为可能:ABAP字典是数据类型及其关系的持久存储库,这些数据类型及其关系在所有其他开发对象中都是可见和可用的。ABAP字典用于管理标准ASABAP数据库的数据库表、视图和锁定对象。ABAP核心数据服务为ASABAP实施SAPCDS概念。独立于平台的CDSDDL和CDSDCL使得定义CDS实体(例如CDS视图或CDS表函数)和相关的CDS角色及其语义丰富成为可能。我们新建一个ABAP类之后,就完成了代码的编写。当我们第一次激活它时,我们会看到这些对象以类名开头,中间跟着一个大=号,以五个字符结尾的对象出现在待激活列表中。他们到底是什么?让我们动手吧。Jerry在猪年三十写的文章SAPGUIandWindowsRegistry中曾经提到Windows系统的注册表,ABAPNetweaver也有自己的注册表:TADIR和TRDIR。无论是在SE80还是SE11事务代码中创建的对象都会在这两个表中留下一些痕迹。创建最简单的ABAP类,包括一个公共的、一个受保护的和一个私有的方法和属性。麻雀虽小,五脏俱全。激活后,根据类名ZCL_ABAP_CLASS在注册表TRDIR中查询,得到如下记录:可以看出ABAP中的类(Class)在技术上是由几个ABAPinclude程序组成的,可以直接通过SE38打开:对于以上我们可以用SE38逐一打开TRDIR中的记录,看看它们是什么意思。CCAU,AU的意思,可以用ABAPUnit来记忆。SE38打开include程序后,自动进入如下界面,发现CCAU程序存放了该类的单元测试代码。CCDEFDEF代表Definition(定义)。在SE38中打开ZCL_ABAP_CLASS=================CCDEF,看到的是这个界面:这里维护的是ABAP类的本地定义,包括类Localclasses,local接口、本地类型定义等。也可以先输入SE24,然后点击LocalDefinitions/Implementations打开。CCIMPIMP代表实施(implementation)。SE38打开ZCL_ABAP_CLASS====================CCIMP,可以看到本地类的实现。CI类的私有区域定义。CO类的保护区定义。CU类的公共区域定义。CMXXXCM代表ClassMethod,XXX是类的方法号,以16进制表示,从1开始递增,例如CM001存放的是类第一个方法的实现代码,CM002代表第二个方法,以此类推。比如你在SE38中打开ZCL_ABAP_CLASS=================CM001,你会看到第一个私有方法的源码:ZCL_ABAP_CLASS================CM002:ZCL_ABAP_CLASS=================CM003:CCMAMAC是Macro(宏)的缩写,存储类的宏定义。如何在代码中获取这些不同的ABAPinclude类的程序名?使用ABAP工具类CL_OO_CLASSNAME_SERVICE:比如我想知道CL_CRM_BOL_CORE类的所有方法对应的include名称,那么在工具类的GET_ALL_METHOD_INCLUDES打个断点,然后在SE24打开CL_CRM_BOL_CORE,点击SourceCodeBased:断点立即触发,从调用栈可以看出,为了在SourceCode模式下显示ABAP类的完整代码,需要读取分散在每个include程序中的代码。类方法与其include程序名的对应关系一目了然。在ABAPTypeGroupSEOP中,存储了本文介绍的以CC开头的include类型的常量定义。相信看完这篇文章,下次你在各种场合遇到这些以CCXXX结尾的ABAPincludes,你就不会再感到迷茫了。小结本文首先介绍了ABAPClass在ABAPAS的三大通信模块中的应用,然后详细介绍了ABAPClass各部分的命名规范和用法。