study material for oop

48
Preface In the word of programming Object Oriented Programming is not a new thing, but as far as ABAP is concerned it’s somewhat new. Popular programming languages such as C++ and JAVA are all object oriented, then why not ABAP? The present material is an answer to the question. OOP is an advanced approach to programming and it has many key features, which makes program management as well as maintenance easier. It was felt that comprehensive study on OOP is required before one could jump into it. This material has been carefully prepared so that it covers all the aspect of object oriented features, the material has been divided into chapters so that its more or less like a book. Abap codes have been added, wherever it was felt necessary, examples have been provided to make better understanding of the su bject matter. Although the material has been revised several times, but still some mistakes might creep in. I would be very thankful if any one points out those. And last of all I would like to say that  your criticism and comments on the matter would provide me a valuable feed back for its further improvement. Sudip Das

Upload: naveen-kumar-chepuri

Post on 07-Apr-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 1/48

Preface

In the word of programming Object Oriented Programming is not a new thing, but as far as

ABAP is concerned it’s somewhat new. Popular programming languages such as C++ and JAVA

are all object oriented, then why not ABAP?

The present material is an answer to the question. OOP is an advanced approach to

programming and it has many key features, which makes program management as well as

maintenance easier. It was felt that comprehensive study on OOP is required before one

could jump into it. This material has been carefully prepared so that it covers all the aspectof object oriented features, the material has been divided into chapters so that its more or

less like a book. Abap codes have been added, wherever it was felt necessary, examples have

been provided to make better understanding of the subject matter.

Although the material has been revised several times, but still some mistakes might creep in.

I would be very thankful if any one points out those. And last of all I would like to say that

 your criticism and comments on the matter would provide me a valuable feed back for its

further improvement.

Sudip Das

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 2/48

Acknowledgment

I would like to thank all those who have provide the support to bring out this material. I

would like to thank my senior colleagues Mr Sauti Sen , Mr Sandip  Mondal for theirencouragement ,without which this would have not been possible . I would like to thank my

colleagues Mr Samagata Das ,Mr Ranodeep Bannerjee for their valuable suggestion on the

subject matter. And last but not the least I would like to thank my friends Mr Rajesh

Sarkar , Mr Amardip Ghosh whose continuos support have helped me to develop thismaterial.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 3/48

Contents

Chapter11.  Introduction to OOP

2.  Need for OOP

Chapter2 (Fundamentals of Class and Objects)1.  Introduction to classes

2.  Components of class3.  Component visibility

4.  Assigning object reference and creating objects

5.  Introduction to methods6.  Constructor methods7.  Parameterized constructor

Chapter3 (A closer look into class and method)1.  Method that import parameters

2.  Method that export parameter

3.  Passing internal table as method parameter

4.  Understanding the concept of static and instance

5.  How to declare static and instance components

6.  Static and instance constructor

7.  Overview of abstract and final class

Chapter4 (Events)1.  Fundamentals of events

2.  Creating an event3.  Event handler method

4.  Setting the handler for the event(registering the event)

5.  Dynamic registration and de-registration

6. 

Raising the event7.  Event parameters

8.  Event and error handling

9.  Object lifetime and event.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 4/48

Chapter5 (inheritance)

1.  Fundamentals of inheritance

2.  Creating multilevel inheritance

3.  Member access and inheritance

4.  Method redefinition

5.  Concept of super and final6.  Use of super for method call

7.  Constructor and inheritance

Chapter 6(Interface Polymorphism and inheritance)1.  Introduction to interface

2.  Class and interface

3.  Interface reference and component access.4.  Reference variable

5.  Concept of polymorphism

6.  Polymorphism via interface

7.  Polymorphism via inheritance

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 5/48

Chapter1 (Introduction to object oriented programming in

ABAP. )

Introduction.In the world of programming languages, there has been a lot of development, as far as theprogramming concept is concerned. And object oriented programming approach is one of

them. The programming approach that is usually followed is procedure oriented approach,

which stress more on doing things i.e. executing the instruction set. This approach is ok, if

the program is simple, but if program size increases and the program complexity is high, thenwe need to find some better alternative, and the result of the search is OOP. OOP is one of

the most advanced programming approaches. The programming approach ensures better

program management, reusability data encapsulation and abstraction and extensibility. That

we cannot have in procedure oriented programming.

Procedural languages (drawback) 1.  Program maintenance as well as management becomes difficult as program size increases.

2.  Data is undervalued

3.  Very difficult to model real word entity.

4.  Lack of extensibility.

Object oriented approach (key features) 1.  “Object-oriented programming is an approach that provides a way of modularizing

programs by creating patron memory area for both data and function that can be used as

templates for creating copies of such modules on demand”2.  Model real world entity very well (class and objects).

3.  Stress on data as well as functionality

4.  Data encapsulation and abstraction

5.  Inheritance6.  Polymorphism

7.  Dynamic binding

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 6/48

Comparison between OOP and procedure 

Procedure (Comparison)

Emphasis on doing things

Large programs are divided into smaller programs known as functions

Most of the functions share global data

Data move openly around the system from function to function

Top-down approach

OOP (comparison)

Emphasis on data rather than procedurePrograms are divided into objects

Data structures are designed such that they characterized the objects

Functions that operate on the data of an object are tied together in the data structureData is hidden and cannot be accessed by external functionsNew data and functions can be easily added whenever necessary

Bottom-up approach

Lets be more specific -> OOP and abap1.  to be at par with the others

2.  To understand the recent concepts of abap ex bapi, badi workflow.

3.  For interfacing abap with Microsoft technologies ,Java as all these are

Build on the concept of OOP

4. To exploit the object resource that has been provided by SAP.

Benefits of oop (summary)1.  Through inheritance inheritance we can eliminate redundant code and extend the use of

existing class2.  We can develop programs form the existing classes in given by SAP(further details)

