Fork me on GitHub

为什么ABAP开发者需要使用面向对象技术?

ABAP对面向对象的支持已有十多年的历史,然而在生产实践中,我们对这门技术的应用十分有限。

一方面,面向过程的惯性长期存在着;另一方面,对于大部分二次开发工作而言,似乎并没有足够的理由促使开发者使用面向对象技术。二者结合的结果,就是目前大部分ABAP开发者还在只写面向过程的代码。

我不认为面向对象是可以解决开发中各种问题的“银弹”,但是它毕竟是一项经过了考验的技术。在2017年的现在,多数人已经承认面向对象给我们带来了相当的好处。面向对象的三个基本特性、五个基本原则(SOLID)已经成为路人皆知的事情。关于它的通常的好处,本文不打算再复述,毕竟相关的文章讨论已经太多。

此外,对于ABAP开发而言,它还有一些额外的好处。在下文,我会分别介绍它们。

 

本文链接:http://www.cnblogs.com/hhelibeb/p/7641965.html

转载请注明

1, 避免过时语法

我们知道,在abap的声明语法中,type是直接声明类型,like是参考声明类型。很多新手在入门时会被like与type的区别弄晕,甚至为了不出错,完全使用like代替type。而abap是支持为变量起一个和类型名相同的变量名的,如果程序存在着和类型名相同的变量名,开发者又不懂得like和type的区别的话,代码中难免会出错。类似的“小知识”给开发者带来了不小的负担。虽然这种特性已经在文档中标记为obsolete,但是,出于兼容性之类的考虑,SAP依然允许它们的使用。

然而在OO语境中,语法检查器会对过时语法报错,这使得开发者可以安心抛开某些ABAP中存在的历史包袱,不需要再勉强自己记住那些无谓的规则。

 

 

2, 理解标准程序

相对于客户自定义开发的内容,SAP系统中已有的程序被我们称为标准程序。SAP已经在系统标准程序中大量使用了面向对象技术,在某些产品和模块中,可以说面向对象成为了主流。比如CRM中的BOL,还有SAP正在推广的框架BOPF,功能强大的业务规则框架BRF+等。

ABAP的开发工作是基于SAP系统的,对标准程序的阅读理解、调试、修改(增强)是ABAP程序员工作的重要内容。如果开发者没有一定的面向对象编程经验的话,就很难对这些大量使用了面向对象技术的程序进行增强开发,也难以对它们进行跟踪与调试,从而给工作带来困难。

在自己编写面向对象程序的过程中,我们可以逐渐理解集成、多态等概念,熟悉与面向对象相关相关的语法,借此提高自己对标准代码的理解能力。

3, 从另一个角度自省

随着工作的进行和个人掌握的知识的变化,我们会对同一段功能产生新的看法,从而用新的代码来进行表达,因此很多人有重构甚至重写代码的习惯。不过人的耐心总是有限的,重构几次,感觉自己的代码已经“差不多了”,已经可复用、便于扩展,甚至已经“接近完美”,无需再改。这是难以避免的事情,因为,人的大脑有忽略熟悉的事物的倾向,同样的男/女朋友,看久了,便会忽略他们的美丑。如何促进自己进一步自省?使用新技术可能是一个办法。

在尝试把代码转换为面向对象的过程中,新技术的使用会促使我们从另一个角度看待曾经过于熟悉以至于被忽略的代码,激发大脑进一步运作,从而得到新的看法和启发。原本已经固定的代码,又可以再次重构了。当然,这种改变不一定总是好的。面向对象的一个引起争议的地方,就是它导致很多程序员、特别是中等水平的程序员,会不自觉地倾向于“过度设计”,无必要地设计多余的接口和继承关系、使用各种设计模式,为增加程序的复杂度。但对于个人而言,相比收益,这一点代价还是可以接受的,毕竟,没有犯错,又何来进步呢?

4, 更方便的重构/测试

使用ADT时可以方便地对OO代码重构和生成单元测试方法。具体内容可以参考 Writing Testable Code for ABAP

5, 分解开发任务

基于面向对象的开发可以使开发任务的分解更加方便,因为它能提供良好的解耦和隔离能力,比如,让资深的开发者进行接口、类的设计,而让新手进行单一方法的开发。

我们进行过一点这方面的实践:AMDP + XLSX Workbench 报表开发模式

总结

在SAP的世界里,面向对象技术已经有着不亚于面向过程的地位,并且还在稳步地提升中。本文无意鼓吹其中的一个替代另一个,但是,对ABAP程序员而言,了解和运用面向对象技术的能力已经变得十分必要。最后,引用一句名言作为结束:最好的生物不是最强的也不是最聪明的,而是最适应变化的。

 

 
posted @ 2017-10-10 11:38  氢氦  阅读(2184)  评论(2编辑  收藏  举报