Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

class methods

Former Member
0 Likes
510

I have created a local class method check_method,in one include.I am calling that method CALL METHOD main=>check_path in the main program.

when i click on check_path cursor is not going to method.when i click on main it going to definiton part,but whan i click on check_path it is not going to implementation.plz.solve my problem.

Regards,

Sai Prasad

3 REPLIES 3
Read only

ashok_kumar24
Contributor
0 Likes
440

Hai Sai,

Good ... Check out the following examples

<b>Define, implement and use simple class</b>

***INCLUDE ZBC404_HF_LCL_AIRPLANE .

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

  • Definition part

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

CLASS lcl_airplane DEFINITION.

*----


  • Public section

*----


PUBLIC SECTION.

TYPES: t_name(25) TYPE c.

METHODS:

constructor,

set_attributes IMPORTING p_name TYPE t_name

p_planetype TYPE saplane-planetype,

display_attributes,

display_n_o_airplanes.

*----


  • Private section

*----


PRIVATE SECTION.

  • Private attributes

DATA: name(25) TYPE c,

planetype TYPE saplane-planetype.

  • Private static attribute

CLASS-DATA n_o_airplanes TYPE i.

ENDCLASS.

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

  • Implementation part

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

CLASS lcl_airplane IMPLEMENTATION.

METHOD constructor.

  • Counts number of instances

n_o_airplanes = n_o_airplanes + 1.

ENDMETHOD.

METHOD set_attributes.

name = p_name.

planetype = p_planetype.

ENDMETHOD.

METHOD display_attributes.

WRITE:/ 'Name:', name, 'Planetype:', planetype.

ENDMETHOD.

METHOD display_n_o_airplanes.

WRITE: / 'No. planes:', n_o_airplanes.

ENDMETHOD.

ENDCLASS.

REPORT zbc404_hf_maintain_airplanes .

INCLUDE zbc404_hf_lcl_airplane.

  • Create reference to class lcl_airplane

DATA: airplane1 TYPE REF TO lcl_airplane,

airplane2 TYPE REF TO lcl_airplane.

START-OF-SELECTION.

  • Create instance

CREATE OBJECT airplane1.

CALL METHOD: airplane1->display_n_o_airplanes.

CREATE OBJECT airplane2.

  • Setting attributes using a method with parameters

CALL METHOD airplane1->set_attributes EXPORTING p_name = 'Kurt'

p_planetype = 'MD80'.

END-OF-SELECTION.

  • Using methods

CALL METHOD: airplane1->display_n_o_airplanes,

airplane1->display_attributes.

<b>The resulting report:</b>

Maintain airplanes

No. planes: 1

No. planes: 2

Name: Kurt Planetype: MD80

<b>Use constructor to create an object with parameters</b>

CLASS lcl_airplane DEFINITION.

PUBLIC SECTION.

TYPES: t_name(25) TYPE c.

METHODS:

constructor importing p2_name type t_name

p2_planetype TYPE saplane-planetype,

..... more code .......

CLASS lcl_airplane IMPLEMENTATION.

METHOD constructor.

name = p2_name.

planetype = p2_planetype.

..... more code .......

START-OF-SELECTION.

CREATE OBJECT airplane1 exporting p2_name = 'Hansemand'

p2_planetype = 'Boing 747'.

<b>Subclassing</b>

This example uses a superclass LCL_AIRPLANE and subclasses it into LCL_PASSENGER_AIRPLANE and LCL_CARGO_PLANE.

LCL_AIRPLANE has a method display_n_o_airplanes that displays the number of object instances.

LCL_PASSENGER_AIRPLANE has the private instance attribute n_o_seats, and redefines the superclass method display_attributes, so it also displays n_o_seats.

LCL_CARGO_PLANE has the private instance attribute cargomax, and redefines the superclass method display_attributes, so it also displays cargomax.

All instance attributes are provided by the cunstructor method.

Superclass LCL_AIRPLANE

***INCLUDE ZBC404_HF_LCL_AIRPLANE .

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

  • Definition part

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

CLASS lcl_airplane DEFINITION.

*----


  • Public section

*----


PUBLIC SECTION.

TYPES: t_name(25) TYPE c.

METHODS:

constructor IMPORTING im_name TYPE t_name

im_planetype TYPE saplane-planetype,

display_attributes.

  • Static methods

CLASS-METHODS:

display_n_o_airplanes.

*----


  • Protected section

*----


PROTECTED SECTION.

  • Private attributes

DATA: name(25) TYPE c,

planetype TYPE saplane-planetype.

  • Private static attribute

CLASS-DATA n_o_airplanes TYPE i.

ENDCLASS.

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

  • Implementation part

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

