您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > SAP-ABAP程序设计基础教程第11章
第11章ABAP面向对象编程面向对象(Object-Oriented,即OO)是一种软件设计与开发的思想和方法,它按照人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的方法,通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应,该方法区别于传统的面向过程的程序设计,即通过过程或函数块来完成某些任务的传统程序设计方法。对象(Object):对象是指客观世界中存在的各种各样的实体,也可以指具体或抽象的事物,不同的业务领域的模型关心的实体会不同,类(Class):类是具有相似内部状态和运动规律的实体的集合。消息(Message):消息是指对象间相互联系和相互作用的方式类的特性抽象(Abstraction)封装(Encapsulation)继承(Inheritance)多态(Polymorphism)重载(Overloading)面向对象的优点面向对象可以使复杂的软件系统易于理解,因为面向对象的程序设计更好的实现了计算机语言对真实世界的抽象化和模拟。在设计良好的面向对象系统中,对系统的维护有可能被限定在类级别,即系统的重新设计只需要对类属性或方法进行修改,而不需要涉及所有其他系统元素,这将大大减轻系统的维护负担;通过多态和继承,面向对象程序设计可实现不同类之间的组件复用;对面向对象系统的修订和维护的工作量较一般系统而言将大量减轻,因为大部分的问题将在系统设计阶段被发现并加以改正。类的声明与实现类的声明部分的代码如下:CLASSclassDEFINITION[class_options][PUBLICSECTION.[components]]公共的类成员[PROTECTEDSECTION.受保护的类成员[components]][PRIVATESECTION.[components]]私有的类成员ENDCLASS.类的实现部分的代码如下:CLASSclassIMPLEMENTATION....METHOD......ENDMETHOD....ENDCLASS.类成员的可见范围公共部分(PUBLICSECTION):公共部分定义的类成员可以被所有的外部对象使用,包括类的方法及其派生类中定义的方法,公共部分的成员(尤其是方法)构成了类对外界的接口。保护部分(PROTECTEDSECTION):保护部分定义的类成员只能被类及其派生类中的方法使用,对其它类或程序不可见。私有部分(PRIVATESECTION):私有部分定义的类成员则只能被该类自身的其它成员所访问。类的成员类型在ABAP类中可以定义的成员类型有三种,即类的属性、方法和事件。属性:属性是类内部的数据对象,用于描绘类的状态。类的属性在类的声明部分进行定义,所有的ABAP类型都可以用于定义类的属性。在类属性的定义中,类的实例属性用DATA来定义,而类属性(静态的成员)则通过CLASS-DATA关键字来声明,如:CLASStest_classDEFINITION.PUBLICSECTION.CLASS-DATAtest_textTYPEstringVALUE‘HelloWorld’.PROTECTEDSECTION.DATAcountsTYPEi.ENDCLASS.除使用DATA语句定义类属性外,还可以使用CONSTANT语句来定义类的常量成员,类常量不能在编译和运行期间修改,必须在类定义时指明其值;还可以使用TYPES语句在类中定义数据类型,数据类型也相当于静态属性,其定义方法与普通ABAP的程序类似,如:CLASStest_classDEFINITION.PUBLICSECTION.CONSTANTSpiTYPEpVALUE'3.14'.公共常量TYPESmyid_type(18)TYPEc.自定义类型ENDCLASS.方法:声明方法的关键字有METHODS和CLASSMETHODS;其中METHODS用于声明对象实例方法,而CLASSMETHODS用于声明类方法(静态方法),方法实现部分的代码应该放在关键字METHOD和ENDMETHOD之间。常用的方法声明语句语法如下:METHODSmeth[ABSTRACT|FINAL][IMPORTING{VALUE(p1)}|{REFERENCE(p1)}|p1}TYPEdatatype][EXPORTING{VALUE(p1)}|{REFERENCE(p1)}|p1}TYPEdatatype][CHANGING{VALUE(p1)}|{REFERENCE(p1)}|p1}]TYPEdatatype][{RAISING|EXCEPTIONS}exc1exc2...].在方法的实现部分,只需要实现代码而不需要重新声明这个接口。METHODmeth……ABAPStatementENDMETHOD.事件:在类的定义过程中,事件也可以被声明为类的成员,类的事件成员被声明之后,类的所有内部方法均可触发该事件,还可以在当前类或其他类中定义捕捉事件的方法以对事件进行处理和响应类的创建ABAP中通过ClassBuilder(事务代码为SE24)工具来创建一个全局类,全局类被定义在类型为K的ABAP类库程序中,该类型程序不包含事件块、子程序、屏幕等元素,也不包含公有数据部分,因而也不能为其分配事务代码,如果该类被另外一个程序使用,则整个类库将被载入到程序内存中。创建全局类-1在ObjectNavigator(SE80)中左侧的导航区域,在右键弹出的上下文菜单上选择“CreateClassLibraryClass”创建全局类-2在弹出的窗口中输入类名,在下个输入域输入该类的简短描述,在“Instantiation”输入域选择“Public”,并且选择“Final”复选框Instantiation类的实例类型:PUBLIC表示该类的对象实例可以被所有用户创建、PROTECTED表示该类的对象实例只能被其本身或派生类创建,Private表示该类的对象实例只能通过其自身方法创建(Private)。Final最终类:如果选择了该项,则全局类不能被其它类所继承。Onlymodeled模型类:用于说明该类只有图形化模型,而没有具体实现部分。创建全局类的属性、方法、和方法参数Objectnavigator中类及成员的组织实现类的方法对象实例的创建一个类的声明与实现方法定义完成后,可以使用该类的对象实例来完成具体的功能,使用类的对象实例的步骤主要有如下几点:1、使用DATA语句中的TYPEREFTO选项定义一个指向该类型的一个引用变量(相当于定义一个指针)2、使用CREATEOBJECT语句创建对象3、通过“-”或“=”运算符访问对象或类组件类成员的访问方式访问内容语法一个对象的实例属性或静态属性ref-attr类的静态属性Class=attr在类内部访问自身实例属性或静态属性Me-attr或attr访问对象的实例方法或静态方法CALLMETHODref-meth访问类的静态方法CALLMETHODClass=attr在类内部访问自身实例方法或静态方法CALLMETHODMe-attr或CALLMETHODattr对象的内存回收方法的声明类方法的参数接口部分是在类声明部分通过METHODS语句定义的,而且该接口不需要在类的实现部分再次出现,类的实例方法(InstanceMethods)定义的语法如下:METHODSmeth[ABSTRACT|FINAL][IMPORTINGparameters][EXPORTINGparameters][CHANGINGparameters][RETURNING]VALUE(re_var)TYPEdatatype[{RAISING|EXCEPTIONS}exc1exc2...].方法的调用类实例方法的调用语法类方法(静态方法)的调用函数方法函数方法的多种调用方式函数方法声明与实现函数方法的调用方式构造方法构造方法的声明构造方法的实现构造方法的自动调用类内部的命名空间在一个ABAP类的内部有自己的命名空间,在命名空间之内的下列元素的名字不能重复:属性(Attributes)方法(Methods)事件(Event)内部类型(Types)常量(Constants)别名(ALIASnames)引用变量ME的用法类继承基类Person、子类Teacher和Student之间继承关系的定义基类Person、子类Teacher和Student的类实现基类Person、子类Teacher和Student的类对象实例方法的访问构造函数的继承与重定义抽象类与最终类抽象类是不能有任何对象实例的基类,其目的就是用于被子类继承。有时一个基类具有多个子类,但该基类只是作为模板出现的,不具有任何被实例化的意义,则可以将该类声明为抽象类(AbstractClass)。CLASSclassDEFINITIONABSTRACT.......ENDCLASS.抽象类中可以包含抽象方法,一个抽象方法不能在抽象类本身中被实现,而必须在其子类中被实现,含有抽象方法的类必须被定义为抽象类。最终类(FinalClass),是不能被继承的类,如果不希望一个类被继承,则可以定义该类为最终类,其定义语法为:CLASSclassDEFINITIONFINAL.......ENDCLASS.最终类的成员方法是不可以重新定义的方法,最终类中的所有方法都是最终方法,因而无需指明FINAL关键字,而非最终类中的最终方法则必须按下述语句声明:METHODSmethodABSTRACT......一个最终类可以同时为抽象类,但此时类中只能包含静态成员才有意义;一个最终方法则不可以同时是抽象方法,因为不能被继承和重写的抽象方法是没有任何意义的。基类与子类间的类型转换(Cast)窄转换(NarrowingCast)宽转换(WideningCast)接口接口是类对外提供服务或行为表现的声明,是外部程序访问类服务的协议,接口仅仅宣称自己“能做什么”,而实际上接口本身“什么都不做”,即接口本身只提供行为或动作的声明,而不提供这些行为或动作的实现。接口多态例--例1接口多态例--例2接口屏蔽--例3接口的定义方法接口的实现方法接口的调用事件事件的本质也是方法的调用,但是相对于传统的直接的方法调用,事件机制是松偶合的,且更加的灵活,事件触发者向大家公布自己的状态发生改变,事件的接收方可以对该变化表现出兴趣或者作出反映;事件的触发方只是发布事件,并不知道具体的事件用户(接受者)是谁;事件的触发方对谁会收到事件的情况并不感兴趣。事件机制在图形化用户界面(GUI)领域得到广泛运用,如鼠标的点击事件,窗口的Open事件等。在ABAP面向对象中,事件的触发和处理是通过特定的方法来完成的,一个方法作为触发者触发事件(EventsTrigger),而另一个方法则作为事件处理者捕获并处理事件(Eventsuser),事件触发者和事件的用户并不一定需要隶属于同一个类中或同一个对象中。Bell类和Teacher类的定义部分Bell类和Teacher类的实现部分调用Bell类对象的打铃方法触发一系列处理过程
本文标题:SAP-ABAP程序设计基础教程第11章
链接地址:https://www.777doc.com/doc-4817305 .html