111、面向对象ABAP概述那是一个周五下午,生产线上的一个报表程序突然开始随机dump,错误代码是CX_SY_ARITHMETIC_ERROR。我拉出core dump一看,栈里躺着一个自定义的class method,里面有一段很普通的total += amount。amount是个INT4,源数据来自数据库表的一个QUAN字段,但程序里直接用MOVE塞进了int4,没做任何转换。表面看是类型问题,但真正让我脊背发凉的是——这个class method是个纯静态方法,内部没有维护任何状态,却被三个不同业务模块各自调用,谁都没意识到这个方法的输入可能带小数。如果你用ABAP一段时间了,可能已经习惯了那种把函数、参数、全局表堆在一起的“过程式”写法人,但正因为没有封装边界,你根本不知道哪个函数在哪被谁用错误的方式调用过。面向对象ABAP不是让你换个关键字玩,它其实是一种“强制你思考边界”的编程范式。最早接触ABAP OO,很多人会先看到CLASS ... ENDCLASS和METHOD ... ENDMETHOD,觉得不过是把FUNCTION换了个皮。我最初也这么想。直到我调试一个遗留程序,看到代码里一个PERFORM能有两百行,全局变量从第1行定义到最后1行,被十几个FORM来回修改,要找到某个值是在哪里被改的,得翻遍整个include。那一刻我才明白,ABAP里的OO不是语法糖,是一堵用来挡住“全局可变状态”的墙。ABAP的O