3.  The concept of data hiding helps the programmer to build secure programs that cannot

be invaded by code in other parts of programs

4.  OOP system can be easily upgraded from smaller system to larger system5.  Software complexity can be easily managed.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 7/48

Chapter 2(Fundamentals of class and objects)

1.  Introduction to classes

2.  Components of class

3.  Component visibility4.  Assigning object reference and creating objects

5.  Introduction to methods

6.  Constructor methods

7.  Parameterized constructor

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 8/48

Introduction to classThe main objective of OOP is to model real world entity, each real world entity can be

modeled by its characteristics and functionality .The real world entity when modeled into

OOP world is known as Class, characteristics as attributes and functionality as methods.

A class has two parts definition part and implementation part. In the definition part the

definition of the class components as well as visibility of components is done. And in the

implementation usually the method implementation is done.

Now the question comes what is an Object then? Well the answer to this is, Objects are

instance of a Class or in other words they are run time entities, in an object-orientedsystem.

Components of classAs we know Class is a modeled real world entity it must have some characteristics as well as

functionality .The characteristics are known as attributes in OOP terminology, they are

basically different data types.

The functionality is known as methods and events, methods and events reflect the

capabilities of a class. Methods are functions which can be called by the instance of a class

(i.e. objects) where as events are called automatically when certain sets of conditions (forthat particular event are fulfilled).

. Other possible components can be interface, structure internal table etc.

Component visibilityThis is one of the most important concepts of OOP, here we provided with the flexibility to

assign visibility of the class components. But before we proceed any further lets clear the

fact what do we mean by visibility of class components?

The components of a class can only be accessed through the objects but declaring the class

components in different domains, which are defined as Public Private and Protected, these

domains control the accessibility.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 9/48

Public components of a class can be accessed by the objects of a class components in thepublic domain are totally visible outside the class other components within the class can also

access them.

Private components cannot be accessed by the objects of the class they can only be accessed

by the members within the class i.e. any member function within the class can access the

private members thus from the point of visibility no private components are visible outsideclass. The sequence of declaring the components are public protected and private.

Example CLASS my_class DEFINITION.

PUBLIC SECTION.METHODS: test_method.

PROTECTED SECTION.

PRIVATE SECTION.DATA: name TYPE C.

ENDCLASS.

CLASS my_class IMPLEMENTATION.METHOD test_method.

Write:/ ‘ this is my test method’.

ENDMETHOD.

ENDCLASS.

Assigning object reference and creating objects.As we know objects are runtime replica of classes ,they are real runtime entities of the

class, and come into picture during program execution. Objects occupy memory space .

An object cannot exist by itself it must have a class reference ,every object has the classreference stored in a variable ,and we call it object name ,with the help of this reference we

can access the class components . Lets see how we can do it .

DATA: my_obj_ref TYPE REF TO ref_class_name.

The TYPE REF TO statement helps us to assign the object reference .

Objects can be created using CREATE OBJECT statement.

 CREATE OBJECT : my_obj_ref.

Example.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 10/48

CLASS test DEFINITION.

PUBLIC SECTION.

METHODS test_method.

ENDCLASS.

CLASS test IMPLEMENTATION.

METHOD test_method.

WRITE:/ ‘this is my method’.

ENDMETHOD.

ENDCLASS.

*************** main program **************

START-OF-SELECTION.

DATA: obj_ref TYPE REF TO test. “ object reference is assignedCREATE OBJECT: obj_ref. “ object is created

CALL METHOD Obj_ref->test_method. “object method is called using the reference.

END-OF-SELECTION.

Introduction to methodsMethods are the functionality of a class , ABAP codes are written within a method to

incorporate the functionality. Methods can be both public as well as private .Public methodscan be accessed by the objects of the class to which the method belongs to. Private methodscan only be accessed by methods that are within the class. Methods can import as well as

export parameters. As said earlier there can be instance method and static method

Other kind of methods are constructor method and event handler methods which will be

covered later.

Constructor methodsConstructor methods are special method that are implicitly associated with every instance

of a class .They are implicitly defined by the system .Constructor methods are calledautomatically whenever an object is created .However the constructor methods can be

explicitly defined by the programmer .We can define the number of input parameters for

the constructor .A point to note a constructor method cannot return any value. The name ofthe constructor method is implicitly defined by the system as “CONSTRUCTOR” and it

cannot be changed . To use a constructor method i.e to incorporate some features , we need

to explicitly define it in class definition part .There are two types of constructor method

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 11/48

Static and instance constructor , which will be covered later.

Example.

CLASS my_class DEFINITION.

PUBLIC SECTION.METHODS CONSTRUCTOR. “ note constructor should be always declared in public.

ENDCLASS.

CLASS my_class IMPLEMENTATION.

METHODS CONSTRUCTOR.

write :/ ‘this is constructor method’.

ENDMETHOD.

ENDCLASS.

Parameterized constructorLike normal methods constructor methods can import parameters ,but since the constructor

methods cannot be called like normal methods ,so how do we pass the parameters to

constructor methods??

We can pass the parameters to a constructor methods during the object creation i.e while

using “create object” statement. A point to note a constructor cannot export any parameter.

Example

CLASS test DEFINITION.

PUBLIC SECTION.

METHODS: print_private_data,

CONSTRUCTOR IMPORTING num TYPE I. “constructor importing parameter

PRIVATE SECTION.DATA: private_num TYPE I.

ENDCLASS.

CLASS test IMPLEMENTATION.METHOD print_private_data.

WRITE:/ private_num.

ENDMETHOD.

METHOD CONSTRUCTOR. “this constructor initializes the private member with the

private_num = num. “ constructor parameter

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 12/48

ENDMETHOD.ENDCLASS.

************* main program ******************************START-OF-SELECTION.

