物件導向模式的資料封裝
oo模式的程式設計也有兩種資料型別,類例項的屬性和類方法中的本地變數。
例項屬性的生命週期依賴於物件的生命週期,本地變數的生命週期依賴於類方法的生命週期。所以物件導向的本地變數與面向過程的本地變數的生命週期是一樣的。它是類方法中的輔助變數與資料封裝無關。abap物件的資料封裝在類這個級別。可以定義類屬性的可見性,它的級別分別是在類內可見,在子類中可見,或者在外部類中可見。下面的例子演示了如何在類中封裝銀行賬號:
class account definition.
public section.
methods: constructor importing id type account-id,
deposit importing amount type accounts-amount,
withdraw importing amount type accounts-amount
raising cx_negative_amount,,
transfer importing amount type accounts-amount
target ref to account
raising cx_negative_amount.
private section.
data amount type accounts-amount.
endclass.
class account implementation.
method constructor.
select single amount into (amount)
from accounts
where id = id.
endmethod.
method deposit.
me->amount = me->amount + amount.
endmethod.
method withdraw.
if me->amount > amount.
me->amount = me->amount – amount.
else.
raise exception type cx_negative_amount.
endif.
endmethod.
method transfer.
me->withdraw( amount ).
target->deposit( amount ).
endmethod.
endclass.
在account類的定義部分可以定義屬性和方法的可見性(private public)。類的定義把功能和資料結合到了一塊。理論上,前面例子的功能池也做到了這點,只不過在不同的資料模組間進行互動的時候就暴露了其侷限性,所以功能池只能說是多個功能模組的容器還不能真正的共享資料。在abap oo的類中public部分定義了其與外部互動的介面。在這個例子中描述類狀態的屬性是私有的,而對外的公共介面是操作這些屬性的方法。
這個例子中的類既實現了前面面向過程的第乙個例子的簡單功能也實現了第二個例子較為複雜的功能。這個類的deposit,withdraw方法與第乙個例子的兩個功能模組的作用相同,由於你可以建立乙個類的多個物件,所以這個類只需封裝乙個銀行帳號的資料即可,constructor方法用來為不同的銀行賬號初始化資料。由於每個物件都有它自己的資料,所以你不需為類新增額外的引數。最後,不止於此,由於乙個物件可以呼叫另外乙個物件的方法,那麼不同銀行賬號之間的互動便有了更加簡潔的方案,這例子中transfer功能的實現要比前面第二個例子的實現簡單的多。
ABAP OO的八大理由 二
1.abap oo更加明確所以更易於使用。例如在使用abap oo你的程式的執行流程不再是由執行時隱含的控制。這樣你就可以自己去設計程式所執行的流程了而不必像面向過程那樣去了解和服從外部控制機制 即報表和dialog screen的事件 2.abap oo具有更加清晰的語法和語義規則,比如一些容易出...
ABAP OO的八大理由 三
對於面向過程的模式,程式的執行通常是從 screen 的dialog module 或selection screen 的start of selection 事件開始的。你在這些處理模組中操作全域性變數來實現需求的功能。你可以通過內部的 form 和外部的 function module 來實現程...
ABAP OO的八大理由 七
物件導向的例項化 行如其名,在物件導向的模式中,物件是唯一存在的東西。物件是類的例項,是通過create object語句來實現的。abap物件不可能被隱含的例項化,你通過指標變數來操作物件。當然你通過指標所操作的物件不一定是自己建立的,這種現象主要是通過指標操作的物件很有可能是從其他地方傳過來的,...