SAP-ABAP开发学习-面向对象OOALV(1)

本文目录

一、概述

面向对象开发特点

二、类与对象

程序中类的创建

Class构成要素

对象

方法

一、概述

        随着SAP R/3 4.0版本的开发,ABAP语言开始引入了面向对象的开发概念。这在ABAP语言的发展过程中,面向对象(Object-oriented)的概念被引入,ABAP对象成为了ABAP语言的扩展,它集合了Java、C++、Smalltalk等语言的特点,并与原有的ABAP语言无缝集成。

        在面向对象的解决方法中,重点在于对现实生活中的对象进行结构化或抽象化。这涉及到对象的两个核心概念:属性(Attributes),即对象的属性和特征;方法(Method),即定义对象的行为。

        采用面向对象的方法带来了许多优点,其中之一就是可以重复利用代码。相比于传统的ABAP,面向对象的ABAP允许开发者重用部分代码,提高了开发效率。此外,类(Class)的概念还允许封装数据,增强了代码的安全性和可维护性。

面向对象开发特点

1. 抽象(Abstraction) 实现客观世界实体的模块化
2. 封装(Encapsulation) 就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
3. 继承(Inheritance) 它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展
4. 多态(Polymorphism) 允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

二、类与对象

        对象是类的实例,它代表了现实世界中的个体。类可以看作是对象的类型或模板,而对象则是这个模板的具体实现。要使用所需功能的对象,首先要经过根据类定义对象的过程。这个过程称为实例化,通过实例化,我们可以根据类创建具体的对象,这些对象被称为实例(Instance)。
CLASS:类是创建对象的模板,它定义了一组具有相同属性和方法的对象的结构和行为。
OBJECT:对象是指商品、物体、对象或目的,它是类的实例,具体代表了类定义的一个个体。

在ABAP中,类的区分主要分为全局类和本地类:
全局类(Global)是通过事务代码SE24创建的,它们存储在类池中,也就是ABAP程序的Repository中的Class Library。所有ABAP程序都可以对其进行访问,这使得全局类具有广泛的可用性。
本地类(Local)是在程序中定义的,它们仅在该程序内部可见和使用。本地类的定义和实现都局限于单个ABAP程序,因此只有该程序可以使用这些本地类。

程序中类的创建

        定义类的构成项目(属性、方法、事件) CLASS <class> DEFINITION. 要素声明 所有项目都需要定义在三个访问区域之一中 ENDCLASS.
实现类的方法 CLASS <class> IMPLEMENTATION. .....ENDCLASS.

三个访问区域:
Public Section. 公有部分 内部可见,外部可见;PUBLIC部分的组件,构成类与用户的接口
Protected Section. 保护部分 内部可见,继承可见,外部不可见;PROTECTED部分的组件,构成继承类之间的接口
Private Section. 私有部分 内部可见,继承不可见,外部不可见

Class构成要素
  • 实例组件(Instance-specific component)参照类创建对象时,内存中存在的项目,每次创建对象时都会被初始化。各个类的对象中都存在 声明方式:属性:DATA;方法:METHODS。访问:OBJECT->COMP
  • 静态组件(Static component) 遇到创建类的语句(CREATE OBJECT)开始,直到程序结束都存储于内存中,是依赖类存在的项目。即使不创建对象,若已存在与内存中即可以直接使用。 声明方式:属性:CLASS-DATA;方法:CLASS-METHODS。访问:CLASS=>COMP

        类的所有要素在声明部分实现(Class Definition),这包括了属性(Attributes)、方法(Method)和事件(Event)。
属性(Attributes)可以拥有ABAP所有数据类型的类内部数据字段,对象状态由属性决定,这些属性在类中使用DATA或CONSTANTS关键字声明。
方法(Method)用来定义决定对象行为的类内部执行步骤,它可以访问类的所有属性,并且可以通过方法修改对象的内容。此外,方法提供传入传出参数,便于用户交互。
事件(Event)是事件是没有继承关系的类之间可以互相调用彼此方法的特殊方法,它使得类能够触发并通知其他类某个特定情况的发生。

