380 likes | 775 Views
ABAP Objects. R. ABAP Objects. ABAP Objects as a strategic SAP technology Programming with objects, classes, and interfaces in ABAP Interoperability with other object systems. R. Positioning ABAP Objects. Benefits of object orientation Current situation External interoperability
E N D
R ABAP Objects • ABAP Objects as a strategic SAP technology • Programming with objects, classes, and interfaces in ABAP • Interoperability with other object systems
R Positioning ABAP Objects • Benefits of object orientation • Current situation • External interoperability • ABAP programming • What are ABAP Objects ? • Benefits of ABAP Objects
Benefits of Object Orientation • Encapsulation - outside vs. inside • Explicit interfaces • Control of complexity and dependencies • Reuse - of components and by inheritance • Maintainability • Interoperability across languages (Java, VB, ...) and object systems (DCOM/CORBA) • Foundation for patterns and frameworks
Current Interoperability Technology • BOR (Business Object Repository) • Foundation for DCOM/CORBA connection • Fully featured standard object model • Medium level object wrappers for business functionality written in standard ABAP • BAPIs (Business APIs) • Defined within the BOR • Function-oriented, stable interfaces to R/3 applications • Support for Internet applications
R Current ABAP Programming • Complexity reduction by powerful high-level programming constructs • Procedural abstraction (function library) • Data abstraction (type pools, complex data types) • Logical databases for hierarchical data access • Event-oriented programming with logical databases and interactive reporting • Fully integrated SQL interface • In-memory tables: fast key access, sorted and/or nested, group control, ... • ...
What Are ABAP Objects ? • Complete integration of a fully featured object model into the ABAP programming language • 100% upward-compatible extension of ABAP/4 • Bottom up: use objects in existing ABAP programs (reports, module- and function-pools) • Top down: call forms and functions from within objects • All ABAP language constructs are available within objects • Fully integrated into the ABAP Workbench • Class library for global classes (will absorb BOR)
Benefits of ABAP Objects • Identical object model for external access and internal usage • Seamless object model from analysis through design to implementation • Kernel-embedded foundation for objects • Make OO benefits available for the implementation of the world’s largest business application • True two-way interoperability: ABAP <=> Java, ABAP <=> VB, ... • Speed, speed, speed ! • Enabling technology for GUI programming with frontend controls (ActiveX, JavaBeans)
R ABAP Objects • ABAP Objects as a strategic SAP technology • Programming with objects, classes, and interfaces in ABAP • Interoperability with other object systems
Fundamentals: Objects vs. Data & Functions • Objects occur 'naturally' in the world. We want to model our software accordingly • E.g.: Transportation company: trucks (various kinds), loads (various), etc. • Functions and data • ‘Big common data structure’ and some common functions • Lots of CASE statements, sparsely filled data structures • Objects: car, truck, load, … • Various kinds of everything, objects for truck, load, … • Object: data and functions that belong together to model / implement a specific concept • Fewer CASE statements, densely filled data, cohesion
R Fundamentals: What Is an Object ? • Objects have… • ...state, described by its attributes • ...behavior, described by its methods • ...identity to distinguish them from other objects with same state and behavior • Objects can interact with each other... • ...by accessing (public) attributes • ...by calling methods • ...by raising or handling events • Objects are instances of classes
The ABAP Object • Classes… • ...specify behavior of ‘same kind of’ objects • ...define how objects can be accessed from outside (public vs. protected vs. private) • ...hide implementation details • ...may be specialized in subclasses CLASS class DEFINITION [ INHERITNG FROM superclass ]. [ PUBLIC SECTION. ...<definition of public components> ] [ PROTECTED SECTION. ...<definition of protected components> ] [ PRIVATE SECTION. ...<definition of private components> ] ENDCLASS. CLASS class IMPLEMENTATION. [...<method implementations> ] ENDCLASS.
An Example CLASS CTruck DEFINITION. PUBLIC SECTION. DATA: VehicleId TYPE I READ-ONLY. METHODS: LoadParcel IMPORTING Parcel TYPE REF TO CParcel, UnloadParcel … PRIVATE SECTION. DATA: ParcelTab TYPE REF TO CParcel OCCURS 0. ENDCLASS. CLASS CTruck IMPLEMENTATION. METHOD LoadParcel. APPEND Parcel TO ParcelTab. “-- do more stuff … ENDMETHOD. ENDCLASS. PROGRAM xy. DATA: Parcel TYPE REF TO CParcel, Truck1 TYPE REF TO CTruck, Truck2 TYPE REF TO CTruck. … “-- get input data for parcel from somewhere … CREATE OBJECT Parcel. CALL METHOD Parcel->SetPars EXPORTING Weight = In_weight. “--- deal with multiple instances CALL METHOD Truck1->UnloadParcel IMPORTING Parcel = Parcel. CALL METHOD Truck2->LoadParcel( Parcel ).
Some Important Points • Objects are created dynamically • Storage management, garbage collection • Access to objects via object reference only!!! • Distinguish instances by object reference • Only and explicit means of dependency • Sharing always and only via (object) references(similar to field-symbols; all other ABAP types are value-based!) • Internal data hidden from users • Private data accessible only by the object’s methods
Component Definitions • Attributes… • ...store the internal state of an object (data) • ...can be references to other objects • …can be: read-only, virtual, class attributes • …can be constants • Virtual attributes: ‘Attribute’ from the outside, inside the object Set- and Get-methods. Dynamic control of Set-/Get-methods. {DATA|CLASS-DATA} attr TYPE type [ VALUE val ] [ READ-ONLY ] [ VIRTUAL [ SET-METHOD set-method] [GET-METHOD get-method] ]. CONSTANTS const TYPE type VALUE val.
Component Definitions • Methods… • …are operations on objects (the ‘functionality’) • …are the only way to change the state of an object (other than public attributes) • ...have parameters and can raise exceptions (similar to function modules) • ...can pass back a return value • No method-name overloading! {METHODS|CLASS-METHODS} method [ IMPORTING ...<list of import parameters> ] [ EXPORTING ...<list of export parameters> ] [ CHANGING ...<list of import/export parameters> ] [ EXCEPTIONS ...<list of exceptions> ] [ RETURNING result TYPE t ].
Using Attributes and Methods CLASS c1 DEFINITION. PUBLIC SECTION. DATA: v1 TYPE I, o1 TYPE REF TO c1. METHODS: m1 IMPORTING a1 TYPE REF TO c1, m2 IMPORTING a1 TYPE REF TO c1 RETURNING result TYPE I. PRIVATE SECTION. DATA: v2 TYPE I. ENDCLASS. PROGRAM xy. DATA o1 TYPE REF TO c1. … “--- attribute can occur anywhere a ‘normal variable’ can occur CREATE OBJECT o1. x = o1->v1 + sin( o1-> v1 ). CALL FUNCTION 'abc' EXPORTING p1 = o1->v1 … . “--- some method calls … CALL METHOD o1->m1 EXPORTING a1 = o1. CALL METHOD o1->m1( o1 ). “-- short form for 1 exporting arg … y = obj1->m2( x ). “-- result can be used in expressions …
Component Definitions • Events... • ...occur at a particular point in time, e.g. ‘change in state of an object’ • ...can be raised to inform other interested objects • ...can pass parameters EVENTS event [ EXPORTING ...<list of export parameters> ].
R Event Handling • Events are handled by classes • General publish-subscribe model • Syntax similar to ‘Visual Basic’ event handling • Event handlers... • ...are methods for handling events from other objects • ...are declared with reference to the event to be handled (signature from there) • …must be ‘registered’ explicitly
Event Handling Example Sender Handler CLASS CWindow1 DEFINITION. PUBLIC SECTION. "--- handle events by implementing "--- event handler methods METHODS: OKClicked FOR EVENT Clicked OF CButton IMPORTING DoubleClick, CanClicked FOR EVENT Clicked OF CButton. DATA: OKBtn TYPE REF TO CButton. … ENDCLASS. CLASS CWindow1 IMPLEMENTATION. METHOD Init. CREATE OBJECT: OKBtn, CanBtn. SET HANDLER: OKClicked FOR OKBtn, CanClicked FOR CanBtn. ENDMETHOD. METHOD OKClicked. IF DoubleClick = 1. … ENDIF. ENDMETHOD. METHOD CancelClicked. … "--- DoubleClick not visible ENDMETHOD. ENDCLASS. *---- proxy class for GUI control CLASS CButton DEFINITION. PUBLIC SECTION. METHODS: SetLabel IMPORTING Txt TYPE … . EVENTS: Clicked EXPORTING DoubleClick TYPE I. ENDCLASS. CLASS CButton IMPLEMENTATION. … METHOD AnyMethod. … RAISE EVENT Clicked EXPORTING DoubleClick = 0. … ENDMETHOD. ENDCLASS.
Class Component Definitions • Class attributes... • ...are data on class level, independent of object / instance • ...are ‘always there’ like global variables / functions • ...have global lifetime, with scope tied to class • Class methods... • ...can only access class attributes • ...can be called like ‘global functions’, but are tied to class *--- class attribute definition CLASS-DATA: var TYPE t … . *--- class method definition CLASS-METHODS: cm … <parameter syntax like methods>.
Using Class Components *---- Transaction controller for nested transactions ---- CLASS TACtrl DEFINITION. PUBLIC SECTION. “--- class method to create new controller instance CLASS-METHODS: CreateNew RETURNING TaObj TYPE REF TO TACtrl. CLASS-DATA: Current TYPE REF TO TACtrl READ-ONLY. METHODS: Commit, Abort. “-- instance methods PRIVATE SECTION. CLASS-DATA:TAStack TYPE REF TO TACtrl OCCURS 0. ENDCLASS. CLASS TACtrl IMPLEMENTATION. METHOD CreateNew. DATA NewTA TYPE REF TO TACtrl. CREATE OBJECT NewTA. APPEND NewTA TO TAStack. Current = NewTA. ENDMETHOD. ENDCLASS. PROGRAM xy. “--- start nested transaction CALL METHOD TACtrl=>CreateNew. … CALL METHOD TACtrl=>Current->Commit.
Inheritance • A class can be derived from another • Only specify what is different / added • Add attributes and methods • Redefine / override existing methods (in any section) = change implementation, ‘slight change’ of interface possible • ‘Single inheritance’ on class CLASS class DEFINITION INHERITING FROM superclass. … SECTION. “--- added attributes and methods DATA: … METHODS: … “--- override / redefine existing method METHODS m REDEFINITION … ENDCLASS.
Using Inheritance • Polymorphism on object references CLASS DrawableObject DEFINITION PUBLIC SECTION. METHODS: Draw. ENDCLASS. DrawableObject Point Polygon Bitmap CLASS Polygon DEFINITION INHERITING FROM DrawableObject. PUBLIC SECTION. METHODS: AddPoint IMPORTING P TYPE T_Point, Draw REDEFINITION. PRIVATE SECTION. DATA: PointTab TYPE T_Point OCCURS 0. ENDCLASS. CLASS Polygon IMPLEMENTATION. METHOD Draw. DATA: Point TYPE T_Point. LOOP AT PointTab INTO Point. CALL METHOD DrawableObject=>Draw( Point ). ENDLOOP. ENDMETHOD. ENDCLASS. PROGRAM xy. DATA: DObj TYPE REF TO DrawableObject. DATA: DObjTab TYPE REF TO DrawableObject OCCURS 0. “--- create drawable objects … “--- draw all of them LOOP AT DObjTab INTO DObj. CALL METHOD DObj->Draw. ENDLOOP.
Interfaces • Interfaces define the interaction between different objects • Polymorphism independent of class / inheritance • Classes can implement multiple interfaces • Uniform access through interface reference
Interface Definition • Interfaces... • …can define same components as class - without implementation • ...may ‘enclose’ multiple other interfaces (hierarchy) • …have separate name spaces for their components • Components of enclosed interfaces are not visible in the top-level interface (‘black boxes’); there is a mapping/aliasing feature INTERFACE interface. [ INTERFACES ...<list of comprised interfaces> .] [ ...<definition of interface components> ] ENDINTERFACE.
Interfaces • Implementation of interfaces • A class can implement many interfaces • Interfaces are implemented ‘side-by-side’ in a class (like COM) • No name conflicts on the class level • No semantic conflicts at class level and interface composition • Using interfaces • Access by interface reference like object reference • An interface reference only exposes the components of that interface • Assignment / ‘cast’ to another interface possible
Interface Example CLASS CArchiveMgr. DATA: IAObj TYPE REF TO IArchive. DATA: IATab TYPE REF TO IArchive OCCURS 0. … METHOD AddToArchive IMPORTING IAObj … APPEND IAObj TO IATab. ENDMETHOD. METHOD DoArchive. “--- archive all objects in table LOOP AT IATab INTO IAObj. WRITE: / “Wrote:”, IAObj->ObjID. CALL METHOD IAObj->SaveYourself … . ENDLOOP. ENDMETHOD. INTERFACE IArchive DEFINITION. DATA: ObjID TYPE T_OID VIRTUAL. “-- fast EVENTS: Saved, … . METHODS: SaveYourself IMPORTING … . ENDINTERFACE. CLASS Customer DEFINITION. INTERFACES: IArchive, IWorkflow, … . ENDCLASS. CLASS Customer IMPLEMENTATION. … METHOD IArchive~GET_ObjID. CALL FUNCTION ‘Archive_Get_OID’ … IMPORTING IArchive~objid. “-- no more recompute SET DIRECT READ ACCESS FOR IArchive~ObjID. ENDMETHOD. … METHOD IArchive~SaveYourself. “--- save all own data into … … RAISE EVENT IArchive~Saved … . ENDMETHOD. … ENDCLASS.
class 1specific Class 1 Part Object reference if 3specific Interface reference Interface 3 Interface reference interface 1 Interface reference interface2 Interface 4 if 4specific Interface reference class 2specific Class 2Part Object reference Interface reference interface5 Interfaces and Classes Interface 1 Interface 2 Comprising Interface 3 Interface 4 Interface 5 Implementing Class 1 Inheritingfrom Class 2
R Naming and Visibility • Class components... • …share a common name space within the class • ...may be • public = visible to all • protected = visible to subclasses and implementation • private = visible to the class implementation only • ...depend on instance data or not • Interface components • Separate name space for interface components • Interfaces are visible as a whole (like ‘view’)
Miscellaneous • Avoid naming conflicts, selectively make components visible • Constructor (Destructor) • Friends {CLASS … DEFINITION | INTERFACE … }. INTERFACES i. ... ALIASES a FOR i~a. {ENDCLASS|ENDINTERFACE}. CLASS class DEFINITION. ... METHODS CONSTRUCTOR "--- name / syntax TBD IMPORTING p TYPE t … . … ENDCLASS. CLASS c1 DEFINITION CLASS c2 DEFINITIONEXPOSING PRIVATE COMPONENTS ACCESSING PRIVATE COMPONENTS TO c2. OF c1. ... ... PRIVATE SECTION. PRIVATE SECTION. ENDCLASS. ENDCLASS.
R The ABAP Object Model • Summary • Classes and interfaces • Attributes, methods, and events • Classes can implement interfaces • Interface composition • Single inheritance for classes, multiple composition + aliasing for interfaces • Event handling
R ABAP Objects • ABAP Objects as a strategic SAP technology • Programming with objects, classes, and interfaces in ABAP • Interoperability with other object systems
Client / Server Client / Server VisualBasic Component Connector DCOM *Script, ... ABAP Objects CORBA Java CORBA Bridge Interoperability: DCOM and CORBA
Interoperability Features • Transparent two-way mapping between ABAP Objects and external object models • Automatic generation of proxies and stubs • Location transparency: • CREATE OBJECT obj DESTINATION dest • Delta management for mass data • For details see presentation on Distributed Objects