下面的例子比较了两种模式下从数据库中取数的不同之处:
在面向过程的ABAP程序中:
TABLES:dbtab.
SELECT * FROM dbtab.
在面向对象的ABAP程序中
DATA wa TYPE dbtab.
SELECT * INTO wa FROM dbtab.
TABLES隐含的声明了一个与数据库表名相同的结构变量,那么对数据库表内容的操作都使用这个隐含的变量。而在ABAP OO中,这种隐含的方式是不被允许的。TABLES语句是禁用的,必须使用更加明确的语句。
下面是另一个例子:
在面向过程的ABAP程序中:
FIELD-SYMBOLS <fs>.
IF <fs> IS ASSIGNED.
ENDIF.
在面向对象的ABAP程序中:
FIELD-SYMBOLS <fs> TYPE ANY.
IF <fs> IS ASSIGNED.
ENDIF.
在ABAP OO中形参和FIELD SYMBOL必须明确的指定类型,而在过程的ABAP程序中是没有必要的。如果没有明确指定FIELD SYMBOL的类型,ABAP运行时就会自动把SPACE分配给这个field symbol。这样的话在过程的ABAP程序中判断语句的返回结果为TRUE,而在ABAP OO中则为false。
最后一个例子如下:
在过程的ABAP程序中;
DATA number TYPE I VALUE ….
TRANSLATE number TO UPPER CASE.
在ABAP OO中
DATA number TYPE I VALUE …
TRANSLATE number TO UPPER CASE.
在过程的ABAP程序中对数字型的字符型操作abap运行时会给警告信息,而在ABAP OO中则会给错误信息。在ABAP OO中,系统运行时保证了对应的操作必须针对对应的变量。
原因3
:ABAP OO
支持一些新的技术
SAP许多新的技术都是基于ABAP OO的,那么在你的项目中必须对面对这一点。许多基础的技术都在ABAP OO中发布了,这些包括:
l User dialog的架构,如SAP control framework(CFW),Business Server Pages(BSP)以及Desktop Office Integration(DOI)等。
l Frameworks for persisting data in the database(Object Service) and Shared Objects(area classes)
l Service classes CL_GUI_FRONTEND_SERVICES for working with data at the presentation server
l Laguate related classes,such as Run Time Type Services(RTTS) classes on CL_ABAP_EXPIMP subclasses for extended EXPORT/IMPORT functionality for example.