Abap oo
Upcoming SlideShare
Loading in...5
×
 

Abap oo

on

  • 2,120 views

abap oo

abap oo

Statistics

Views

Total Views
2,120
Slideshare-icon Views on SlideShare
2,120
Embed Views
0

Actions

Likes
0
Downloads
43
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Abap oo Abap oo Presentation Transcript

    • ABAP 面向对象编程一. 介绍二. 主要概念三. 使用 Control四. ALV Control 例子
    • 一 . 介绍 传统的 ABAP 面向过程编程 Procedural Programming  Functions are defined independently Data Data Data of data structures Data Data  Direct access to data Function Function Function Function Function Function Function Function Function Function Function Function Function Function Function Function © SAP AG 1999
    • 面向对象编程Object-Oriented Programming Model lcl_class  Class Attribute  Gives a general description of objects (“blueprint”) Attribute  Establishes status types (attributes) and behavior (methods) Method Method  Object  Reflection of real world Method Data Method  Specific instance of a class © SAP AG 1999
    • ABAP Objects 是 ABAP 的扩展,集合了 Java , C ++,Smalltalk 等语言的特点。和原来的 ABAP 无缝集成。 History of Programming Languages Machine language Assembler ABAP C++ Java ABAP Objects © SAP AG 1999
    • 二 . 主要概念 Class 在 SAP 中,可以在 SE24 或 ABAP 编辑器中定义 Class 。二者的区别类似 SE11 中定义的结构与 程序中定义的结构。 在 SE24 中,可以看到类的各个部件,条理清楚。 代码中的关键字,如 public , class-method 等 在 SE24 中都可以体现出来。
    • 在 ABAP 编辑器中定义 Class Class :分两部分定义。 Class 中不能再嵌套定义 Class 。 The Class as a Blueprint for Objects Definition part CLASS <classname> DEFINITION. The class components (for components ENDCLASS. example, attributes and methods) attributes methods) are defined in this part. CLASS <classname> IMPLEMENTATION. Implementation part Implementation part This part only contains the method part contains the method ENDCLASS. implementations. © SAP AG 1999
    • 定义 Class 的一个例子
    • Objects Object :就是 class 的实例 ( instance ) 使用 object 前,先要用下面的语句来定义 该 object 属于哪个类 data <object name> type ref to <class name> 定义完该对象后,就可以使用 create object <object name> 来创建对象了。这时系统会 分配一块内存区域给对象。
    •  create object 时,在内存中分配一个空间给该 Object 。Creating Objects: Syntax DATA: airplane1 TYPE REF TO lcl_airplane, CREATE OBJECT <reference>. airplane2 TYPE REF TO lcl_airplane. CREATE OBJECT airplane1. CREATE OBJECT airplane2. airplane1 name: weight: 0 airplane2 name: weight: 0 Main memory © SAP AG 1999
    •  如果内存中某个 object 区域不被指向,系统将释放这部 分内存。下图中对两个 object 使用等号之后,它们指向 同一个内存地址,同时释放一个 object 所占用的内存。 Garbage Collector ... DATA: airplane1 TYPE REF TO lcl_airplane, airplane2 TYPE REF TO lcl_airplane. CREATE OBJECT airplane1 EXPORTING ... . CREATE OBJECT airplane2 EXPORTING ... . airplane1 = airplane2. airplane1 name: LH B weight: 30,000 kg airplane2 name: AA Bost weight: 45,000 kg Main memory © SAP AG 1999
    •  可以使用 TYPE TABLE OF REF TO <class> 关键字定义一个内表, 来存放该类的多个对象。
    • Attribute 可以是各种类型,包括: Data types: scalar ( 例如 data element), structured, in tables , ABAP elementary types (C, I, ...) Object references Interface references
    •  按定义位置,分为 Public 和 Private. Public Attribute :能从 class 外直接访问和修 改。一般来说,尽量少定义 Public Attribute 。 Private Attribute :只能从类中访问和修改。
    •  按定义的关键字,分为 Instance 和 Static. Instance Attribute :同一个类中多个实例的 Instance Attribute 各自分开,具有不同的值。使用 DATA 关键字 定义。 用法:实例名 -> 属性Static Attribute :同一个类中多个实例的 Static Attribute 的值一样。可以通过各个实例或直接通过类来 访问和修改。使用 CLASS-DATA 定义。在 debug 时可 以看到 class-data 不占用 object 的内存。用法:实例名 -> 属性 或 类名 => 属性
    • Method 按定义位置,分为 Public 和 Private. 类 似 Attribute 。 Public Method : 能从类外调用。 Private Method :只能从该类中调用。
    •  按定义的关键字,分为 Instance 和 Static. Instance Method :能使用 static 和 instance 的内容。 使用 Method 定义。 用法:实例名 -> 方法名 Static Method :只能使用 static 的内容。可以不通过实 例,直接调用。使用 Class-Method 定义。 用法:实例名 -> 方法名 或 类名 => 方法名
    • Method 的参数 Method 的参数可以是 Class/Object 可以有 importing, exporting, changing, returning 等
    • Constructor 方法(初始化) 每个类都自动隐性带有名为 constructor ( Instance )和 class_constructor ( Static )方法。 要使用这两个 method ,必需首先定义它 们。 constructor 可以有参数和例外,而 class_constructor 没有参数。
    •  每次使用 create object 时自动执行 constructor 方法 . Class-constructor 在一个程序中只执行 一次。在以下事件前自动执行。 CREATE OBJECT 调用该类的属性 使用 Call Method Registering a static event handler Registering an evetm handler method for a static event
    •  如果 constructor 带有参数,在 create object 时就能够通过传入的参数初始化 object 。 例如CREATE OBJECT airplane1 exporting p2_name = Hansemand p2_planetype = Boing 747.
    • Protected protected sector 中的内容用可以被该类 自己,其父类和子类访问。
    • 继承 可以有多级继承 一个子类只有一个直接父类 类知道自己的 superclass ,但不知道自己 的 subclass 继承时, superclass 的内容不能除去,只 能加入新的内容 用法:定义 class 时,使用关键字 INHERITING FROM
    • Inheritance and Visibility CLASS lcl_airplane DEFINITION.  Public components PUBLIC SECTION.  Visible to all METHODS get_name RETURNING VALUE(re_name) TYPE string.  Direct access  Protected components PROTECTED SECTION. DATA tank TYPE REF TO lcl_tank.  Only visible within their class and within the PRIVATE SECTION. subclass DATA name TYPE string.  Private components ENDCLASS.  Only visible within the class  No access from outside the lcl_airplane + public class,not even from the # protected subclass # tank : lcl_tank - private - name : string + get_name ( ) : string © SAP AG 1999
    • InterfaceDefining and Implementing an Interface INTERFACE lif_document.  Interface only has a DATA: author TYPE REF TO lcl_author. declaration METHODS: print, display.  An interface ENDINTERFACE. corresponds to an abstract class that CLASS lcl_text_document DEFINITION. PUBLIC SECTION. only contains INTERFACES lif_document. abstract methods METHODS: display. ENDCLASS.  Interfaces are implemented in CLASS lcl_text_document IMPLEMENTATION. classes METHOD lif_document~print. ENDMETHOD.  Interfaces do not METHOD lif_document~display. have visibility ENDMETHOD. sections METHOD display. ENDMETHOD. ENDCLASS. © SAP AG 1999
    •  接口中只有定义。要完成的功能在 class 的 implementation 部分实现。接口中的部 件自动在类中可用。 接口不分为 public , private 等部分。 属性、方法、常量、类型等可以和类中的 一样定义 接口需要在类定义的 public 部分列出。 用法:<interface name>~<component name>
    •  可以使用 TYPE TABLE OF REF TO <interface> 关键字定义一个内表,来存 放属于不同类的对象。这些类必须都包含 这个接口。
    • Events Events 类似一个类,有自己的属性和方 法,能被其它某一个类调用。 Event 只能有 EXPORTING 参数 要使用 Events ,需要以下几点。 在 class 中定义 events ,和它的触发条件 ( events , raise ) 定义 events ,以及它实现的功能( method xxx for event of <class name> ) 使用包含 events 的 object 前,对 event 对象使用 create object ,并且用 set handler 语句,使 event 能够被响应。
    • 三 . 使用 Control (控件) 在对屏幕的编程中,常常使用 Control 技 术,能够实现如 VC , Java 等语言的一些 功能,如 Event , Attribute 等。方便用 户和系统交互。 常见的 Control : TextEdit , ALV , Picture , HTML viewer 等
    • 做一个 RichText 控件的例子 1. 创建控件 使用 Control 前,我们要先在屏幕上创建 一个 Container 控件。 Control 在这个控 件中显示、处理。
    •  创建完 container 后,就可以在程序中, 调用系统自带的 class 了。这里需要用到两 个 class: cl_gui_custom_container cl_gui_textedit 创建 object 的时候,传入 container 的名 字做参数,并传入是否自动换行等参数 (这些参数,是传到 constructor 方法的 )
    •  效果如图,可以看到是一个空白的控件,并自带 了一些按钮。控件的大小和位置与 container 一 致。
    • 2. 使用 cl_gui_textedit 的其它功能 可以调用该类中的方法,如 SET_FOCUS , GET_VISIBLE 等,来完成其它面向语言中 的一些常见功能。 通过类中的 event ,可以实现和用户的交 互。可以自己定义 handler ,来响应用户 的 events 。
    •  由于操作 control 的方法都是通过 RFC 函 数传到 front-end 实现的,因此要使用 FLUSH 方法来保持 front-end 和后台的同 步。 写法: CALL METHOD cl_gui_cfw=>flush.