Beruflich Dokumente
Kultur Dokumente
October,2005
Jayanth.C
2
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Evolutions in ABAP as a programming
language
In seventies ABAP stood for “AllgemeirBerichicts-
Aufbereitungs Prozessor”( General Report Preparation
Processor ).
In mid eighties ABAP had developed into an interpreter
language which was a main component of the R/2
system and which could cope up with business
application programs.
In early nineties, ABAP evolved as a 4th generation
programming language.
3
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Different approaches of Programming
Unstructured Programming.
Procedural Programming.
Object Oriented Programming.
4
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Unstructured Programming
report ysubdel.
DATA : sal type p decimals 2, Characteristics
itax type p decimals 2,
net_sal type p decimals 2 .
Consists of only one main program.
sal = 12000.
IF sal lt 5000 . The program stands for a sequence of
itax = 0.
ELSE.
commands which modify data that is
itax = sal * '0.01'. global throughout the whole program.
ENDIF.
net_sal = sal - itax.
write:/5 sal , itax , net_sal.
Disadvantages
sal = 3500.
IF sal lt 5000 .
itax = 0. Difficult to manage once the program
ELSE.
itax = sal * '0.01'. becomes large.
ENDIF.
net_sal = sal - itax. Same sequence of statements are
write:/5 sal , itax , net_sal. repeated at multiple places, if they are
needed at multiple locations.
5
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Procedural Programming
report ysubdel.
DATA : sal type p decimals 2 ,
itax type p decimals 2 ,
net_sal type p decimals 2.
A procedure call is used to invoke the
sal = 12000.
procedure.
PERFORM sub_calc_tax USING
sal itax net_sal. After the sequence is processed, flow
sal = 3500. of control proceeds right after the
PERFORM sub_calc_tax USING position where the call was made.
sal itax net_sal.
7
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Implications of introduction of ABAP
Objects
ABAP objects and ABAP are inextricably linked.
Drift from a structural programming approach towards
Object oriented approach
But to keep you comfortable, ABAP is still supported and
allows you to use object-oriented elements.
Questions Unanswered:
Then why should I learn ABAP objects?
Why don’t I use the classical approach?
8
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Are ABAP Objects mandatory?
Continue our Technical consultancy career in SAP with out
bottlenecks
Should be able to provide solutions to heterogeneous kinds of
client technical requirements related to
Program involving in Reuse available
multiple functional Standard/Custom classes
requirements in ABAP
Business Server Pages GUI Control Framework
Explicitness
Maintainability
Purified ABAP
Scalability
10
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Object Orientation – What are Objects?
12
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Some Classes & Their Objects
Maruthi 800 Raja’s Maruthi,
Prasad’s Maruthi,
Ramani’s Maruthi
Customer Steelcase, Coke, GE, BMS, Exxon,
Hitachi, Hospira
13
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Object-oriented Programming
“Object-oriented programming is a method of
implementation in which programs are organized as
cooperative collections of objects, each of which
represents an instance of some class...”
Grady Booch
14
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Behavior, State & Identity
Behavior:{Methods}
– “behavior is how an object acts and reacts, in terms of
its state changes and message passing.”
State:{Attributes}
– “... encompasses all of the (usually static) properties of
the object plus the (usually dynamic) values of each of
these properties.” .
Identity:{Key}
“... that property which distinguishes it from all other
objects.”
15
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Object-oriented
Application Development
A way to design and build applications
– Objects bundle together data (state) and methods
(behavior)
– Objects facilitate separating definition from
implementation
16
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Sample Attributes & Methods
Class Attributes Methods
CricketTeam Captain, DoSingle,DoDouble
VC, WC, DoBowl,DoCatch
FB1,FB2,FB3 DoRunout,HitSix,
SP1,SP2,SUB Doplay,HitBowndary
ICICI S.A. Account Number, ATM_Transfer,
Balance, E_transfer, Withdraw,
CreditLimit Check_Credit_limit,
CheckBooks Issue_check_book,
Track_transactions
Production PO#,SSD,SED,AS Start_Production,End_produc
D,AED,Comp,CoO tion,Start_opr,Send_to_WS
ptn,Oper,Workce Etc
nter 17
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Basic Object-oriented Principles
Abstraction
Encapsulation
Hierarchies
18
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Abstraction
Public View of an Object
19
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Abstraction - Example
“What should an
Automobile
Object: Automobile object do?”
Start
Stop
Drive
PumpFuel
20
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Encapsulation
Hide Implementation Details
21
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Encapsulation - Example
Object: Splendor
Implementation Outside View
EngineNum,
Gear#,
Fuel_MrtRd, Public
SpeedometrRd methods of
StartEngine(), Splendor class
StopEngine(),Cosu
mePetrol(),
Move_Wheel()
Start(),
Start(), Stop()
Stop() PumpFuel(),
PumpFuel(), Change_gear()
Change_gear() 22
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Encapsulation - Example continued
Object: Splendor
EngineNum, Hmm...
Gear#, I’d like to change
Fuel_MrtRd, Consume_petrol to
SpeedometrRd Consume_diesel
StartEngine(),StopE
ngine(),Consume_P
etrol(),
Move_Wheel()
Start(),
Stop() Consume_fuel() calls
Pump_Fuel(), Consume_Petrol( )
Change_gear()
23
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Encapsulation - Example continued
Object: Splendor
EngineNum,
Gear#, This change was easy
Fuel_MrtRd, because users of the
SpeedometrRd
object will not be
affected.
StartEngine(),
StopEngine(),Consu
me_Diesel(),
Move_Wheel())
Start(), Consume_fuel() calls
Stop() Consume_Diesel( )
Pump_Fuel(),
Change_gear()
24
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Hierarchies
Object Relationships
Define relationships between objects
– Objects defined in terms of other objects
– Allows state and behavior to be shared and
specialized as necessary
– Encourages code reuse
25
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Hierarchies - Example
Automobile
is a is a is a
2-Wheerler,
3-Wheeler and
4-Wheerler
inherit from
Automobile 26
© 2005 Intelligroup, Inc. 2018/4/21
(Inheritance) Confidential and proprietary
Hierarchies - Example
Automobile
uses Engine
Automobile (Aggregation)
references
Engine
27
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Summary : Object-oriented Principles
Abstraction
– Break up complex problem
– Focus on public view, commonalities
Encapsulation
– Hide implementation details
– Package data and methods together
Hierarchies
– Build new objects by combining or extending other
objects
28
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
ABAP Object Oriented Programming
29
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
ABAP Object Oriented Programming
Defining a Referrence
Creating an Object
Calling a Method
Method implementation
30
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Comparison between Procedural and Object Oriented Programming
32
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Summary-- Components of a Class
Events:- A mechanism set within a class which can help a class to trigger
methods of other class.
34
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Lets Design
35
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
DAY 2
37
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes
• Local classes are defined within an ABAP program. Local
classes and interfaces can only be used in the program in
which they are defined.
• When you use a class in an ABAP program, the system first
searches for a local class with the specified name. If it does
not find one, it then looks for a global class.
• Apart from the visibility question, there is no difference
between using a global class and using a local class.
• Certain restrictions apply when you define the interface of a
global class, since the system must be able to guarantee that
any program using an object of a global class can recognize
the data type of each interface parameter.
38
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes
• Defining Local Classes:
• A complete class definition consists of a declaration
part and, if required, an implementation part.
The declaration part of a class <class>
CLASS <class> DEFINITION.
...
ENDCLASS.
• It contains the declaration for all components
(attributes, methods, events) of the class.
• The declaration part belongs to the global program
data.
39
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes
• If you declare methods in the declaration part of a
class, you must also write an implementation part
for it. This consists of a further statement block:
CLASS <class> IMPLEMENTATION.
...
ENDCLASS
• The implementation part of a local class is a
processing block. Subsequent coding that is not
itself part of a processing block is therefore not
accessible.
40
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Defining Local Classes
REPORT YSUBOOPS17 .
CLASS c1 DEFINITION.
PUBLIC SECTION.
Defined in the global area
data : w_num type i value 5. of a local program :-
methods : m1.
CLASS <class name>
ENDCLASS. DEFINITION.
CLASS c1 IMPLEMENTATION. …..
METHOD M1. ENDCLASS.
WRITE:/5 'I am M1 in C1'.
All the attributes ,
ENDMETHOD.
methods, events and
ENDCLASS. interfaces are declared here.
START-OF-SELECTION.
Cannot be declared inside a
DATA : oref1 TYPE REF TO c1 .
subroutine/function module.
CREATE OBJECT : oref1.
Class definition cannot be
write:/5 oref1->w_num.
nested.
CALL METHOD : oref1->m1 .
41
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Implementing Local Classes
REPORT YSUBOOPS17 .
CLASS c1 DEFINITION. Local class in a program is implemented as
follows:-
PUBLIC SECTION.
CLASS <class name>
data : w_num type i value 5. IMPLEMENTATION.
methods : m1. …..
ENDCLASS.
ENDCLASS.
CLASS c1 IMPLEMENTATION.
Methods used by the class are described here.
METHOD M1.
WRITE:/5 'I am M1 in C1'. A class can be implemented
ENDMETHOD. At the end of the program( like subroutines).
ENDCLASS.
After the class definition.
START-OF-SELECTION.
DATA : oref1 TYPE REF TO c1 . If the latter is adopted, one must then assign
subsequent non-declarative statements explicitly
CREATE OBJECT : oref1.
to a processing block, such as START-OF-
write:/5 oref1->w_num. SELECTION, so that they can be accessed.
CALL METHOD : oref1->m1 .
42
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Different places of implementing class
Class implemented at the end of Class implemented after Definition
the program
43
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes
Structure of a Class
The following statements define the structure of a
class:
• A class contains components
• Each component is assigned to a visibility section
• Classes implement methods
44
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes : Class Components
• All components are declared in the declaration part of the
class.
• When you define the class, each component is assigned to
one of the three visibility sections, which define the external
interface of the class.
• All of the components of a class are visible within the class.
• Instance components exist separately for each object in the
class
• static components exist only once for the whole class,
regardless of the number of instances.
• All components that you can declare in classes can also be
declared in interfaces
45
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes : Class Components
• Attributes:
• Attributes are internal data fields within a class that can have
any ABAP data type.
• The state of an object is determined by the contents of its
attributes.
• One kind of attribute is the reference variable. Reference
variables allow you to create and address objects.
• Instance Attributes: DATA
• Static Attributes : CLASS-DATA
• Static Attributes are accessible for the entire runtime of the
class.
46
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes : Class Components
• Methods
• Methods are internal procedures in a class that define the behavior of an object.
• They can access all of the attributes of a class. This allows them to change the
data content of an object.
• They are similar to function modules or procedures.
• The private attributes of a class can only be changed by methods in the same
class.
• In Definition Part
• Instance Methods: METHODS .
• Instance Methods can access all the attributes of a class and can trigger all the
events of a class.
• Static Methods : CLASS-METHODS . They can only access static attributes and
trigger static events.
• In implementation Part.
METHOD <meth>.
...
ENDMETHOD.
47
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes : Class Components
Special Methods:
• CONSTRUCTOR:
• Cannot call with CALL METHOD statement.
• Called automatically when you create an object
• CLASS_CONSTRUCTOR:
• Called when you first access the components of a class
Events:
• Objects or classes can use events to trigger event handler
methods in other objects or classes.
• When an event is triggered, any number of event handler
methods can be called.
• the handler determines the events to which it wants to react.
There does not have to be a handler method registered for
every event.
48
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes : Class Components
• The events of a class can be triggered in the methods of the
same class using the RAISE EVENT statement.
• The event handler methods can be of the same or a different
class.
• FOR EVENT <evt> OF <class>. Addition
• Events have a similar parameter interface to methods, but
only have output parameters.
• These parameters are passed by the trigger (RAISE EVENT
statement) to the event handler method, which receives them
as input parameters.
• The link between trigger and handler is established
dynamically in a program using the SET HANDLER statement.
49
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes : Class Components
• The trigger and handlers can be objects or classes, depending
on whether you have instance or static events and event
handler methods.
• When an event is triggered, the corresponding event handler
methods are executed in all registered handling classes.
• Instance Events: EVENTS keyword.
• An instance event can only be triggered in an instance
method.
• Static Events : CLASS-EVENTS
• All methods (instance and static methods) can trigger static
events.
• Static events are the only type of event that can be triggered
in a static method.
50
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes : Class Components
Types:
• You can define your own ABAP data types within a
class using the TYPES statement.
• Types are not instance-specific, and exist once only
for all of the objects in a class.
Constants:
• Constants are special static attributes.
• You declare them using the CONSTANTS statement.
• Constants are not instance-specific
51
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes : Visibility Sections
You can divide the declaration part of a class into up to three visibility
areas:
CLASS <class> DEFINITION.
PUBLIC SECTION.
...
PROTECTED SECTION.
...
PRIVATE SECTION.
...
ENDCLASS.
• They define the external interface of the class to its users
Encapsulation :
• The public components of global classes may not be changed once
you have released the class.
• As well as defining the visibility of an attribute, you can also protect
it from changes using the READ-ONLY addition.
52
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Sections of a There is no default visibility section in a class.
54
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes
55
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classes
REPORT demo_class_counter .
START-OF-SELECTION.
CREATE OBJECT cnt.
CALL METHOD cnt->set EXPORTING set_value = number.
DO 3 TIMES.
CALL METHOD cnt->increment.
ENDDO.
CALL METHOD cnt->get IMPORTING get_value = number.
WRITE number.
56
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Two Additions in Local Class Definition
Used to refer to a class at some point in a code and the class is not
defined before the line.
CLASS C2 DEFINITION DEFERRED.
CLASS C1 DEFINITION. start-of-selection.
public section.
data : num type i value 5.
ENDCLASS.
57
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Two Additions in Local Class Definition
58
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
CREATE PUBLIC|PROTECTED|PRIVATE
ADDITIONS
CREATE PUBLIC addition is implicit in every class definition if the other CREATE
additions are not used. It defines the default state, that is, that every user can create
instances of the class.
Addition of CREATE PRIVATE means the class can only instantiate itself or the
friends of the class can instantiate it.
59
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Object Handling
• Each object has a unique identity and its own attributes.
• Object References To access an object from an ABAP
program, you use object references. Object references are
pointers to objects. In ABAP, they are always contained in
reference variables.
• A reference variable that points to an object knows the
identity of that object. Users cannot access the identity of the
object directly.
• Reference variable can occur as a component of a structure
or internal table as well as on its own.
• There are two principal types of references: Class references
and interface references
60
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Object Handling
• ... TYPE REF TO <class>
Creating Objects
• CREATE OBJECT <cref>.
Addressing the Components of Objects:
• You can access the instance components of an object using
references in reference variables only.
• To access an attribute <attr>: <ref>-><attr>
• To call a method : CALL METHOD <ref>-><meth>
• You can access static components using the class name as
well as the reference variable.
• It is also possible to address the static components of a class
before an object has been created.
61
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Object Handling
• Addressing a static attribute <attr>: <class>=><attr>
• Calling a static method <meth>: CALL METHOD
<class>=><meth>
• Within a class, you can use the self-reference ME to access
the individual components:
• To access an attribute <attr> in the same class: ME-><attr>
• To call a method <meth> in the same class: CALL METHOD
ME-><meth>
• Self references allow an object to give other objects a
reference to it. You can also access attributes in methods
from within an object even if they are obscured by local
attributes of the method.
62
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Object Handling
• Assigning References
• When you assign a reference to a different reference
variable, their types must be either compatible or
convertible.
• <cref1> = <cref2>
• <cref1> and <cref2> refer to same class.
• <cref1> type ref to root class OBJECT.
• Inheritance & Interface situations.
• Class OBJECT is just a container. You cannot access
components of class with OBJECT reference
63
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Object Handling
• An object is in use by a program for as long as at
least one reference points to it, or at least one
method of the object is registered as an event
handler.
• Automatic garbage collection
• Object Names in debugger
64
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Object Handling
65
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Declaring and Calling Methods
Declaring Methods :
• You can declare methods in the declaration part of a class or
in an interface.
To declare instance methods, use the following statement:
METHODS <meth>
IMPORTING.. [VALUE(]<ii>[)] TYPE type [OPTIONAL]..
EXPORTING.. [VALUE(]<ei>[)] TYPE type [OPTIONAL]..
CHANGING.. [VALUE(]<ci>[)] TYPE type [OPTIONAL]..
RETURNING VALUE(<r>)
EXCEPTIONS.. <ei>..
and the appropriate additions.
To declare static methods, use the following statement:
CLASS-METHODS <meth>...
Both statements have the same syntax.
66
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Declaring and Calling Methods
• The default way of passing a parameter in a method
is by reference.
• To pass a parameter by value, you must do so
explicitly using the VALUE addition.
• The return value (RETURNING parameter) must
always be passed explicitly as a value. If you use it,
you cannot use EXPORTING or CHANGING
parameters.
• You can use exception parameters (EXCEPTIONS) to
allow the user to react to error situations when the
method is executed.
67
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Declaring and Calling Methods
Implementing Methods :
• METHOD <meth>.
...
ENDMETHOD.
• Static methods can work with only the static attributes of a
class.
Calling Methods :
• CALL METHOD <meth> EXPORTING... <ii> =.<f i>...
IMPORTING... <ei> =.<g i>...
CHANGING ... <ci> =.<f i>...
RECEIVING r=h
EXCEPTIONS... <ei> = rc i...
68
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Implementing Methods
69
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Static Method
70
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Declaring and Calling Methods
• Within the implementation part of a class, use
CALL METHOD <meth>...
• Visible instance & static methods can be called from outside
the class using
CALL METHOD <ref>-><meth>...
• Visible static methods can be called from outside the class
using
CALL METHOD <class>=><meth>...
where <class> is the name of the relevant class.
• You need not import the output parameters into your program
using the IMPORTING or RECEIVING addition. C
71
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Declaring and Calling Methods
• If the interface of a method consists only of a single
IMPORTING parameter, you can use
CALL METHOD <method>( f).
The actual parameter <f> is passed to the input
parameters of the method.
• If the interface of a method consists only of
IMPORTING parameters, you can use
CALL METHOD <method>(....<ii> =.<f i>...).
72
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Dynamic Method Calls
73
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Declaring and Calling Methods
Event Handler Methods :
• Event handler methods cannot be called using the CALL
METHOD statement. Instead, they are triggered using events.
• You define a method as an event handler method using the
addition
... FOR EVENT <evt> OF <cif>...
in the METHODS or CLASS-METHODS statement.
• The interface may only consist of IMPORTING parameters.
• Each IMPORTING parameter must be an EXPORTING
parameter of the event <evt>
• The attributes of the parameters are defined in the
declaration of the event <evt> (EVENTS statement) and are
adopted by the event handler method.
74
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Declaring and Calling Methods
Constructors:
• Constructors are special methods that cannot be called using
CALL METHOD.
• They are called automatically by the system to set the starting
state of a new object or class.
• Constructors are methods with a predefined name.
• To use them, you must declare them explicitly in the class.
Instance constructor : You declare it in the public section as
follows:
METHODS CONSTRUCTOR
IMPORTING.. [VALUE(]<ii>[)] TYPE type [OPTIONAL]..
EXCEPTIONS.. <ei>.
and implement it in the implementation section like any other
method.
75
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Declaring and Calling Methods
• The system calls the instance constructor once for each
instance of the class, directly after the object has been
created in the CREATE OBJECT statement.
• You pass the parameters to the constructor and handle the
exceptions in CREATE OBJECT stmt.
• static constructor :
• CLASS-METHODS CLASS_CONSTRUCTOR.
• The static constructor has no parameters.
• The system calls the static constructor once for each class,
before the class is accessed for the first time.
• The static constructor cannot therefore access the
components of its own class.
76
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Instance Constructor
Executed once for each instance.
79
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
DAY 3
81
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Creating Subclass
82
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Inheritance
• You can add new components to the subclass. This
allows you to turn the subclass into a specialized
version of the super class.
• A class can have more than one direct subclass, but
it may only have one direct super class. This is
called single inheritance.
• The root node of all inheritance trees in ABAP
Objects is the predefined empty class OBJECT.
83
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Inheritance
• Redefining Methods: you can use the REDEFINITION addition
in the METHODS statement to redefine an inherited public or
protected instance method in a subclass and make its
function more specialized.
• The implementation of the redefinition in the subclass
obscures the original implementation in the super class.
• Any reference that points to an object of the subclass uses
the redefined method, even if the reference was defined with
reference to the superclass.
• This particularly applies to the self-reference ME->.
• Within a redefined method, you can use the pseudo reference
SUPER-> to access the obscured method.
84
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Modifying methods in subclass
85
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Inheritance
Abstract and Final Methods and Classes :
• An abstract method is defined in an abstract class and cannot
be implemented in that class.
• A final method cannot be redefined in a subclass.
References to Subclasses and Polymorphism:
• Reference variables defined with reference to a super class
can also contain references to any of its subclasses.
• A reference variable defined with reference to a super class or
an interface implemented by a super class can contain
references to instances of any of its subclasses.
• Reference variable defined with reference to OBJECT can
contain reference to any reference variable.
• CREATE OBJECT statement with type addition
86
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Abstract Methods and Classes
87
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Final Methods and Classes
88
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Inheritance
Inheritance and Static Attributes
• In terms of inheritance, static attributes are not
assigned to a single class, but to a part of the
inheritance tree.
• When you address a static attribute that belongs to
part of an inheritance tree, you always address the
class in which the attribute is declared, irrespective
of the class you specify in the class selector.
• This is particularly important when you call the static
constructors of classes in inheritance.
89
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Inheritance and Static Attributes
CLASS c1 DEFINITION.
PUBLIC SECTION . Static attributes only exist
CLASS-DATA : num TYPE I VALUE 5 . once in each inheritance tree.
ENDCLASS. One can change them from
outside the class using the
CLASS c1 IMPLEMENTATION.
class component selector
ENDCLASS.
with any class name, or
within any class in which they
CLASS c2 DEFINITION INHERITING FROM
c1. are shared.
ENDCLASS.
They are visible in all
CLASS c2 IMPLEMENTATION.
classes in the inheritance
ENDCLASS. tree.
START-OF-SELECTION.
c2=>num = 7.
write:/5 c1=>num .
Output : 7
90
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Inheritance
Inheritance and Constructors
• Every class has an Instance constructor called
CONSTRUCTOR.
• Instance constructors of the various classes in an inheritance
tree are fully independent of one another.
• You cannot redefine the instance constructor of a super class
in a subclass
• The instance constructor of a subclass has to ensure that the
instance constructors of all of its super classes are also
called.
• To do this, the instance constructor of each subclass must
contain a CALL METHOD SUPER->CONSTRUCTOR statement.
91
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Inheritance
• Supplying values using CREATE OBJECT in inheritance
• Supplying values using
CALL METHOD SUPER->CONSTRUCTOR in inheritance.
• The instance constructor of a subclass is divided into two
parts by the CALL METHOD SUPER->CONSTRUCTOR
statement. In the statements before the call, the constructor
behaves like a static method
• In a constructor method, the methods of the subclasses of the
class are not visible. ( REDEFINITION not effective )
Static Constructors
92
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Inheritance and Instance Constructors
class c1 definition.
. . . . . . .
With inheritance, a reference variable
endclass.
defined with respect to a class may not only
class c1 implementation. point to instances of that but also to
. . . . . . instances of subclasses of the same. One
endclass. can even create subclass objects using a
reference variable typed with respect to a
class c2 definition inheriting from c1.
. . . . . . super class.
endclass.
class c2 implementation.
Polymorphism through inheritance can be
. . . . . . . achieved by playing with static and dynamic
endclass. type of a reference variable.
start-of-selection.
data : oref1 type ref to c1, Instances of a subclass may be used
oref11 type ref to c1, through the super class's interface. When
oref2 type ref to c2. this is done, a client can't access all
create object oref1 type c2 .
components defined in the subclass, only
create object oref2.
oref11 = oref2.
those inherited from the respective super
write:/5 oref1->num , class.
oref11->num .
94
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Inheritance
Inheritance Overview:
95
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Inheritance
Inheritance and Reference Variables
96
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Interfaces
• Interfaces are independent structures that you can implement in a
class to extend the scope of that class.
• a universal point of contact.
• They provide one of the pillars of polymorphism, since they allow a
single method within an interface to behave differently in different
classes.
• Global & Local Interfaces
The definition of a local interface <intf> is enclosed in the
statements:
INTERFACE <intf>.
...
ENDINTERFACE.
• The definition contains the declaration for all components
(attributes, methods, events) of the interface.
• They automatically belong to the public section of the class in which
the interface is implemented.
97
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Defining Interfaces
report ysubdel .
interface i1. Can be declared globally or locally within a
data : num type i . program.
methods : meth1.
endinterface. Locally declared in the global portion of a program
using:-
class c1 definition.
public section. INTERFACE <intf>.
methods : meth1.
interfaces : i1. ...
endclass.
ENDINTERFACE.
class c1 implementation.
method : meth1. The definition contains the declaration for all
write:/5 'I am meth1 in c1'.
endmethod. components (attributes, methods, events) of the
interface.
method i1~meth1.
write:/5 'I am meth1 from i1'. Interfaces are included in the public section of a
endmethod. class.
endclass.
Interfaces do not have an implementation part,
start-of-selection.
data : oref type ref to c1. create object oref. since their methods are implemented in the class that
write:/5 oref->i1~num. implements the interface.
call method oref->meth1.
call method oref->i1~meth1.
98
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Interfaces
• Interfaces do not have instances.
• To implement an interface in a class, use the statement
INTERFACES <intf>.
in the declaration part of the class.
• A component <icomp> of an interface <intf> can be
addressed as though it were a member of the class under the
name <intf~icomp>.
• Interface References
• Addressing Objects Using Interface References
Using the class reference variable <cref>:
• To access an attribute <attr>: <cref>-><intf~attr>
• To call a method <meth>: CALL METHOD <cref>-
><intf~meth>
99
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Interfaces
Using the interface reference variable <iref>:
• To access an attribute <attr>: < iref>-><attr>
• To call a method <meth>: CALL METHOD <iref>-><meth>
• Addressing a constant <const>: < intf>=><const> (Cannot use class
name).
• Addressing a static attribute
<attr>: < class>=><intf~attr>
• Calling a static method <meth>: CALL METHOD
<class>=><intf~meth>
(Cannot use Interface method ).
• casting operator (?= )
• <cref> ?= <iref>
For the casting to be successful, the object to which <iref> points
must be an object of the same class as the type of the class variable
<cref>.
100
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
DAY 4
102
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Triggering and Handling Events
• Triggering Events
• RAISE EVENT <evt> EXPORTING... <ei> = <fi>...
• The self-reference ME is automatically passed to the
implicit parameter SENDER.
• Handling Events
• Events are handled using special methods. To
handle an event, a method must
1. be defined as an event handler method for that
event
2. be registered at runtime for the event.
103
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Triggering and Handling Events
Declaring Event Handler Methods
• METHODS <meth> FOR EVENT <evt> OF <cif> IMPORTING..
<ei>..
• The event handler method does not have to use all of the
parameters passed in the RAISE EVENT statement.
• If you want the implicit parameter SENDER to be used as well,
you must list it in the interface.
Registering Event Handler Methods
• SET HANDLER... <hi>... [FOR]...
• Handler methods are executed in the order in which they were
registered.
104
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Triggering and Handling Events
Handler Table:
105
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
What is an Exception?
106
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Classification of Exceptions
107
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Traditional Ways of Catching Runtime
Exceptions
108
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
What is Class-based exception handling?
109
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
TRY…CATCH…ENDTRY
110
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Class-Based Exceptions – SAP
Exception Classes (2)
CX_STATIC_CHECK:
• For exceptions that have to be declared. This type should be chosen if you want to
make sure that this exception is always dealt with and if a local exception handler
has a chance to do something useful in an exception situation
• Corresponding exceptions must either be handled or forwarded explicitly with the
RAISING addition and this is checked at syntax check
CX_DYNAMIC_CHECK:
• For exceptions that do not have to be declared
• Exceptions must be handled or explicitly forwarded with the RAISING addition though
this is not checked at syntax check. Exceptions of this type are checked at runtime
only
• Useful for potential error situations that do not have to be handled, since the
program logic can more or less exclude them. Example: cx_sy_zerodivide
• Most of the CX_SY_ exceptions inherit from this class
CX_NO_CHECK:
• For exceptions that must not be declared (i.e. resource bottlenecks)
• Can be handled but not forwarded with RAISING. Otherwise will be propagated
through call chain automatically
• Not checked by syntax check or runtime processing
111
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
SAP Exception Classes
113
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Nested Try…Catch…Endtry Blocks
TRY.
TRY.
Try block
CATCH cx_class INTO oref
Catch block
CATCH cx_class INTO oref
Try block Catch block
…
….
CLEANUP.
Cleanup block
ENDTRY.
ENDTRY. 114
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
CLEANUP
Report ysubdel.
Used within a TRY…ENDTRY
data : w_num type i.
BLOCK , after all CATCH statements.
try.
try .
Each TRY block can contain
maximum of one CLEANUP area.
w_num = 5 / 0 .
cleanup. Used to release the external resources
write:/5 ‘In cleanup’.
when exception detected in a TRY
block is not handled within the block ,
endtry .
but is caught further up in the call
catch cx_sy_zerodivide. hierarchy.
write:/5 ‘Div. By zero!’.
Possible only in cases of nested TRY
endtry.
blocks.
In cleanup
To create a local exception class in a program and use it, follow the steps
outlined below.
REPORT YSUBCLASS_EXCEPTION_3.
CLASS CX_SOME_EXCEPTION DEFINITION INHERITING FROM
CX_STATIC_CHECK.
public section.
methods : meth1.
ENDCLASS.
116
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Creating Local Exception Class in a program
Step 3 :- Define another class which will call the exception class.
117
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Creating Local Exception Class in a program
Step 4 :- Implement the method of the other class which will raise
exception of the locally declared exception class.
118
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Creating Local Exception Class in a program
Step 5 :- Create an object of the other class and call its method which
will raise the exception
119
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Class-Based Exceptions – Debug Mode
Exception has
occurred and has
been handled
120
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Class-Based Exceptions – Debug Mode
Trigger point of
exception
Display Exception
Object
121
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Class-Based Exceptions – Debug Mode
122
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Class-Based Exceptions – Creating a Global
Exception Class (1)
Note Superclass
and class type
SE24
123
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Class-Based Exceptions – Creating a Global
Exception Class (2)
Go to
Methods
Tab
Double click on
the constructor
method to view
code
125
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Class-Based Exceptions – Creating a Global
Exception Class (4)
Click on
previous
object button
to return to
methods tab
126
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Class-Based Exceptions – Creating a Global
Exception Class (5)
Click on
previous
object
button to
return to
methods tab
A line has been added to the constructor to initialize the new attribute.
This attribute will be available in the error object at runtime and will contain
the value that is passed to the constructor when the exception is raised
128
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Class-Based Exceptions – Creating a Global
Exception Class (7)
129
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Class-Based Exceptions – Creating a Global Exception Class
(8)
The texts are stored in the Online Text Repository (OTR). The exception object contains
only a key that identifies the text (with system language)
The default text has the same name as the name of the exception class, in this case
ZCX_SOME_EXCEPTION.
You might wish to create an alternate text for the exception. That text can be entered
on this screen with a new exception ID and can be displayed by passing this value
to the parameter textid of the exception constructor.
130
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Class-Based Exceptions – Creating a Global
Exception Class (9)
133
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
5 Reasons – OO Programming is better than
Procedural Programming
Data Encapsulation
Instantiation
Code Reuse
Interfaces
Events
134
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
3 Reasons – ABAP Objects is Better
ABAP
135
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
ABAP Objects is more Explicit and
Simpler to Use
136
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Comparison between Procedural ABAP
and Object oriented ABAP
Procedural ABAP Object Oriented ABAP
137
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Improve your Procedural Programming
using ABAP Objects
138
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Stricter Syntax Check
139
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Stricter Syntax Check
140
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Internal Tables definition
141
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Database access
142
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Explicit Typing
143
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Data Handling
144
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Unicode Restrictions
145
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Unicode Restrictions
146
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
ABAP Objects Provides Access to
New ABAP Technology
Frameworks for user dialogs such as SAP Control
Framework (CFW), BSP , Desktop Office Integration (DOI)
etc.
Framework for persisting data in the database (Object
Services) and Shared Objects (area classes).
Service classes such as CL_GUI_FRONTEND_SERVICES
for working with data at the presentation server.
Language related classes such as Run Time Type
Services (RTTS), or CL_ABAP_EXPIMP subclasses for
extended IMPORT/EXPORT functionality.
147
© 2005 Intelligroup, Inc. Confidential and proprietary 2018/4/21
Thank You