DATA: my_obj_ref TYPE REF TO test.CREATE OBJECT : my_obj_ref EXPORTING num = 2.

CALL METHOD my_obj_ref->print_private_data.

END-OF-SELECTION.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 13/48

Chapter 3(A closer look into class and methods.)

1.  Methods that import parameters

2.  Method that export parameter

3. Passing internal table as method parameter4.  Understanding the concept of static and instance

5.  How to declare static and instance components

6.  Static and instance constructor

7.  Overview of abstract and final class

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 14/48

Methods that import parametersMethods like functions or forms can import parameter as well as export parameter. In this

section we will show an example that import three parameters.

CLASS test DEFINITION.

PUBLIC SECTION.

 METHODS: test_method IMPORTING number1 TYPE I

Character1 TYPE CVariable TYPE I.

 ENDCLASS.

CLASS test IMPLEMENTATION.

METHOD test_method.

Write:/ number1,20 character1,30 variable1.ENDMETHOD.

ENDCLASS.

Method that export parameterIn this section we will show how a method can export parameter.

CLASS test DEFINITION.

PUBLIC SECTION.

METHODS: test_method IMPORTING number TYPE I.

ENDCLASS.

CLASS test IMPLEMENTATION.

METHOD test_method.

Write:/ number.ENDMETHOD.

ENDCLASS.

Passing internal table as method parameter.As we have seen in the earlier section that a method can import as well as export

parameters, but this is not all it can import as well as export structures internal table etc

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 15/48

like forms .In this section we will show how to pass an internal table as parameter to amethod. A point to note the internal table that is to be passed to the method should not

have header line as this is against the concept of OOP. While defining the method it is

necessary to give the type of the internal table to be passed; we can give the type as any

predefined structure of the database dictionary. But it is convenient to keep the type

declaration more generic, because when we pass the actual internal table the whole internaltable is passed into the method, and the method takes the structure of the internal table

that has been actually passed .To keep the type declaration generic, we declare the type as

any.

CLASS test DEFINITION.

PUBLIC SECTION.

METHODS: test_method_itab EXPORTING itab TYPE ANY TABLE.

ENDCLASS.

CLASS test IMPLEMENTATION.METHOD test_method_itab.**** wa is a work area it must be declared in the main program or it should be any

****dictionary structure.

Loop at itab into wa.

Write:/ wa-field_1,20 wa-field_2.Endloop.

ENDMETHOD.

ENDCLASS.

Example

In this example the things that were covered in the earlier sections have been summarized.This is a full working program which , shows how a method can import as well as export

parameters, it has been also show how internal table can be passed into a methods and how

to process the internal table in the method .

CLASS test DEFINITION.

PUBLIC SECTION.

METHODS: read_data IMPORTING num1 TYPE I num2 TYPE I RETURNINGvalue(result1) TYPE I ,

print_itab exporting itab1 type any table.

PRIVATE SECTION.

DATA:NUMP1 TYPE I,

NUMP2 LIKE NUMP1,

RESULT LIKE NUMP1.

ENDCLASS.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 16/48

CLASS test IMPLEMENTATION.

METHOD read_data.

nump1 = num1.

nump2 = num2.

result1 = nump1 + nump2.ENDMETHOD.

METHOD print_itab.

LOOP AT ITAB1 into Wa

WRITE:/5 wa-NAME,20 wa-ROLL,30 wa-HALL.

ENDLOOP.

Clear wa.

ENDMETHOD.

ENDCLASS.

**************************MAIN PROGRAM*****************************

TABLES:ystudent.

TYPES:BEGIN OF STRUCT,

NAME LIKE YSTUDENT-NAME,

ROLL LIKE YSTUDENT-ROLLNO,

HALL LIKE YSTUDENT-HALL,END OF STRUCT.

DATA:ITAB1 TYPE STANDARD TABLE OF STRUCT INITIAL SIZE 0,worka LIKE LINE OF ITAB1.

PARAMETERS:num1 TYPE I,

num2 TYPE I,result TYPE I.

DATA:test TYPE REF TO test.

CREATE OBJECT test TYPE test.

START-OF-SELECTION.

WRITE:/5 num1,

/5 num2.

SELECT: NAME ROLLNO HALL FROM YSTUDENT INTO TABLE ITAB1 WHERE HALL =

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 17/48

'RP'

result = test->read_data( num1 = num1 num2 = num2 ).

CALL METHOD test->print_itab importing itab1 = itab1.

ULINE.WRITE:/5 result.

END-OF-SELECTION.

*************************MAIN PROGRAM ENDS*******************

Understanding the concept of static and instanceThe class components that have been declared fall under two category static and instance.

Now what do we mean by this actually? As we know class is only a logical modelling of an

object .It does not occupies any memory space during program execution only the instance of

an class (objects) occupies memory space. We know a class can have multiple instance i.emultiple object can refer to same class. And in oop separate memory are allocated for all

different objects and these memory area are not shareable by other objects . But it is

possible to have only one common memeory area for all instance of a class.

The class components that share a common memory area for all the class instance are

static components. The class components that have separate memory area for separateinstance are instance components.

Schematic diagram to show the concept of static and instance.

Object1

Of class

Object2

Of class

Object2

Of class

Object1

Of class

Memory for

ob ect1Memory for

Ob ect2

Memory for object1 and

object2

Instance Static

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 18/48

A point of note that a class can have static as well as instance components. Only staticmethods can access static attribute and static event can be raised by static methods and

the same is true for instance methods attributes and events

How to declare static and instance components

To declare instance components we declare them as follows:

CLASS test DEFINITION.

PUBLIC SECTION.

METHODS:……………………. “***/instance method……………………….

DATA : ……………………….. “***/instance attribute

……………………………EVENTS:……………………….. “***/instance events…………………………..

ENDCLASS.

To declare static components we declare them as follows:

CLASS test DEFINITION.