例实例属性和静态属性:

CLASS lcl_compt DEFINITION . "定义类的项目PUBLIC SECTION ."说明范围 公有
*实例属性DATA GV_CHAR TYPE C LENGTH 10 VALUE 'CHAR' .CLASS-DATA GV_STATIC TYPE C LENGTH 20 VALUE '静态属性' .
*实例方法METHODS WRITE_CHAR .*静态方法CLASS-METHODS WRITE_STATIC .PROTECTED SECTION . "保护部分可以被集成类(子类)访问:自己/子类PRIVATE SECTION ."私有部分不能被其他类访问:自己ENDCLASS .CLASS lcl_compt IMPLEMENTATION . "定义类中的方法的内容METHOD WRITE_CHAR .WRITE: / GV_CHAR .WRITE: / GV_STATIC .ENDMETHOD .METHOD WRITE_STATIC .WRITE:/ '静态方法' , GV_STATIC .ENDMETHOD .
ENDCLASS .*声明一个对象
DATA LCL_OBJECT TYPE REF TO LCL_COMPT .
DATA LCL_OBJECT2 TYPE REF TO LCL_COMPT .START-OF-SELECTION .
CREATE OBJECT LCL_OBJECT ."实例化
CREATE OBJECT LCL_OBJECT2 .
WRITE :/ '访问实例属性', LCL_OBJECT->GV_CHAR .
LCL_OBJECT->GV_CHAR = '更换CHAR的值' .CALL METHOD LCL_OBJECT->WRITE_CHAR . "实例1的值
CALL METHOD LCL_OBJECT2->WRITE_CHAR ."实例2的值*静态属性,不依附于实例
WRITE:/ '访问静态属性:',LCL_COMPT=>GV_STATIC ."访问静态属性
LCL_COMPT=>GV_STATIC = '更换静态属性的值' .
CALL METHOD LCL_COMPT=>WRITE_STATIC .
对象

        对象指的是类的实例,每个对象都有自己固有的属性。 一个类可以创建多个对象。 在ABAP程序中要访问对象,需要使用参照对象(Object Reference),参照对象始终存在于参照对象变量中。声明语句:DATA    obj TYPE REF TO class.

方法

        方法定义的基本语法:METHOD <meth>
                                                IMPORTING … <i1> TYPE <type> ….
                                                EXPORTING… <e1>TYPE <type> …
                                                CHANGING … <c1>TYPE <type> …
                                                EXCEPTIONS … X1…
CALL METHOD [oref->|class=>]meth     
EXPORTING … i1 = f1…     
RECEIVING       R  = h .

~IMPORT/EXPORT:数据输入/输出接口,接口参数可以参考单个变量,结构,或者内表 ~CHANGING:同时作为输入输出接口,接口参数可以参考单个变量,结构,或者内表 ~RETURNING:返回类传递数值。该定义不能和CHANGING/EXPORTING同时使用 ~EXCEPTIONS:返回执行中所出现的错误
类函数可以拥有多个输入参数,但只能有一个输出参数。类的输出接口参数必须与类函数中所定义类型保持一致。

方法的调用
当方法没有输出参数(EXPORTING)的时候可以通过以下方式调用: ①CALL METHOD meth().  没有输入参数 ②CALL METHOD meth( a ). “ 一个输入 ③CALL METHOD meth( f1 = a1………fn = an ) . “N个输入。

构造方法
在实例化对象时,自动完成对象的初始化,并且这个对象是空的。如果希望每一个对象都为其初始化某些特征,需要用到构造方法。构造方法没有返回数据类型,其功能是在实例化类时完成一些初始化工作。使用 METHODS CONSTRUCTOR 定义构造方法,或使用 CLASS-METHODS CLASS_CONSTRUCTOR 定义类的静态构造方法。每个类只能有一个构造方法,在 CREATE OBJECT 语句中自动调用构造方法。

