SAP 公司于 1999 年發(fā)布了面向?qū)ο蟮?ABAP库糠,但在 ABAP 開(kāi)發(fā)者中并不普及适掰,實(shí)際開(kāi)發(fā)中用的更多的是面向過(guò)程的開(kāi)發(fā)方式割去。本文簡(jiǎn)單介紹 ABAP 面向?qū)ο箝_(kāi)發(fā)的過(guò)程只泼,重點(diǎn)是如下 ABAP 的語(yǔ)法:
- 如何定義一個(gè)類(lèi)
- 如何創(chuàng)建對(duì)象的實(shí)例 (object instance)
- 如何調(diào)用對(duì)象的方法
ABAP 支持 local class 和 global class , local class 通過(guò)事務(wù)碼 SE38 / SE80 創(chuàng)建软驰,只能在本程序中使用涧窒;global class 通過(guò)事務(wù)碼 SE24 來(lái)創(chuàng)建,在所有的程序中都能使用锭亏。
ABAP 面向?qū)ο缶牢猓瑥母拍詈蜋C(jī)制來(lái)說(shuō),與其它編程語(yǔ)言并沒(méi)有太大區(qū)別慧瘤,主要是語(yǔ)法 (syntax) 的不同戴已。本文在示例的時(shí)候,特意引入 Java 代碼進(jìn)行說(shuō)明锅减。
假設(shè)我們要定義一個(gè) Book 類(lèi)糖儡,Book 類(lèi)有 Title、Author上煤、Publisher 和 Price 四個(gè)屬性,Java 代碼如下:
類(lèi)和對(duì)象初步
在 ABAP 語(yǔ)言中著淆,定義一個(gè)類(lèi)劫狠,需要包含定義 (definition) 和實(shí)現(xiàn) (implementation) 兩部分拴疤,定義部分聲明該類(lèi)包含的 attributes, methods 和 constructors; 在實(shí)現(xiàn)部分來(lái)實(shí)現(xiàn) constructor 和 method 的邏輯。同樣的功能独泞,在 ABAP 中代碼如下:
通過(guò) DATA
定義的屬性為實(shí)例屬性呐矾,ABAP 中使用 ->
符號(hào)調(diào)用對(duì)象實(shí)例的屬性或方法。接下來(lái)懦砂,創(chuàng)建兩個(gè) Book 的實(shí)例蜒犯,并且打印書(shū)籍的信息。
構(gòu)造方法
可以使用構(gòu)造方法 (constructor)荞膘,實(shí)現(xiàn)在實(shí)例化的時(shí)候傳入書(shū)籍的這 4 個(gè)屬性罚随,Java 代碼如下:
通過(guò)構(gòu)造方法,創(chuàng)建對(duì)象實(shí)例的代碼更加簡(jiǎn)潔羽资。將 4 個(gè)屬性變更為 private后淘菩,外部將不能訪問(wèn)這些屬性,對(duì)允許外部修改的屬性屠升,比如 price 專(zhuān)門(mén)提供了 setPrice()
方法來(lái)修改潮改。使用了 constructor 的 ABAP 類(lèi)代碼如下:
ABAP 類(lèi)和對(duì)象語(yǔ)法要點(diǎn)
- 完整的 class 代碼包含定義 (definition) 和實(shí)現(xiàn) (implementation) 兩部分;
- 在聲明部分腹暖,
public section
必須在private section
前面汇在; - 構(gòu)造函數(shù) (constructor) 名稱(chēng)始終為
constructor
,而其他主流語(yǔ)言的構(gòu)造函數(shù)一般與與類(lèi)名相同脏答。
源碼
本篇的代碼放在 github 上糕殉。