PUBLIC SECTION.

CLASS-METHODS:………………………….. “****/static method

…………………………….CLASS-DATA:……………………………………. “***/static attribute

…………………………………….

CLASS-EVENTS:………………………………….”***/static events.

ENDCLASS.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 19/48

Static and instance constructor.

As we know c onstructors are special methods that cannot be called using CALL METHOD.Instead, they are called automatically by the system to set the starting state of a newobject or class. There are two types of constructors - instance constructors and static

constructors. Constructors are methods with a predefined name. To use them, you mustdeclare them explicitly in the class.

The instance constructor of a class is the predefined instance method CONSTRUCTOR. You

declare it in the public section as follows:

METHODS CONSTRUCTORIMPORTING.. [VALUE(]<ii>[)] TYPE type [OPTIONAL]..

EXCEPTIONS.. <ei>.

and implement it in the implementation section like any other method. The system calls the

instance constructor once for each instance of the class, directly after the object has beencreated in the CREATE OBJECT statement. You can pass the input parameters of the

instance constructor and handle its exceptions using the EXPORTING and EXCEPTIONS

additions in the CREATE OBJECT statement.

The static constructor of a class is the predefined static method CLASS_CONSTRUCTOR.

You declare it in the public section as follows:

CLASS-METHODS CLASS_CONSTRUCTOR.

and implement it in the implementation section like any other method. The static constructor

has no parameters. The system calls the static constructor once for each class, before theclass is accessed for the first time. The static constructor cannot therefore access the

components of its own class.

Overview of abstract and final class

In class definition we have some more variation. The two variations are abstract and final, if

we add ABSTRACT and FINAL to the METHODS and CLASS statements then it allows us uto define abstract and final methods or classes.

Lets discuss what are all these , if we declare a class as abstract then that class is not

implementable as well as it cannot be instantiated, but the what is the use of such class ??

Well this type of class are used in the concept of inheritance, the abstract class is onlyimplementable in its sub class.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 20/48

Lets come to final, what is final?? These is also used with inheritance if we want to prevent aclass from being inherited then we do it by adding the word final to class definition final

class cannot be inherited and its methods cannot be redefined in the subclass.

Chapter 4 (Events)

1.  Fundamentals of events2.  Creating an event

3.  Event handler method

4.  Setting the handler for the event (registering the event)

5.  Dynamic event registration and de-registration of handler method

6.  Raising the event7.  Event parameters

8.  Event and error handling

9.  Object lifetime and event.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 21/48

Fundamentals of eventsEvents are like one of the class components, events are triggered when certain set of

conditions is met, and unlike normal method they cannot be called using the call method

statement. Events denote the state of an object, that is what is the current status of an

object, in layman’s word events adds the dimension of time to the modeled entity. Events

enable objects or classes to trigger event handler methods in other objects or classes.Whereas a method can have any number of callers in regular method calls, any number of

event handler methods can be called by triggering an event

The life of an event consists of four stages.Creating an eventCreating an event handler method for the event

Registering the handler method to the event

Raising the event

Few points to note:

Events have a parameter interface similar to methods; however, they have only output

parameters, no input parameters. These parameters can be passed to the event handler

methods by the triggering object/class (statement RAISE EVENT ). The event handler

methods use them as input parameters.

Creating an eventEvents can be created like normal class component

CLASS test DEFINITION.

PUBLIC SECTION.

EVENTS: test_event.

ENDCLASS.

Event handler method.These are like normal methods, the functionality of these methods are more specific i.e.

these methods are only executed when the event associated with these methods are

triggered. Basically these methods carry out the functionality of the events. Note an event

can have multiple event handler method associate with it, and it may be such that the handler

method may be in some other class, but irrespective of that all the handler methods are

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 22/48

executed when that particular event is raised. The link between the triggering event and theassociated method is established at run time.

Now how do we write event handler method?

CLASS event_handler DEFINITION.PUBLIC SECTION.

METHODS: event_method FOR EVENT test_event OF CLASS test.

ENDCLASS.

Setting the handler for the event (registering the event)To execute the event handler method, automatically when the event is raised the handler

method has to be registered, the registration process is dynamic i.e the link is established at

runtime. The key statement “set handler” can register the handler method. The followingpiece of code will show how the handler method can be registered.

********** Main program*********************

Start-of-selection.

Data: my_object type ref to test.

Create object: my_object .

SET HANDLER my_object->event_method FOR test. “ setting the handler

Dynamic registration and de- registration of handler methods.Handler methods can be registered or deregistered dynamically by the optional key word“ACTIVATION”. Activation can register new method or deregister existing method using a

variable .The variable must be character type of length 1. Note if the variable contains the

Value as ‘x’ then the method is registered and if it contains the value as space then the

method is deregistered. Let’s take an exampleStart-of-selection.

Data: my_object type ref to test.

Create object: my_object.

SET HANDLER my_object->event_method FOR test. “ registering the handler

SET HANDLER my_object->event_method FOR test ACTIVATION ‘x’. “deregistering thehandler

SET HANDLER my_object->event_method FOR test ACTIVATION SPACE. “registering the

handler.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 23/48

Raising the event .An event can be raised in by using the ABAP statement “raise event”. Events can be raised

anywhere It may be raised in any method of a class or may be raised anywhere in the main

program. Let’s take an example

CLASS testing_event DEFINITION.

PUBLIC SECTION.

  EVENTS my_event.

METHODS event_raising_method.

 

ENDCLASS.

CLASS testing_event IMPLEMENTATION.

  METHOD event_raising_method.

RAISE EVENT my_event.  ENDMETHOD.ENDCLASS.

Event parameters.Like methods parameters can be passed to events, events can only have input parameters;

any no of parameters can be passed to an event. As we know an event does not have any