CLASS lcl_airplane IMPLEMENTATION.

METHOD constructor.

name = im_name.

planetype = im_planetype.

  • Counts number of instances

n_o_airplanes = n_o_airplanes + 1.

ENDMETHOD.

METHOD display_attributes.

WRITE:/ 'Name:', name, 'Planetype:', planetype.

ENDMETHOD.

METHOD display_n_o_airplanes.

WRITE: / 'No. planes:', n_o_airplanes.

ENDMETHOD.

ENDCLASS.

Sub class LCL_PASSENGER_AIRPLANE

***INCLUDE ZBC404_HF_LCL_PASSENGER_PLANE .

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

  • This is a subclass of class lcl_airplane

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

CLASS lcl_passenger_airplane DEFINITION INHERITING FROM lcl_airplane.

PUBLIC SECTION.

  • The constructor contains the parameters from the superclass

  • plus the parameters from the subclass

METHODS:

constructor IMPORTING im_name TYPE t_name

im_planetype TYPE saplane-planetype

im_n_o_seats TYPE sflight-seatsmax,

  • Redefinition of superclass method display_attributes

display_attributes REDEFINITION.

PRIVATE SECTION.

DATA: n_o_seats TYPE sflight-seatsmax.

ENDCLASS.

CLASS lcl_passenger_airplane IMPLEMENTATION.

METHOD constructor.

  • The constructor method of the superclass MUST be called withing the

  • construtor

CALL METHOD super->constructor

EXPORTING im_name = im_name

im_planetype = im_planetype.

n_o_seats = im_n_o_seats.

ENDMETHOD.

  • The redefined display_attributes method

METHOD display_attributes.

CALL METHOD super->display_attributes.

WRITE: / 'No. seats:', n_o_seats.

ENDMETHOD.

ENDCLASS.

Sub class LCL_CARGO_PLANE

***INCLUDE ZBC404_HF_LCL_CARGO_PLANE .

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

  • This is a subclass of class lcl_airplane

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

CLASS lcl_cargo_plane DEFINITION INHERITING FROM lcl_airplane.

PUBLIC SECTION.

METHODS:

  • The constructor contains the parameters from the superclass

  • plus the parameters from the subclass

constructor IMPORTING im_name TYPE t_name

im_planetype TYPE saplane-planetype

im_cargomax type scplane-cargomax,

  • Redefinition of superclass method display_attributes

display_attributes REDEFINITION.

PRIVATE SECTION.

DATA:cargomax TYPE scplane-cargomax.

ENDCLASS.

CLASS lcl_cargo_plane IMPLEMENTATION.

METHOD constructor.

  • The constructor method of the superclass MUST be called withing the

  • constructor

CALL METHOD super->constructor

EXPORTING im_name = im_name

im_planetype = im_planetype.

cargomax = im_cargomax.

ENDMETHOD.

METHOD display_attributes.

  • The redefined display_attributes method

CALL METHOD super->display_attributes.

WRITE: / 'Cargo max:', cargomax.

ENDMETHOD.

ENDCLASS.

<b>The Main program that uses the classes</b>

REPORT zbc404_hf_main .

  • Super class

INCLUDE zbc404_hf_lcl_airplane.

  • Sub classes

INCLUDE zbc404_hf_lcl_passenger_plane.

INCLUDE zbc404_hf_lcl_cargo_plane.

DATA:

  • Type ref to sub classes. Note: It is not necesssary to make typeref to the superclass

o_passenger_airplane TYPE REF TO lcl_passenger_airplane,

o_cargo_plane TYPE REF TO lcl_cargo_plane.

START-OF-SELECTION.

  • Display initial number of instances = 0

CALL METHOD lcl_airplane=>display_n_o_airplanes.

  • Create objects

CREATE OBJECT o_passenger_airplane

EXPORTING

im_name = 'LH505'

im_planetype = 'Boing 747'

im_n_o_seats = 350.

CREATE OBJECT o_cargo_plane

EXPORTING

im_name = 'AR13'

im_planetype = 'DC 3'

im_cargomax = 35.

  • Display attributes

CALL METHOD o_passenger_airplane->display_attributes.

CALL METHOD o_cargo_plane->display_attributes.

  • Call static method display_n_o_airplanes

  • Note: The syntax for calling a superclass method, differs from the syntax when calling a subclass method.

  • When calling a superclass => must be used instead of ->

CALL METHOD lcl_airplane=>display_n_o_airplanes.

Result:

No. planes: 0

Name: LH505 Planetype: Boing 747

No. seats: 350

Name: AR13 Planetype: DC 3

Cargo max: 35,0000

No. planes: 2

<b>

Polymorphism</b>

