ABAP OO的八大理由

几年前SAP BASIS 4.6为ABAP扩展了OO功能,这是很多传统的ABAP程序员陷入困境。首先对于ABAP程序员来说它们终于可以通过OO这种开发方法得潜在价值来提高开发效率和所开发程序的可维护性了。然而一直以来习惯于面向过程编程的ABAPER迅速的转向OO模式也不是那么容易,很多人还是坚持使用传统的面向过程的开发模式,他们觉得不用OO也可以得到他们想要的。这篇文章的主要目的便是让你明白OO能给你带来什么以及如何转型为OO模式。
很多关于ABAP OO方面的文章要么过于抽象,要么举的例子过于简单对于实际应用无关痛痒。本篇文章力图通过简单而又切合实际的例子通过面向过程和面向对象两种模式的比较来说明OO的优点。
1.         首先ABAP OO具有更高层次的数据封装性,从而增强了程序的可维护性和稳定性。在面向过程的模式里,一个程序的全局变量区包含着许多不相干的变量,这些变量在一个区域里交织在一起,这样的话这个程序的某个功鞥对程序状态的改变并不为程序中另外一个功能所知。为保持整个程序的稳定性需要大量的约束和维护成本。而对于OO模式,状态是保存在对象上的。对象可以把内部和外部数据和方法分隔开,以保证功能(OO中的方法)只能改变与它相关的数据,对象的属性是不会被改变的,从而保证了其在应用程序中的稳定性。
2.         ABAP OO可以实现一个类的多个实例。(对象是由数据以及操作数据的方法组成的。),每一个对象都有自己在类中定义的属性值,并且可以通过本身的方法来改变本身的状态。这就意味着开发者无需为每个对象建立数据和方法之间的联系也无需手工管理每个对象的生命周期。在面向过程的方法中没有多实例的概念,数据和功能是相互分离的。你使用的是无状态的功能,并且每次都需要通过传递参数来初始化它,并且手工将其占有的内存清除。
3.         ABAP OBJECT通过继承进一步增强了程序代码的可重用性,这正是面向对象方法的一个重要方面。通过这个特点你可以重复利用所继承类的部分或者所有方法,只需编写类本身所特有的方法,这样会减少为每个类编写的方法,从而增强了程序的可维护性。而对于面向过程的编程来说,你将会受制于all-or-nothing的状况,你要么调用所有的部分要么就建立新的。
4.         ABAP OO是你可以通过接口(interface)来调用对象的业务逻辑,而不是直接去使用对象,这样就避免了你需要详细了解每一个对象的特定功能。这样也避免了你在需要修改某项功能的时候无需修改接口(interface)的内容,这也为标准程序的修改提供了新的途径,即BADI。面向过程的编程并没有这种提供对立的接口去联系某个对象的概念—接口只是通过form或function module的参数实现的。
5.         ABAP OO非常容易与事件驱动的模式结合在一块。不同的应用之间是通过发布与预定松散的耦合在一起的,调用者和被调用者之间并不是被动的绑定在一起的。这种方式与面向过程的方法相比更进一步的增强了灵活性,他们的绑定是紧密地,程序的执行流程也是预定义好的。
当然,这些好处都需要你今后再开发中是用OO的方法来开发才能得到。然而重新建模你应用程序的开发模式是令人沮丧和头疼的,我们保证这种情况不会出现,读完这篇文章我们相信你会得到同样的结论。当然,没有说我们需要重新建模已有的应用,我们只是希望你在今后的开发过程中最后考虑一下OO的模式。
如果你坚持认为面向过程的模式对你来说已经足够了,也请接着往下读。通过使用对象的方法来代替form和function module你仍然可以增强你的ABAP程序。
1.         ABAP OO更加明确所以更易于使用。例如在使用ABAP OO你的程序的执行流程不再是由运行时隐含的控制。这样你就可以自己去设计程序所执行的流程了而不必像面向过程那样去了解和服从外部控制机制(即报表和dialog screen的事件)。
2.         ABAP OO具有更加清晰的语法和语义规则,比如一些容易出错的过时的语句在ABAP OO类中已经明确不能再使用。而在面向过程的程序中这些语法仍然被支持,顶多就是在关键的时候给你报个警告信息。
3.         ABAP的一些新技术只能通过ABAP OO来实现。例如所有新的GUI的概念比如SAP Control Framework和BSP只有通过ABAP OO的方式才能够实现。而对于面向过程的ABAP你就只能使用传统的screen和list processing了。
所以即便你在未来的开发中还不准备完全的转型为OO,你可以使用的OO技术来减少错误的隐患以及增强代码的可维护性。下面的部分将会阐述如何达到这一目的。
那么面向过程的ABAP和ABAP OO究竟是孰优孰劣?下面的部分将逐一进行论述。首先先了解以下ABAP OO的年代史。
1.         SAP Basis Release 4.5发布了ABAP OO的一个版本,引入了类接口的概念,并可以通过类来创建对象(实例化类)。
2.         SAP Basis Release 4.6发布了ABAP OO的完全版本,引入了OO方式的重要概念继承(inheritance),可以通过多个接口来建立一个复合的接口。
3.         SAP WEB APPLICATION SERVER 6.10/6.20 SAP basis的下一代版本,在类之间引入了friendship的概念。并引入了对象服务(object service)可以把对象存储在数据库中。
4.         SAP WEB APPLICATION SERVER 6.40引入了共享对象(Shared Objects)的概念,即允许在应用服务器的共享内存中存储对象。这样在这个服务器中的任何一个程序都可以访问它。
几个关键点
n         ABAP OO是ABAP编程语言的扩展
n         ABAP OO 是向下兼容的
n         SAP发布ABAP OO是为了进一步增强代码的可重用性
n         随着ABAP OO的发布,ABAP运行时支持面向过程和面向对象两种模式