functionality, (the functionality associated with an event is carried out by the event handler

method that has been assigned to it) then the question is what does the event do with the

input parameters?

The parameters that are passed to the events is actually utilized by the handler methodsthat are registered to the events, the handler methods have the liberty to decide on the

number of input parameters passed by the events .The number of input parameters for the

handler methods has to be defined explicitly. However, an event handler method is not

obliged to handle all of the actual parameters that are passed to it.

As well as the explicitly defined parameters, each instance event also contains the implicit

EXPORTING parameter SENDER. This has the type of a reference variable referring to theclass or interface in which the event is declared. If you include the SENDER parameter in

the IMPORTING parameter list of the handler method, the method receives a reference to

the triggering object. Remember, however, that teh type of the reference variable is not

necessarily the class of the sending object. If the event is declared in a superclass of theclass of the sender, or in an interface implemented by it, the type of the reference variable

will refer to the superclass or interface instead. Static events do not have a SENDER

parameter.Few points to note

Event parameters

are always passed by VALUE

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 24/48

Must always have a type specification (TYPE, LIKE)Can be optional (OPTIONAL, DEFAULT )

Let’s take an example

CLASS evt_container DEFINITION.

  PUBLIC SECTION.  METHODS event_trigger.

EVENTS my_event EXPORTING VALUE(PAR1) TYPE I

VALUE(PAR2) TYPE I OPTIONAL

VALUE(PAR3) TYPE I DEFAULT 3.

ENDCLASS.

CLASS class_evt_handler_method DEFINITION.

PUBLIC SECTION.

METHODS handler_for_event FOR EVENT my_event OF evt_container IMPORTING

SENDER PAR3.ENDCLASS.

CLASS evt_container IMPLEMENTATION.

  METHOD evt_trigger.RAISE EVENT my_event EXPORTING PAR1 = 1.

  ENDMETHOD.

ENDCLASS.

CLASS class_event_handler_method IMPLEMENTATION.METHOD handler_my_event.

Write :/ ‘ this is event handler method’.

  ENDMETHOD.ENDCLASS.

*************** main program *******************************

DATA:ref_obj1 TYPE REF TO evt_container,Ref_obj2 TYPE REF TO class_evt_handler_method.

Create object : ref_obj1,

Ref_obj2.

SET HANDLER ref_obj2->handler_for_event FOR evt_container.

Call method ref_obj1->evt_trigger. “ this will raise the event.

“event handler method will be called automatically

*************** out put ***********************************

this is event handler method

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 25/48

Few important point regarding event registration.

If an instance triggers an event, the registration is implicitly deleted if the triggering

instance is deleted by the automatic memory management (garbage collection).

When you register instance methods as event handlers, note that the registration refers tothe current instance and not to the reference variable that is used for registration. Even

when the reference variable takes another value after SET HANDLER, the registration of

the object remains unchanged. This also affects to the lifetime of objects - an object exists

for as long as it is registered as an event handler, even if no more reference variables point

to it. The object is either explicitly deregistered using the ACTIVATION addition, or

implicitly when the triggering instance no longer exists.

Events and error handling.System variable check(sy_subrc) for event handling.

If sy- subrc = 0 then all event handler methods have been properly registered

SY-SUBRC = 4: then you tried to register the same combination of triggering event, event

handling method, and handler more than once.

If sy- subrc = 8: then you tried to deregister an event handler that was not registered.

Non- cacheable runtime error during event handling.

SET_HANDLER_DISP_OVERFLOW: Unable to register any more handlers.

SET_HANDLER_E_NO_FOR: Handlers of instance methods need the FOR addition.

SET_HANDLER_FOR_CE: Event handler registered for a static event.SET_HANDLER_FOR_NULL: An event may not be triggered using NULL.

Note

If an instance triggers an event, the registration is implicitly deleted if the automaticmemory management (garbage collection) deletes the triggering instance.

When you register instance methods as event handlers, note that the registration refers to

the current instance and not to the reference variable that is used for registration. Even

when the reference variable takes another value after SET HANDLER, the registration ofthe object remains unchanged. This also affects to the lifetime of objects - an object exists

for as long as it is registered as an event handler, even if no more reference variables point

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 26/48

to it. The object is either explicitly deregistered using the ACTIVATION addition, orimplicitly when the triggering instance no longer exists.

Object Lifetime and event.An object exists for as long as it is being used in the program. 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 theobject is registered as an event handler.

As soon as there are no more references to an object, and so long as none of its methods are

registered as event handlers, it is deleted by the automatic memory management (garbage

collection). The ID of the object then becomes free, and can be used by a new object.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 27/48

 

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 28/48

Chapter 5(Inheritance)

1.  Fundamentals of inheritance

2.  Creating multilevel inheritance3.  Member access and inheritance

4.  Method redefinition

5.  Concept of super and final6.  Constructor and inheritance

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 29/48

Fundamentals of inheritance

The concept of inheritance is used to incorporate the properties of an existing class into a

new class .The beauty of this feature is that the methods and the attribute of the existing

class need not to be coded into the new class ,as well as new features can be added into the

the new class .In OOP inheritance can be multiple as well as multi-level ,but in ABAP only multi-level

inheritance is possible .In Multiple Inheritance a new class can inherite properties of

several class .Where as multi-level inheritance is an inheritance of hiercial fashion . In OOP

terminology the parent class is called the super class and the derieved class is called the

subclass.

Multiple Inheritance Multi- level Inheritance

“If you do not add any new declarations to the subclass, it contains the same components asthe superclass. However, only the public and protected components of the superclass arevisible in the subclass. Although the private components of the superclass exist in the

subclass, they are not visible. “

“You can declare private components in a subclass that have the same names as private

components of the superclass. Each class works with its own private components. Methods

that a subclass inherits from a superclass use the private attributes of the superclass, and

not any private components of the subclass with the same names. “

Su er Class

