为什么ABAP开发者需要使用面向对象技术?
ABAP对面向对象的支持已有十多年的历史,然而在生产实践中,我们对这门技术的应用十分有限。
一方面,面向过程的惯性长期存在着;另一方面,对于大部分二次开发工作而言,似乎并没有足够的理由促使开发者使用面向对象技术。二者结合的结果,就是目前大部分ABAP开发者还在只写面向过程的代码。
我不认为面向对象是可以解决开发中各种问题的“银弹”,但是它毕竟是一项经过了考验的技术。在2017年的现在,多数人已经承认面向对象给我们带来了相当的好处。面向对象的三个基本特性、五个基本原则已经成为路人皆知的事情。关于它的通常的好处,本文不打算再复述,毕竟相关的文章讨论已经太多。
此外,对于ABAP开发而言,它还有一些额外的好处。在下文,我会分别介绍它们。
本文链接:http://www.cnblogs.com/hhelibeb/p/7641965.html
转载请注明
1, 避免过时语法
我们知道,在abap的声明语法中,type是直接声明类型,like是参考声明类型。很多新手在入门时会被like与type的区别弄晕,甚至为了不出错,完全使用like代替type。而abap是支持为变量起一个和类型名相同的变量名的,如果程序存在着和类型名相同的变量名,开发者又不懂得like和type的区别的话,代码中难免会出错。类似的“小知识”给开发者带来了不小的负担。虽然这种特性已经在文档中标记为obsolete,但是,出于兼容性之类的考虑,SAP依然允许它们的使用。
然而在OO语境中,语法检查器会对过时语法报错,这使得开发者可以安心抛开某些ABAP中存在的历史包袱,不需要再勉强自己记住那些无谓的规则。
此外,SAP也为面向对象编程提供了额外的工具,比如单元测试类生成。如果还是使用form的话,就只能手写单元测试类了。

