SAP OO
1. 概述
- 从SAP R/3 4.0版本开始,abap就引入了面向对象的开发概念.
- abap语言大发展:
- 宏编译器
- abap语言出现-面向过程
- abap语言-面向对象
- abap对象是abap的扩展,集合了java,c++,smalltalk等语言的特点,和原来的abap无缝继承
- 面向对象解决方法中,重点放在了对象是想生活中的对象结构化或抽象化
- 属性: 对象的属性及特征
- 方法: 定义对象的行为
- 类的优点
- 可以重复利用代码
- 可以封装数据
2.面向对象的特点
- 抽象
- 实现客观世界实体化的模块
- 封装
- 把客观事物封装成抽象的类,并且可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行隐藏
- (把对象私有化)
- 继承
- 它可以使用现有的类的所有功能,并且无需重新编写原来的类的情况下对这些功能进行扩展
- (父子关系)
- 多态
- 允许你将父类对象设置成为和一个或更多的她的子对象等技术,赋值之后,父对象就可以根据当前赋值给他的子对象的特性以不同的方式运作.
- 允许将子类类型的指针赋值给父类类型的指针.
- (子类可以访问父类)
3.类与对象
- 什么是对象?
- 要使用所需功能的对象,首先要经过根据类定义对象的过程
- 根据类创建对象的过程为实例,根据类创建的对象为实例
- CLASS:类是创建对象的模板
- OBJECT:对象是指商品/物体/对象/目的/,是类的实例
- 类的区分
- 全局类: 事务代码se24
- 存储在类型池中
- 所用abap程序都可以对其进行访问
- 本地类
- 在程序中定义’
- 只有该程序可以使用
- 全局类: 事务代码se24
4.程序中类的创建
-
定义类的构成项目(属性方法事件)
-
class <class> definition . 要素声明 所有项目都需要定义在三个访问区域之一中 endclass.
-
-
实现类的方法
-
class<class> implementation endclass.
-
5.class构成要素
- 构成要素的分类
- 实例组件
- 参照类创建对象时,内存中存在的项目,每次创建对象时都会被初始化.各个类的对象中都存在
- 声明方式
- 属性: data
- 方法:methods
- 访问:object->comp
- 静态组件
- 遇到创建类的语句开始,直到程序结束都存储与内存中,是依赖类存在的项目.及时创建对象,诺已存在与内存中即可直接使用
- 声明方式:
- 属性:class-data
- 方法:class-methods
- 访问:class=>comp
- 实例组件
- 类的所有要素在声明部分部分实现
- 属性
- 可以拥有abap多有数据类型的类内部数据字段,对象状态由属性决定.data/constants
- 方法
- 用来定义决定对象行为的类内部执行步骤,可以访问类的所有属性,切可通过方法修改对象的内容,了另外,方法提供传入传出参数,便于用户交互
- 事件
- 事件是没有继承关系的,类之间可以相互调用彼此方法的特殊方法.
- 属性
6.区域访问权限
- public section 公有部分
- 内/外部可见
- public部分的组件,构成类与用户的接口
- protected section 保护部分
- 内部和继承可见,外部不可见
- protected部分组件,构成继承类之间的接口
- private section 私有部分
- 内部可见,继承可见,外部不可见
-
public section 可 可 可内部 外部 继承
protected section 可 否 可
private section 可 否 否
7.方法
- 方法的基本语法
-
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
- 返回执行中所出现的错误
-
- 类函数可以拥有多个输入参数,但只能有一个输出参数.类的输出接口参数必须与类函数中定义类型保持一致.
8.构造方法
- 在实例化对象时,自动完成对象的初始化,并且这个对象是空的.
- 如果希望每一个对象都为其初始化某些特征,需要用到构造方法.
- 没有返回数据类型,功能是在实例化类型时完成一些初始化工作
- 使用METHODS CONSTRUCTOR 定义
- 或者CLASS-METHODS CLASS_CONSTRUCTOR 定义
- 每个类只能有一个构方法,在CREATE OBJECT语句中自动调用构造方法
- 何时使用构造方法
- 需要分配外部资源
- 需要初始化一些不能用data语句的value指定的属性值
- 需要修改静态属性
- 通常不能显式的调用构造器
9.类的继承
- 什么是类的继承?
- 继承的本质是代码的重用,当要构造一个新类型时,无需从零开始,可以参考一个已有类,在其基础上建立一个新类
- 参考:基类/父类,新建类:派生类/子类
- 派生类可以继承基类所有的属性和方法,并可以在此基础上添加新的特征
- 语法
-
class <subclass> definition inheriting from <suoerclass>
-
- 多态性类继承的实现
- 由于每个派生类的属性不同,相同的基类对象在不同的派生类中需要以不同的方式来表现,因此提出多态概念.
- 在派生类中定义和基类相同的接口,但是可以使用不同的代码来实现.
- 语法
-
method <meth> redefinition.
- 在派生类中使用基类的方法,使用
-
super:call method super-><meth>
-
- 方法的重载
-
me:call method me-><meth>.
-
-