Sub Class

Public Section: Super Class

Private Section: Super

Public Section: Super Class

:

Note the private Section is not

visible in the sub class

Father

Child

Mothergrandfather

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 30/48

If the superclass does not have a private visibility section, the subclass is an exact replica ofthe superclass. However, you can add new components to the subclass. This allows you to turn

the subclass into a specialized version of the superclass.

Creating multilevel inheritance

Multilevel inheritance can be better explained as grandfather-> father->child type of

inheritance ,where the sub class inherits the property of the superclass ,as well as it hassome property of its own . Multilevel inheritance can be created like normal inheritance .for

example father inheriting from grandfather and further the child from father. Lets take an

example.

CLASS grand_father DEFINITION.

******/ write the code*****

ENDCLASS.

CLASS father DEFINITION INHERITING FROM grand_father.

*******/write the code*********

ENDCLASS.

CLASS son DEFINITION INHERITING FROM father.

*******/write the code ********

ENDCLASS.

The class implementation part of sub class remains the same , as that of normal classes .

Member access and inheritance .

As we know that in inheritance the subclass inherits the property of the super class ,now

the question comes can the subclass inherit all the property of the super class ?? the answer

is no ,only the public and the protected members are inheritable by the sub class.

Now what happens if any component of the superclass has the same name that of the sub

class ?? This is only possible in case of private components ,the private components of asuper class or subclass does not interfere or interact they are sole property of the class in

which they are declared .

Where as public or protected components must be unique i. e they must not have same

name .

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 31/48

Another question might come up , suppose a super class method is called by the subclass ,andsuppose it takes some input parameters that are private , and the input parameters are

explicity defined both in sub class as well as in super class ,then during the function call

which components does it uses ,is it of super class or that of subclass.??

Well it uses the components of the super class.

Method Redefinition.

The method that has already been defined in the superclass can be redefined within thesubclass .When a super class method is redefined within the sub –class then the method

name export import parameters remain the same but the method implemetation changes

.And whenever the redefined method is called from any instance of the sub class then the

new implementation comes into picture .The earlier implementation that already existed in

the super class is shadowed by the new implementation.

a

Schematic diagram to represent the concept of method redefinition and

-

METHOD1

METHOD2 callsMETHDO1

METHOD1 Redefined

METHOD2 callsMETHDO1

Call Method

Method2Call Method

Method2

Call MethodSuper->method2

Instance of sub

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 32/48

Accessibility of components by use of super.

From the above diagram it can be seen that if a method is redefined then ,the uniqueness of

the method is implicitly defined by the system ,this prevents the confusion during the

method call. When a redefined method is called by the super class then the method

implementation in the super class is called and when the redefined method is called from thesub class then the newly defined version is called

Example of method redefinition.

CLASS super_class DEFINITION.PUBLIC SECTION.

METHODS super_class_method.

ENDCLASS.

CLASS sub_class DEFINITION INHERITING FROM super_class

PUBLIC SECTION.METHODS super_class_method REDIFINITION.

ENDCLASS.

CLASS super_class IMPLEMENTATION.

METHOD super_class_method.

Write:/ ‘this is super class method’.ENDMETHOD.

ENDCLASS.

CLASS sub_class IMPLEMENTATION.

METHOD super_class_method.

Write:/ ‘super class method is redefined in sub class’.

ENDMETHOD.

ENDCLASS.

*************** MAIN PROGRAM ****************************START-OF-SELECTION.

Data: sub_ref type ref to sub_class, “reference for sub_class

Sup_ref type ref to super_class. “reference for super_class.

Create object: sub_ref ,

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 33/48

Sup_ref.Call method sub_ref->super_class_method.

Call method sup_ref->super_class_method.

******************out put *************************this is super class method’

super class method is redefined in sub class

Concept of super and final.

Super

As we have seen in method redefinition how the system manages the uniqueness of the

method name ,it has been also shown which method definition is called when the method iscalled from subclass or superclass. But what if we want to call the method implementation of

the superclass from the subclass.

We can do this by using the ABAP key word super, super is a reference to the super class

and with this reference we can call the method implementation in the super class

Example .

CLASS father DEFINITION.

PUBLIC SECTION.METHODS: my_method.

ENDCLASS.

CLASS father IMPLEMENTATION.METHOD my_method.Write:/ ‘ this is father method’.

ENDMETHOD.

ENDCLASS.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 34/48

CLASS son DEFINITION INHERITING FROM father.PUBLIC SECTION.

METHODS:my_method REDEFINITION,

Call_my_method.

ENDCLASS.

CLASS son IMPLEMENTATION.

METHOD my_method.

Write:/ ‘father method redefined in son’.

ENDMETHOD.

METHOD call_my_method.

Call super->my_method. “ the method definition of father will be called

ENDMETHOD.ENDCLASS.

Final

We have seen that any class can be inherited by any other class ,but suppose we want to prevent a

class from being inherited then what do we do??

We can do this by adding the key word final with class. Any class that is declared bas finalcannot be inheritated ,or in other words final puts an end to the inheritance tree.

Similarly if we want to put a stop to any particular method ,from being inherited we can do itby declaring as final. A point to note a final method cannot be redefined in the subclass.

Example.

CLASS test DEFINITION FINAL. “ this class cannot be inherited

ENDCLASS.

CLASS test IMPLEMENTATION.

ENDCLASS.

Constructor and inheritance.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 35/48

In the earlier section we have seen the concept of inheritance ,how can we access themethods of the super class etc. From our earlier exposure to constructor we know that

every class has a static as well as instance constructor ,and they are implicitly defined by

the system . Therefore in an inheritance tree the super class as well as the subclass has an

unique constructor . In this section we plan to look into some of the issues which might come

up, lets take them point wise.

suppose we instantiate a sub class , what happens to the superclass whose constructor

has not been defined explicitly?

