物件導向
物件導向是以類比現實世界中的對象及其互動關係為問題解決方案的一種軟體設計思想,
其強大的優越性已經在無數成功的軟體研究和工程實踐得到印證,可以毫不誇張的說,物件導向是軟體工程思想和實踐領域的一種進化和革命。
面向過程為主的abap體係為了適應現代軟體工程發展的趨勢和ERP的進化,也逐漸,應該是不得不,推出一些物件導向的機制。儘管與其它純粹為OO而生的語言體系比顯得幼稚和笨拙,但必竟還是從無到有的具備了一些物件導向的優越性,更重要的是,目前SAP開發還是以ABAP為主的--儘管其早就宣布相容java,所以,只能忍著(看來,忍是一種智慧,這種智慧無處不在,從為人到處事,從學習到工作,呵,忍得亂花漸欲迷人眼,才能習得仗劍走江湖,才能守得雲開見月明),只能揚長避短,只能戴著鐐銬跳舞。
一、面向對像的基本要素
1、封裝
通俗的說,對象可以對其內部的資源的可見度進行限定,每個對象都有一個介面,決定了其它對象如何與之相互互動
2、多態
相同名稱的方法在不同的類中、不同的場合呈現出不同的行為。
3、繼承
可以從已存在類的基礎上建立新的衍生類別,衍生類別可以繼承原有類的方法與屬性,或者添加新的類成員
二、小例子
REPORT Z_V_TESTOO.
*類聲明
class application definition.
public section. "類方法
methods: show_text.
methods: show_jia.
private section. "類屬性
data text(100) type c value 'this is jiahongguangs test '.
endclass.
class application IMPLEMENTATION. "類定義
method show_text.
write text.
endmethod.
method show_jia.
write 'jiahonggaung'.
endmethod.
endclass.
*全域資料聲明
data ob_app type ref to application.
start-of-selection.
create object ob_app.
call method ob_app->show_text.
call method ob_app->show_jia.
程式中的類定義和聲明
abap中使用class /endclass語句進行類定義,且有聲明部分和具體實現部分組成,類聲明部分中包含類成員(具體包括類的屬性,方法和事件等)的名稱及說明,類的實現部分則包含具體的類方法的實現代碼。
class class definition
public section.
protected section.
private section.
endclass.
class class implementation.
method ......endmethod.
endclass.
如果將類定義與傳統計的abap語言進行比較,類中的聲明部分相當於原有的資料定義及聲明部分,則實現部分相當於具體代碼部分,其中類方法相當於子程式、功能模組等過程代碼模組,
成員的可見度:類的各個成員必須在definition部分進行聲明,在此之前,需要確定該組件的可見度,成員的可見度應基於封裝原則確定,對於面向對像中的類來說,其外部介面應該是易於接受且基本穩定的;
成員類型:abap中可以定義三種不同的成員類型,分別是屬性、方法、和事件,各成員的可見度以及生存周期在類定義的同時被確定;屬性是在類內部的資料對像,用於描繪類的狀態;對於靜態屬性
使用 class-data語句定義
class vehicle definition.
public section.
class-data class_name(10) typec c value 'vehicle'.
protected section.
data speed type i
endclass.
上述代碼在類vehicle中定義了一個靜態屬性claaa_name和一個執行個體屬性speed。對於公有組件,可以在屬性定義語句中增加read-only關鍵字,則該屬性不能被類外部讀取,但可被類的內部方法所修改,除data語句外也可以使用constant語句定義類常量,類常量不能在編譯和運行期內修改,必須在類定義時,指明其值,因為其性質類似於靜態屬性,類似地,可以使用type語句在類中定義資料類型,資料類型也相當於靜態屬性,
方法是對像行為的實現部分..可以將其視為是類中的過程,與過程類似,方法是與外界存在介面的程式斷,也是一種處理塊;在方法中,可以定義內部資料。執行個體方法只能訪問該對像執行個體中的所有屬性和事件,而靜態方法則只能訪問類的靜態屬性和事件;要調用執行個體方法,必須首先建立一個類執行個體,再通過該執行個體調用方法;而調用類的靜態方法時,則可通過執行個體或者類本身調用。