什么时候使用构造方法呢?以下是一些情况:

  • 需要分配(外部)资源时,比如打开数据库连接或文件。
  • 需要初始化一些不能用 DATA 语句的 VALUE 指定的属性值,比如复杂的对象或需要计算得出的值。
  • 需要修改静态属性时,这通常通过 CLASS_CONSTRUCTOR 来实现。

通常不能显式地调用构造器,因为它是由系统在创建对象时自动调用的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【实用技能】如何在 .NET C# 中的邮件合并过程中操作表格单元格

TX Text Control 中的邮件合并 类是一个强大的库&#xff0c;旨在通过将数据合并到模板中来自动创建文档。它充当结构化数据&#xff08;例如来自数据库、JSON 或 XML&#xff09;和动态文档生成之间的桥梁&#xff0c;对于需要自动化文档工作流程的应用程序来说非常有用。 TX…

有源模拟滤波器的快速设计

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、概述 几乎所有电子电路中都能看到有源模拟滤波器的身影。音频系统使用滤波器进行频带限制和平衡。通信系统设计使用滤波…

使用OpenTK展示3D点云图像(C#)

最近在研究3D显示&#xff0c;找到一款在winform上展示3D点云的控件&#xff0c;并且实现了点线面的展示&#xff0c;及光照渲染纹理贴图等功能&#xff0c;如下面几张图所展示。 一些基础知识可以在LearnOpenTK - OpenTK 这个网站上学习到。 我这边使用的是openTK3.3.3版本&a…

【笔记】架构上篇Day6 法则四:为什么要顺应技术的生命周期?

法则四&#xff1a;为什么要顺应技术的生命周期&#xff1f; 简介&#xff1a;包含模块一 架构师的六大生存法则-法则四&#xff1a;为什么要顺应技术的生命周期&#xff1f;&法则四&#xff1a;架构设计中怎么判断和利用技术趋势&#xff1f; 2024-08-29 17:30:07 你好&am…

【Sentinel Go】新手指南、流量控制、熔断降级和并发隔离控制

随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开…

Y3编辑器官方文档1:编辑器简介及菜单栏详解(文件、编辑、窗口、细节、调试)

文章目录 一、新建项目二、 编辑器主界面2.1 游戏场景2.2 导航栏/菜单栏2.3 功能栏三、菜单栏详细介绍3.1 文件3.1.1 版本管理3.1.2 项目管理(多关卡)3.1.2.1 多关卡功能说明3.1.2.2 关卡切换与关卡存档3.2 编辑3.2.1 通用设置3.2.2 键位设置3.3 窗口(日志)3.4 细节3.4.1 语言…

前端视角下的Go语法学习:创建 Go 项目

今日话题 使用 GoLand 创建 Go 项目 作者&#xff1a; 时间&#xff1a;2024年6月20日 17时16分14秒 主线任务 一、GoLand 创建项目 1、点击 “new Project” 按钮 2、已经有下载过两个 Golang SDK 版本&#xff0c;选择版本创建即可~ 3、如果没有下载过Golang SDK&#…

数据结构6.3--交换排序

目录 交换排序基本思想 1.冒泡排序 2.快速排序 2.1hoare版本 2.2挖坑法 2.3前后指针版本 交换排序基本思想 所谓交换&#xff0c;就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置&#xff0c;交换排序的特点是&#xff1a;将键值较大的记录向序列的尾…

Unity 制作一个视频播放器(打包后,可在外部编辑并放置新的视频)

效果展示&#xff1a; 在这里&#xff0c;我把视频名称&#xff08;Json&#xff09;和对应的视频资源都放在了StreamingAssets文件夹下&#xff0c;以便于打包后&#xff0c;客户还可以自己在外部增加、删除、修改对应的视频资料。 如有需要&#xff0c;请联细抠抠。

软件工程知识点

软件开发模型1 软件开发模型2 软件过程模型习惯上也称为软件开发模型&#xff0c;它是软件开发全部过程、活动和任务的结构框典型的软件过程模型有瀑布模型、增量模型、演化模型(原型模型、螺旋模型)、喷泉模型基于构件的开发模型和形式化方法模型等。 极限编程 开发方法 RUP…

Apache Echarts和POI

目录 Apache ECharts 介绍 入门 绘制一个简单的图表 Apache POI 介绍 通过POI创建Excel文件并且写入文件内容 通过POI读取Excel文件中的内容 导出Excel表格 Apache ECharts 介绍 Apache ECharts 是一款基于 Javascript 的数据可视化图表库&#xff0c;提供直观&#xf…

COLA学习之环境搭建(三)

小伙伴们&#xff0c;你们好&#xff0c;我是老寇&#xff0c;上一节&#xff0c;我们学习了COLA代码规范&#xff0c;继续跟老寇学习COLA环境搭建 首先&#xff0c;打开GitHub&#xff0c;搜索 COLA 请给这个COLA项目点个Star&#xff0c;养成好习惯&#xff0c;然后Fork到自…

【友加畅捷】软件保存/激活云加密/授权码的时候失败。

【问题现象】 畅捷通T1飞跃专业版&#xff0c;在保存云加密的时候提示&#xff1a; 获取加密失败&#xff0c;请检查数据库是否正确连接。 【解决方法】 服务器目录FYDogServer.ini文件&#xff0c;将DogCloud0改成DogCloud1&#xff0c; 然后重新保存。 【问题现象】 U通用…

单链表(数组模拟)

单链表的结构 用数组来模拟的话&#xff0c;需要两个数组&#xff0c;通过下标关联起来 例如&#xff1a; #include <bits/stdc.h>using namespace std;const int N 100010;int e[N]; //储存第i个插入的数的值 int ne[N]; //储存下标为i的next指针 int n; int idx1; int…

docker compose容器编排工具

华子目录 docker compose概述主要功能工作原理docker compose中的管理层docker compose的常用命令参数构建和重新构建服务docker compose的yaml文件一、服务&#xff08;services&#xff09;二、数据卷&#xff08;volumes&#xff09;三、网络&#xff08;networks&#xff0…

科普时刻 | 无线充电热管理:挑战与解决方案

无线充电器可通过电磁感应&#xff0c;在不直接进行电接触的情况下执行电能传输&#xff0c;因此无需繁杂的电缆电线连接&#xff0c;便可为我们的手机、手表、平板电脑以及耳机等设备供电。然而&#xff0c;随着对电子设备更快充电的需求不断增加&#xff0c;热管理对于防止过…

用ChatGPT-o1进行论文内容润色效果怎么样?

目录 1.引导问题发现 2.角色设定 3.整理常问修改 4.提供样例 5.小细节 小编在这篇文章中分享如何充分利用ChatGPT-o1-preview来提升论文润色的技巧。小编将持续跟进最新资源和最新的调研尝试结果&#xff0c;为宝子们补充更多实用的写作技巧。这些技巧将有助于您更有效地利…

数据可视化大屏UI组件库:B端科技感素材PSD

在数据可视化领域&#xff0c;一个出色的大屏UI设计不仅能够准确传达数据背后的信息&#xff0c;更能提升用户的视觉体验。然而&#xff0c;对于UI设计师而言&#xff0c;设计这样一款界面往往面临着寻找合适设计素材的挑战。为了应对这一难题&#xff0c;我们推出了这款数据可…

深度学习中的损失函数

损失函数是深度学习模型训练过程中不可或缺的一部分&#xff0c;是模型预测值与真实值之间差异的客观衡量标准。它们是模型训练的基础&#xff0c;指导算法调整模型参数&#xff0c;以最小化损失并提高预测准确性。它们衡量了模型预测值与真实值的吻合程度。通过最小化这种损失…

#自定义数据类型-简单模拟进程执行

#include <iostream> #include <string> #include <iomanip> using namespace std;//定义一个名为process的结构体&#xff0c;用于表示进程相关信息 //包含进程名、进程ID、进程优先级、进程状态、进程所需CPU时间、进程描述等成员 struct process {string …