When ever we instantiate a sub class ,whose super class constructor is not explicitlydefined ,then the constructor of the super class is called automatically by the

system ,we need not take any extra care during subclass instantiation .

suppose we instantiate a sub class which has an explicitly defined constructor , and the

super class constructor is not defined explicitly then what happens?

In cases where the super class constructor is not defined explicitly ,the systemautomatically calls the the super class constructor during instantiation of

subclass.The sequence in which the constructor are called is same as that of the

inheritance hierarchy i.e grandfather-> father-> child

suppose we instantiate a sub class which has an explicitly defined constructor and the

super class constructor is also explicitly defined then what happens during the

instantiation of sub class?

In cases where the super class constructor is explicitly defined ,the system cannotcall the constructor of the super class during subclass instantiation ,the super class

constructor has to be explicitly coded in the sub class constructor I,e we should

write the code as

Call method super- > constructor importing < parameters>

if suppose the super constructor is explicitly defined and has some input parameters

then how do we pass the parameters to the superclass constructor from the sub

class?

To pass parameters to the super constructor we must do it at the time of instantiation of the sub

class ,constructor of the subclass has to be defined explicitly and parameters has to be passed to

it ,in the definition part of the subclass constructor the super class constructor has to be called

and then parameters has to be passed to it .

example

********************************************************************

* gf_num importing parameter for grandfather constructor

* f_num importing parameter for father constructor

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 36/48

* c_num importing parameter for child constructor.* this example shows how parameters can be passed to super constructor from

*subclass constructor other methods may also exist.

*

*

*this is a full working program showing constructor and inheritance*******************************************************************

CLASS grand_father DEFINITION.

PUBLIC SECTION .

METHODS : gf_property,constructor importing gf_num type i.

ENDCLASS.

CLASS grand_father IMPLEMENTATION.

METHOD gf_property.

write:/ 'i am grand father'.endmethod.

method constructor .

write:/ 'grand father constructor'.write:/ gf_num.

endmethod.

ENDCLASS.

CLASS father DEFINITION INHERITING FROM grand_father.PUBLIC SECTION.

METHODS:f_property,constructor importing f_num type i gf_num type i.

ENDCLASS.

CLASS father IMPLEMENTATION.

METHOD f_property.

write:/ 'i am father'.

ENDMETHOD.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 37/48

METHOD constructor.call method super->constructor exporting gf_num = gf_num.

******/constructor of grandfather is called from father constructorwrite:/ 'father constructor'.

write:/ f_num.

ENDMETHOD.

ENDCLASS.

CLASS child DEFINITION INHERITING FROM father.PUBLIC SECTION.

METHODS:c_property,

constructor importing c_num type i

f_num type igf_num type i.

ENDCLASS.

CLASS child IMPLEMENTATION.

METHOD c_property.

write:/'i am child'.

ENDMETHOD.

METHOD constructor.call method super->constructor exporting f_num = f_num gf_num = gf_num

*******/constructor of father is called from the child constructorwrite:/ 'child constructor'.

write:c_num.

ENDMETHOD.

ENDCLASS.

******************* main program*****************8

start-of-selection.

data: my_obj TYPE REF TO CHILD.

CREATE OBJECT: my_obj exporting c_num = 3 f_num = 2 gf_num = 3.

call method my_obj->gf_property. “ calling the method of class grandfathercall method my_obj->f_property. “calling the method of class father

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 38/48

end-of-selection.

Chapter 6 (Interface polymorphism inheritance. )

Introduction to interfaceClass and interface

Interface reference and component access.

Concept of polymorphismReference variable

Polymorphism via interfacePolymorphism via inheritance.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 39/48

Introduction to interface

Interface is one of the strong features of OOP; interface coupled with inheritance is used

to feature one of the most powerful features of OOP called polymorphism, which will bediscussed later.

Interface is similar to abstract class but it has many strong features. Interface like class

has both definitions as well as the implementation part. The interface can be implemented

only in the class that uses it. Interface, which is an independent structure, is used toimplement in a class to extend the scope of a class. Interfaces extend the scope of a class

by adding their own components to its public section. This allows users to address different

classes via a universal point of contact.

How to write simple interface

INTERFACE my_interface.

Data : name(20).

METHODS: I_method1,I_method2.

ENDINTERFACE.

Class and interface

Class and interface are interrelated, an interface cannot be implemented without a class

.interface do not have instances. Interface can be implemented in a class using the

statement INTERFACES <interface_name> in the public section of a class. The componentof the interface are added automatically in the public section of the class. Now the question

comes how do we access the components of the interface ?? Well the components of an

interface can be identified as if they are components of the class, through the identifier

<interface_name~interface _component >

Lets take an example.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 40/48

INTERFACE my_interface .METHODS my_interface_method exporting num type i.

ENDINTERFACE.

CLASS interface_class DEFINITION.

INTERFACES my_interface.ENDCLASS.

CLASS interface_class IMPLEMENTATION.

METHOD my_interface~my_interface_method.

Write:/ num.

ENDMETHOD.

ENDCLASS.

The class must implement the methods of all interfaces implemented in it. Theimplementation part of the class must contain a method implementation for each interfacemethod <imeth>:

METHOD <intf~imeth>.

...

ENDMETHOD.

NOTE

Interfaces can be implemented by different classes. Each of these classes is extended by

the same set of components. However, the methods of the interface can be implemented

differently in each class.

Lets take an example

INTERFACE common_interface.

METHODS: interface_method.

ENDINTERFACE.

CLASS interface_class1 DEFINITION.

PUBLIC SECTION.

INTERFACES common_interface.

ENDCLASS.

CLASS interface_class1 IMPLEMENTATION.

METHOD common_interface~interface_method. “interface method is implemented as type1

WRITE:/ ‘ METHODS IMPLEMENTATION TYPE 1

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 41/48