2, 理解标准程序
相对于客户自定义开发的内容,SAP系统中已有的程序被我们称为标准程序。SAP已经在系统标准程序中大量使用了面向对象技术,在某些产品和模块中(比如CRM),可以说面向对象成为了主流。
ABAP的开发工作是基于SAP系统的,对标准程序的阅读理解、调试、修改(增强)是ABAP程序员工作的重要内容。如果开发者没有一定的面向对象编程经验的话,就很难对这些大量使用了面向对象技术的程序进行增强开发,也难以对它们进行跟踪与调试,从而给工作带来困难。
在自己编写面向对象程序的过程中,我们可以逐渐理解集成、多态等概念,熟悉与面向对象相关相关的语法,借此提高自己对标准代码的理解能力。
3, 从另一个角度自省
随着工作的进行和个人掌握的知识的变化,我们会对同一段功能产生新的看法,从而用新的代码来进行表达,因此很多人有重构甚至重写代码的习惯。不过人的耐心总是有限的,重构几次,感觉自己的代码已经“差不多了”,已经可复用、便于扩展,甚至已经“接近完美”,无需再改。这是难以避免的事情,因为,人的大脑有忽略熟悉的事物的倾向,同样的男/女朋友,看久了,便会忽略他们的美丑。如何促进自己进一步自省?使用新技术可能是一个办法。
在尝试把代码转换为面向对象的过程中,新技术的使用会促使我们从另一个角度看待曾经过于熟悉以至于被忽略的代码,激发大脑进一步运作,从而得到新的看法和启发。原本已经固定的代码,又可以再次重构了。当然,这种改变不一定总是好的。面向对象的一个引起争议的地方,就是它导致很多程序员、特别是中等水平的程序员,会不自觉地倾向于“过度设计”,无必要地为增加程序的复杂度。但对于个人而言,相比收益,这一点代价还是可以接受的,毕竟,没有犯错,又何来进步呢?
总结
在SAP的世界里,面向对象技术已经有着不亚于面向过程的地位,并且还在稳步地提升中。本文无意鼓吹其中的一者替代另一个,但是,对ABAP程序员而言,了解和运用面向对象技术的能力已经变得十分必要。最后,引用一句名言作为结束:最好的生物不是最强的也不是最聪明的,而是最适应变化的。
为什么ABAP开发者需要使用面向对象技术?的更多相关文章
- 这不是我想要的ABAP开发者
原文在此: These Aren’t the Developers You’re Looking for 在吃饼干的过程中偶然看到这篇文章,立刻被UC化的标题吸引到了. 全文读完,感觉作者还是有点刻薄 ...
- 使用面向对象技术创建高级 Web 应用程序
作者: 出处: 使用面向对象技术创建高级 Web 应用程序 来源:开源中国社区 作者:oschina 最近,我面试了一位具有5年Web应用开发经验的软件开发人员.她有4年半的JavaScript编程经 ...
- 让ABAP开发者愈加轻松的若干快捷键
引言 ABAP是一种和当代编程语言在许多方面有着相当不同的编程语言.ABAP的某些方面可能会让我们奇怪,为什么它会如此复杂?而它的某些方面又是那么杰出,给予了ABAP开发者们比其它任何语言更多的便利. ...
- 让ABAP开发者更加轻松的若干快捷键
引言 ABAP是一种和当代编程语言在许多方面有着相当不同的编程语言.ABAP的某些方面可能会让我们奇怪,为什么它会如此复杂?而它的某些方面又是那么杰出,给予了ABAP开发者们比其它任何语言更多的便利. ...
- Windows环境下多线程编程原理与应用读书笔记(2)————面向对象技术
面向对象技术是学C++需要重点掌握的知识,因为我觉得自己的基础还是比较可以,这一章节的内容就只是粗略的读了一遍,在此就不做过多的笔记.
- Java面向对象技术
问题及答案来源自<Java程序员面试笔试宝典>第四章 Java基础知识 4.2面向对象技术 1.面向对象与面向过程有什么区别? 看下面一个实例即可: 面向过程就是分析出解决问题所需要的步骤 ...
- 【UML】概述以及面向对象技术总结
导读:结束了软工文档后,就开始了UML的学习,不管学习什么,都要先从整体上去把握,然后再从细节上去分析理解.在视频的开头,就对UML进行了概述.然后接着讲了面向对象技术,用例图,类图和包图等.看着软工 ...
- 【ABAP系列】SAP DOI技术中I_OI_SPREADSHEET接口的使用
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP DOI技术中I_OI_S ...
- 2018安卓巴士开发者大会打造Android技术盛宴
2018安卓巴士开发者大会打造Android技术盛宴2018安卓巴士开发者大会将于8月25日在上海举行,作为中国最具前沿性.专业性的安卓技术会议,将邀请来自爱奇艺.阿里.饿了么等知名企业的一线工程师分 ...
随机推荐
- 初遇.net
初遇.net 为了自己的理想我选择了.net课程进行自我提升,想想以后能成为一位程序猿不由得有点兴奋呢,还有另一件高兴的事是我认识了十几位来自不同区县的老师同学,都说人脉就是财富,是不是我的财富有多了 ...
- vue2
props 向子组件传递数据是经常会用到的,一般是在子组件定义 props 来接受数据,当父组件改变数据时子组件的数据也会进行更新.但这里是有一个坑的,先看代码: <pagination :pa ...
- CSS3四个自适应关键字——fill-available、max-content、min-content、fit-content
前面的话 一般地,有两种自适应:撑满空闲空间与收缩到内容尺寸.CSS3将这两种情况分别定义为'fill-availabel'和'fit-content'.除此之外 ,还新增了更细粒度的'min-con ...
- JavaScript学习日志(六):事件
这篇随笔,深恶痛绝,敲到快结束的时候,凌晨00:19,突然闪退,也不知道是Mac的原因还是chrome的原因,重新打开的时候,以为自动保存有效果,心想没关系,结果他么的只保存了四分之一,WTF?!!! ...
- jQuery插件——ajax
一.ajax请求 1.load(url, [data], [callback]) 概述:加载远程的HTML文件代码,并插入到指定的DOM节点中. 参数:url:待装入 HTML 网页网址. data: ...
- Coding使用方法
首先在码市coding.net上创建账号 基础配置 1. 首先,下载安装git客户端和tortoisegit(就是小乌龟,本地右键使用的,跟SVN一样的那个小乌龟). git下载官网:https:// ...
- 201521123100 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...
- 201521123029《Java程序设计》第四周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 答:1. 多态性,多态性是相同的形态,不同的行为(定义),其中父类类型变量可以引用子类对象. ...
- 201521123038 《Java程序设计》 第三周学习总结
201521123038 <Java程序设计> 第三周学习总结 1. 本周学习总结 附大图链接 http://naotu.baidu.com/file/5774caa2be710afbc0 ...
- Map.containsKey方法——判断Map集合对象中是否包含指定的键名
该方法判断Map集合对象中是否包含指定的键名.如果Map集合中包含指定的键名,则返回true,否则返回false. public static void main(String[] args) { M ...