Polymorphism: When the same method is implemented differently in different classes. This can be done using enheritance, by redefining a method from the superclass in subclasses and implement it differently.

<b>

Classes:</b>

lcl_airplane Superclass

lcl_cargo_airplane Subclass

lcl_passenger_airplane Subclass

The method estimate_fuel_consumption is implemented differently in the 3 classes, as it depends on the airplane type.

Object from different classes are stored in an internal table (plane_list) consisting of references to the superclass, and the processed

identically for all the classes.

What coding for the estimate_fuel_consumption method taht is actually executed, depends on the dynamic type of the plane reference variable,

that is, depends on which object plane points to.

DATA: cargo_plane TYPE REF to lcl_cargo_airplane,

passenger_plane TYPE REF to lcl_passenger_airplane,

plane_list TYPE TABLE OF REF TO lcl_airplane.

  • Creating the list of references

CREATE OBJECT cargo_plane.

APPEND cargo_plane to plane_list.

CREATE OBJECT passenger_plane

APPEND passenger_plane to plane list.

  • Generic method for calucalting required fuel

METHOD calculate required_fuel.

DATA: plane TYPE REF TO lcl_airplane.

LOOP AT plane_list INTO plane.

re_fuel = re_fuel + plane->estimate_fuel_consumption( distance ).

ENDLOOP.

ENDMETHOD.

Working example:

This example assumes that the classes lcl_airplane, lcl_passnger_airplane and lcl_cargo plane (Se Subcallsing) exists.

Create objects of type lcl_cargo_plane and lcl_passenger_airplane, adds them to a list in lcl_carrier, and displays the list.

&----


*& Include ZBC404_HF_LCL_CARRIER *

*& *

&----


  • CLASS lcl_carrier DEFINITION *

----


CLASS lcl_carrier DEFINITION.

PUBLIC SECTION.

TYPES: BEGIN OF flight_list_type,

connid TYPE sflight-connid,

fldate TYPE sflight-fldate,

airplane TYPE REF TO lcl_airplane,

seatsocc TYPE sflight-seatsocc,

cargo(5) TYPE p DECIMALS 3,

END OF flight_list_type.

METHODS: constructor IMPORTING im_name TYPE string,

get_name RETURNING value(ex_name) TYPE string,

add_a_new_airplane IMPORTING

im_airplane TYPE REF TO lcl_airplane,

create_a_new_flight importing

im_connid type sflight-connid

im_fldate type sflight-fldate

im_airplane type ref to lcl_airplane

im_seatsocc type sflight-seatsocc

optional

im_cargo type p optional,

display_airplanes.

PRIVATE SECTION.

DATA: name TYPE string,

list_of_airplanes TYPE TABLE OF REF TO lcl_airplane,

list_of_flights TYPE TABLE OF flight_list_type.

ENDCLASS.

----


  • CLASS lcl_carrier IMPLEMENTATION

----


CLASS lcl_carrier IMPLEMENTATION.

METHOD constructor.

name = im_name.

ENDMETHOD.

METHOD get_name.

ex_name = name.

ENDMETHOD.

METHOD create_a_new_flight.

DATA: wa_list_of_flights TYPE flight_list_type.

wa_list_of_flights-connid = im_connid.

wa_list_of_flights-fldate = im_fldate.

wa_list_of_flights-airplane = im_airplane.

IF im_seatsocc IS INITIAL.

wa_list_of_flights-cargo = im_cargo.

ELSE.

wa_list_of_flights-seatsocc = im_seatsocc.

ENDIF.

APPEND wa_list_of_flights TO list_of_flights.

ENDMETHOD.

METHOD add_a_new_airplane.

APPEND im_airplane TO list_of_airplanes.

ENDMETHOD.

METHOD display_airplanes.

DATA: l_airplane TYPE REF TO lcl_airplane.

LOOP AT list_of_airplanes INTO l_airplane.

CALL METHOD l_airplane->display_attributes.

ENDLOOP.

ENDMETHOD.

ENDCLASS.

REPORT zbc404_hf_main .

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

  • This reprort uses class LCL_AIRPLNAE and subclasses

  • LCL_CARGO_PLANE and LCL_PASSENGER_AIRPLANE and class LCL_CARRIER

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

  • Super class for airplanes

INCLUDE zbc404_hf_lcl_airplane.

  • Sub classes for airplanes

INCLUDE zbc404_hf_lcl_passenger_plane.

INCLUDE zbc404_hf_lcl_cargo_plane.

  • Carrier class

INCLUDE zbc404_hf_lcl_carrier.

DATA:

  • Type ref to classes

o_passenger_airplane TYPE REF TO lcl_passenger_airplane,

o_passenger_airplane2 TYPE REF TO lcl_passenger_airplane,