ENDMETHOD.ENDCLASS.

CLASS interface_class2 DEFINITION.

PUBLIC SECTION.

INTERFACES common_interface.ENDCLASS.

CLASS interface_class2 IMPLEMENTATION.

METHOD common_interface~interface_method. “Interface method is implemented astype2

WRITE:/ ‘ METHODS IMPLEMENTATION TYPE 2

ENDMETHOD.

ENDCLASS

Interface reference and component access

As we know that before creation of any object it must have a reference to a class, similarly

an interface can also have a reference. But we know interface cannot be instantiated so whydo we need a reference for it?? The interface reference is used from a totally different

point of view, an interface reference is used to access the interface components that has

been implemented differently in different class. We will elaborate this in the next

article. An interface reference can be created similar to object reference. For example

DATA: interface_ref TYPE REF TO my_interface.

To create an object of the class <class>, you must first have declared a reference variable<cref> with reference to the class. If the class <class> implements an interface <intf>, you

can use the following assignment between the class reference variable <cref> and an

interface reference <iref> to make the interface reference in <iref> point to the same object

as the class reference in <cref>:<iref> = <cref>

If the interface <intf> contains an instance attribute <attr> and an instance method <meth>,

 you can address the interface components as follows:

Using the class reference variable <cref>:

•  To access an attribute <attr>: <cref>-><intf~attr>

•  To call a method <meth>: CALL METHOD <cref>-><intf~meth>Using the interface reference variable <iref>:

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 42/48

•  To access an attribute <attr>: < iref>-><attr>•  To call a method <meth>: CALL METHOD <iref>-><meth>

Reference variable.As we know that a reference variable contains an object reference, a reference variable has

two characteristics, static as well as dynamic characteristic. The static characteristic is the

class or interface used in reference variable definition. The dynamic type is the object to

which the reference variable is currently pointing.

Reference variable assigning rule.

When the static and the dynamic type of a reference variable are different, the principal

rule is that the static type is always more general than the dynamic type. For example if thestatic type is an interface the dynamic type can be a class implementing the interface.

Concept of Polymorphism

Polymorphism refers to the property by which objects belonging to different classes are

able to respond to the same message, but in different forms, an essential requirement ofpolymorphism is the ability to refer to objects without any regard to their class . This

necessitates the use of a single reference variable to refer to the object of different

class. For example consider two classes, say scooter and bike, both the scooter and bike

have a method called engine_power, and the method is implemented differently in different

class. The concept of polymorphism says that we should have a common point of access to the

method engine _power implemented differently. Now the question comes how do we achieve

polymorphism. The concept of polymorphism can be shown through inheritance as well as

interface.

Polymorphism via interface

Interfaces allow you to use different classes in a uniform way using interface references

.For example, interfaces that are implemented in different classes extend the public scope

of each class by the same set of components. If a class does not have any class-specificpublic components, the interfaces define the entire public face of the class. As we know that

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 43/48

any no of class can implement the interface differently ,and we have seen that how we canaccess the components of the interface through the class objects. But we want to have a

common point of access for the different implementation of the interface methods. So how

do we do that?

Well we can do that by using an interface reference; we can access the different class

objects by pointing the interface reference to that class.

Let’s take an example:

INTERFACE my_infc.

METHODS: I_method.

ENDINTERFACE.

CLASS c1 DEFINITION.

PUBLIC SECTION.INTERFACES: my_infc.ENDCLASS.

CLASS c1 IMPLEMENTATION.

METHOD my_infc~I_method.Write:/ ‘method for c1’.

ENDMETHOD.

ENDCLASS.

CLASS c2 DEFINITION.

PUBLIC SECTION.

INTERFACES: my_infc.ENDCLASS.

CLASS c2 IMPLEMENTATION.

METHOD my_infc~I_method.Write:/ ‘method for c2’.

ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

DATA: iref type ref to my_infc,

C1ref type ref to c1.

C2ref type ref to c2.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 44/48

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 45/48

METHODS: f_meth.ENDCLASS.

CLASS father IMPLEMENTATION.

METHOD f_meth.

Write: / ‘father method’.ENDMETHOD.

ENDCLASS.

CLASS child DEFINITION INHERITING FROM FATHER.

PUBLIC SECTION.

METHODS : f_meth REDEFINITION,

C_meth.

ENDCLASS.

CLASS child IMPLEMENTATION.METHOD f_meth.Write: ‘father method redefined’.

ENDMETHOD.

METHOD c_meth.Write: ‘child method’.

ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

DATA: f_ref TYPE REF TO father,Ref TYPE REF TO father,

C_ref TYPE REF TO child.

CREATE OBJECT: C_ref,f_ref.

Ref = f_ref.

Call method ref->f_meth.

Ref = C_ref.

Call method ref->f_meth.

** call method ref->c_meth . “this assignment is not possible.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 46/48

*************** out put ***********************

father method

father method redefined.

EXAMPLE 2.

In this example the previous example has been shown with interface.

interface my_ic.

methods:add_value.

endinterface.

class father definition.

public section.interfaces my_ic.endclass.

class father implementation.

method my_ic~add_value .write:/ 'result father' .

endmethod.

endclass.

class child definition inheriting from father.

public section.

methods:my_ic~add_value redefinition,child_meth.

endclass.

class child implementation.

method my_ic~add_value.

write:/ 'child'.

endmethod.

method child_meth.write:/ 'child own method'.

endmethod.

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 47/48

endclass.

start-of-selection.

data:c_ref type ref to child,f_ref type ref to father,

i_ref type ref to my_ic.

create object: f_ref type child.

call method f_ref->my_ic~add_value.

*call method f_ref->child_meth. " this is not possible as this was not  

"inherited

8/4/2019 Study Material for Oop

http://slidepdf.com/reader/full/study-material-for-oop 48/48