面向对象的实例化
行如其名,在面向对象的模式中,对象是唯一存在的东西。对象是类的实例,是通过CREATE OBJECT语句来实现的。ABAP对象不可能被隐含的实例化,你通过指针变量来操作对象。
当然你通过指针所操作的对象不一定是自己创建的,这种现象主要是通过指针操作的对象很有可能是从其他地方传过来的,比如说工厂方法(factory method)或者接口参数。你可以在一个类中创建多个对象每个对象通过属性都有自己的标识符和内容。
对象的生命周期是由使用者来控制的(其他对象,程序或过程等),只要有指针变量指向他,他就在内存中存在。
如果没有指针变量指向对象,这个对象就会被自动的被ABAP内存收集器从内存中删除。和程序的实例一样,ABAP对象也存储在主程序的内部SESSION中。在640之后你就可以在应用服务器的SHARED MEMORY中创建shared object了,这样在这应用服务器上运行的任何程序都可以调用它。
下面的例子演示了从银行账号类中产生的两个银行账号对象。
DATA: account1 TYPE REF TO account,
Account2 TYPE REF TO account,
Amnt TYPE p DECIMALS 2,
Exc_ref TYPE REF TO cx_negative_amount,
Text TYPE string.
CREATE OBJECT : account1 EXPORTING id = ….,
Account2 EXPORTING id = …..
TRY.
Amnt = ….
Account1
àtransfer ( EXPORTING amount = amnt
Target = account2).
CATCH cx_negative_amount INTO exc_ref.
Text = exc_ref->get_text().
MESSAGE text TYPE i.
ENDTRY.
指针变量account1,account2是类account的对象的显示的操作符。在CREATE OBJECT语句中每个账号标识被传入到了对象的结构体。对象一旦被创建,账号标识就不用再被声明了。你可以调用一个对象的transfer方法,通过通过账号指针变量来指明要转入的账号。
与面向过程的上面的例子相比,显然面向对象的例子更加直接。在面向过程的例子里你不得不为每个功能模块指明要操作的数据,而在面向对象的例子里你只需调用对象的方法那么他就会自动地使用它自己的数据。值得注意的是例外信息我们都是使用基于类的方法,这在610之后是被推荐的。在面向过程的程序中使用指针变量exc_ref显得有些另类,因为在非OO模式的程序中使用了OO模式的东西,这也是ABAP OO的一个自然特性。