o_cargo_plane TYPE REF TO lcl_cargo_plane,

o_cargo_plane2 TYPE REF TO lcl_cargo_plane,

o_carrier TYPE REF TO lcl_carrier.

START-OF-SELECTION.

  • Create objects

CREATE OBJECT o_passenger_airplane

EXPORTING

im_name = 'LH505'

im_planetype = 'Boing 747'

im_n_o_seats = 350.

CREATE OBJECT o_passenger_airplane2

EXPORTING

im_name = 'SK333'

im_planetype = 'MD80'

im_n_o_seats = 110.

CREATE OBJECT o_cargo_plane

EXPORTING

im_name = 'AR13'

im_planetype = 'DC 3'

im_cargomax = 35.

CREATE OBJECT o_cargo_plane2

EXPORTING

im_name = 'AFL124'

im_planetype = 'Iljutsin 2'

im_cargomax = 35000.

CREATE OBJECT o_carrier

EXPORTING im_name = 'Spritisch Airways'.

  • Add passenger and cargo planes to the list of airplanes

CALL METHOD o_carrier->add_a_new_airplane

EXPORTING im_airplane = o_passenger_airplane.

CALL METHOD o_carrier->add_a_new_airplane

EXPORTING im_airplane = o_passenger_airplane2.

CALL METHOD o_carrier->add_a_new_airplane

EXPORTING im_airplane = o_cargo_plane.

CALL METHOD o_carrier->add_a_new_airplane

EXPORTING im_airplane = o_cargo_plane2.

  • Display list of airplanes

call method o_carrier->display_airplanes.

Result:

Name: LH505 Planetype: Boing 747

No. seats: 350

Name: SK333 Planetype: MD80

No. seats: 110

Name: AR13 Planetype: DC 3

Cargo max: 35,0000

Name: AFL124 Planetype: Iljutsin 2

Cargo max: 35.000,0000

<b>Events

Below is a simple example of how to implement an event.</b>

REPORT zbc404_hf_events_5.

----


  • CLASS lcl_dog DEFINITION

----


CLASS lcl_dog DEFINITION.

PUBLIC SECTION.

  • Declare events

EVENTS:

dog_is_hungry

EXPORTING value(ex_time_since_last_meal) TYPE i.

METHODS:

constructor

IMPORTING im_name TYPE string,

set_time_since_last_meal

IMPORTING im_time TYPE i,

on_dog_is_hungry FOR EVENT dog_is_hungry OF lcl_dog

IMPORTING ex_time_since_last_meal.

ENDCLASS.

----


  • CLASS lcl_dog IMPLEMENTATION

----


CLASS lcl_dog IMPLEMENTATION.

METHOD constructor.

WRITE: / 'I am a dog and my name is', im_name.

ENDMETHOD.

METHOD set_time_since_last_meal.

IF im_time < 4.

SKIP 1.

WRITE: / 'You fool, I am not hungry yet'.

ELSE.

  • Subsrcribe for event:

  • set handler <Event handler method>

  • FOR <ref_sender>!FOR ALL INSTANCES [ACTIVATION <var>]

SET HANDLER on_dog_is_hungry FOR ALL INSTANCES ACTIVATION 'X'.

  • Raise event

RAISE EVENT dog_is_hungry

EXPORTING ex_time_since_last_meal = im_time.

ENDIF.

ENDMETHOD.

METHOD on_dog_is_hungry.

  • Event method, called when the event dog_is_hungry is raised

SKIP 1.

WRITE: / 'I have not eaten for more than',

ex_time_since_last_meal, ' hours'.

WRITE: / 'Give me something to eat NOW!'.

ENDMETHOD.

ENDCLASS.

----


  • R E P O R T

----


DATA: o_dog1 TYPE REF TO lcl_dog.

START-OF-SELECTION.

CREATE OBJECT o_dog1 EXPORTING im_name = 'Beefeater'.

CALL METHOD o_dog1->set_time_since_last_meal

EXPORTING im_time = 2.

  • This method call will raise the event dog_is_hungy

  • because time > 3

CALL METHOD o_dog1->set_time_since_last_meal

EXPORTING im_time = 5.

Good Luck and thanks

AK

Read only

Former Member
0 Likes
440

Hello Sai,

I tried in my system and could observe the following:

With local class, a double click on the method name jumps to the method definition.

It jumps to the method implementation only if the implementation and the call of this method are in the same include. As far as I know, there is no possibilty to change this behaviour.

Regards,

Walter

Read only

Former Member
0 Likes
440

Hello Sai,

are you talking about a global class with a local class inside? Then maybe somehow the includes are messed up. In SE24, there is somewhere a menu entry "Regenerate sections" which solves such problems.

Björn