对于面向过程的模式,程序的运行通常是从screen的dialog module或selection screen的start-of-selection事件开始的。你在这些处理模块中操作全局变量来实现需求的功能。你可以通过内部的form和外部的function module来实现程序的模块化。这些过程除了可以操作全局变量外还可以具备内部的本地变量来协助实现内部的一些特定功能。
  


 

对于OO编程,唯一的结构单位就是类,这里类的实例对象取代了全局变量。这些对象封装了应用的状态和行为。应用的状态是用属性来代表的它取代了面向过程中的全局变量。应用的行为是通过方法来实现的,他们用来改变应用的属性或者调用其它对象的方法。
  n         ABAP OO支持OO和面向过程的两种模式,这样在传统的ABAP程序(比如报表,模块池,功能池等)中你也可以使用ABAP对象类。在这些程序里你也就可以使用基于面向对象的新技术了,比如一些用户界面,避免了要想使用这些新技术必须重新编写程序。
n         目前大部分程序都是面向过程和ABAP OO 的混合体如下图所示:
 
左边是纯粹的ABAP OO模式,所有的代码都封装在类中。你的应用中并不直接触presentation layer(SAP Gui , Business Server Pages etc.),persistent data(database table,system file)。他们是通过类库中的相应服务类来提供的。比如SAP Control Framework ,Desktop Office Integration, and Business Pages提供了与表现层的接口。对于SAP Web Application 6.10以上提供了与数据库层接口的服务对象。
虽然纯粹的OO模式技术上是可行的,但是现实中还存在着大量的两种模式的混合体如右面的图所示。ABAP 对象和面向过程的技术同时应用,调用常用的功能模块,调用屏幕或者直接访问数据库等在对象中都存在。混合的模式及利用了新技术又保护了已投入的成本。
两种模式的选择
正如本文所述,OO的模式是最佳的选择,除非在绝对必要的情况下才使用面向过程的模式。比如传统的screen programming在OO中是不支持的,附录中会进一步阐释如何实现screen与OO的结合。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值