Sunteți pe pagina 1din 7

ABAP Objects Beispielprogramm (Example)

*&---------------------------------------------------------------------* *& Report OOINTRO_SOLUTION_6A * *&---------------------------------------------------------------------* *& Solution to exercise 6a * *& of course ZSO065 "Introduction to object orientation" * *&---------------------------------------------------------------------* REPORT oointro_solution_6 . * String TYPES: ty_string(1024) TYPE c. * Orientation of wings TYPES: ty_orientation(5) TYPE c. CONSTANTS: co_left_orientation TYPE ty_orientation VALUE 'left', co_right_orientation TYPE ty_orientation VALUE 'right'. * Types for exercise 5 TYPES: ty_name(20) TYPE c, ty_department(40) TYPE c, ty_misc(30) TYPE c. CLASS lcl_airplane DEFINITION DEFERRED. CLASS lcl_passenger_airplane DEFINITION DEFERRED. CLASS lcl_cargo_airplane DEFINITION DEFERRED. CLASS lcl_wing DEFINITION DEFERRED. CLASS lcl_airport DEFINITION DEFERRED. CLASS lcl_air_traffic_controller DEFINITION DEFERRED. *---------------------------------------------------------------------* Definition sections *---------------------------------------------------------------------* Definition of class lcl_airport CLASS lcl_airport DEFINITION. PUBLIC SECTION. METHODS: constructor IMPORTING im_name TYPE ty_string, close IMPORTING im_airport TYPE REF TO lcl_airport, sign_on_airplane IMPORTING im_airplane TYPE REF TO lcl_airplane. EVENTS: closed EXPORTING value(ex_airport) TYPE REF TO lcl_airport. PRIVATE SECTION. DATA: name TYPE ty_string, count_total_airplanes TYPE i, controllers TYPE REF TO lcl_air_traffic_controller OCCURS 0. ENDCLASS. * Definition of class lcl_airplane CLASS lcl_airplane DEFINITION ABSTRACT. PUBLIC SECTION. METHODS: constructor IMPORTING im_name TYPE ty_string im_seats TYPE i im_weight TYPE i im_length TYPE i im_left_wing TYPE REF TO lcl_wing im_right_wing TYPE REF TO lcl_wing, display, take_off IMPORTING im_arrival_airport TYPE REF TO lcl_airport, touch_down.

EVENTS: touched_down. PRIVATE SECTION. DATA: name TYPE ty_string, seats TYPE i, weight TYPE i, length TYPE i, left_wing TYPE REF TO lcl_wing, right_wing TYPE REF TO lcl_wing, arrival_airport TYPE REF TO lcl_airport. METHODS: on_closed FOR EVENT closed OF lcl_airport IMPORTING ex_airport, sign_on_airport IMPORTING im_airport TYPE REF TO lcl_airport. ENDCLASS. * Definition of subclasses of lcl_airplane * Definition of lcl_passenger_airplane CLASS lcl_passenger_airplane DEFINITION INHERITING FROM lcl_airplane. PUBLIC SECTION. METHODS: constructor IMPORTING im_name TYPE ty_string im_seats TYPE i im_weight TYPE i im_length TYPE i im_left_wing TYPE REF TO lcl_wing im_right_wing TYPE REF TO lcl_wing im_count_personal TYPE i im_count_emergency_exits TYPE i, display REDEFINITION. PRIVATE SECTION. DATA: count_personal TYPE i, count_emergency_exits TYPE i. ENDCLASS. * Definition of lcl_cargo_airplane CLASS lcl_cargo_airplane DEFINITION INHERITING FROM lcl_airplane. PUBLIC SECTION. METHODS: constructor IMPORTING im_name TYPE ty_string im_seats TYPE i im_weight TYPE i im_length TYPE i im_left_wing TYPE REF TO lcl_wing im_right_wing TYPE REF TO lcl_wing im_cargo TYPE i, display REDEFINITION. PRIVATE SECTION. DATA: cargo TYPE i. ENDCLASS.

* Definition of class lcl_air_traffic_controller CLASS lcl_air_traffic_controller DEFINITION. PUBLIC SECTION. METHODS: constructor IMPORTING im_name TYPE ty_string im_airport TYPE REF TO lcl_airport, add_airplane IMPORTING im_airplane TYPE REF TO lcl_airplane. PRIVATE SECTION. DATA: name TYPE ty_string, current_airplanes TYPE REF TO lcl_airplane OCCURS 0. METHODS: on_closed FOR EVENT closed OF lcl_airport IMPORTING sender, on_touched_down FOR EVENT touched_down OF lcl_airplane IMPORTING sender. ENDCLASS. * Definition of class lcl_wing CLASS lcl_wing DEFINITION. PUBLIC SECTION. METHODS: constructor IMPORTING im_orientation TYPE ty_orientation im_length TYPE i, display. PRIVATE SECTION. DATA: orientation TYPE ty_orientation, length TYPE i. ENDCLASS. *---------------------------------------------------------------------* Implementation sections *---------------------------------------------------------------------* Implementation of class lcl_airplane CLASS lcl_airplane IMPLEMENTATION. METHOD constructor. name = im_name. seats = im_seats. weight = im_weight. length = im_length. left_wing = im_left_wing. right_wing = im_right_wing. ENDMETHOD. METHOD display. WRITE: / 'Data of airplane' INTENSIFIED ON COLOR COL_NORMAL, name(20) COLOR COL_KEY. WRITE: / 'Seats:', seats, 'Weight:', weight, 'Length:', length. WRITE: / ' ', 'Data of wings' INTENSIFIED ON COLOR COL_NORMAL. CALL METHOD left_wing->display. CALL METHOD right_wing->display. WRITE: / ' ', 'End of data of wings' INTENSIFIED OFF COLOR COL_NORMAL. WRITE: / 'End of data of airplane' INTENSIFIED OFF COLOR COL_NORMAL, name(20) INTENSIFIED OFF COLOR COL_KEY. ENDMETHOD. METHOD on_closed. SET HANDLER on_closed FOR arrival_airport ACTIVATION space. arrival_airport = ex_airport.

CALL METHOD sign_on_airport EXPORTING im_airport = arrival_airport. ENDMETHOD. METHOD sign_on_airport. CALL METHOD im_airport->sign_on_airplane EXPORTING im_airplane = me. SET HANDLER on_closed FOR im_airport. ENDMETHOD. METHOD take_off. arrival_airport = im_arrival_airport. CALL METHOD sign_on_airport EXPORTING im_airport = arrival_airport. ENDMETHOD. METHOD touch_down. RAISE EVENT touched_down. SET HANDLER on_closed FOR arrival_airport ACTIVATION space. ENDMETHOD. ENDCLASS. * Implementation of lcl_passenger_airplane CLASS lcl_passenger_airplane IMPLEMENTATION. METHOD constructor. CALL METHOD super->constructor EXPORTING im_name = im_name im_seats = im_seats im_weight = im_weight im_length = im_length im_left_wing = im_left_wing im_right_wing = im_right_wing. count_personal = im_count_personal. count_emergency_exits = im_count_emergency_exits. ENDMETHOD. METHOD display. ULINE /. CALL METHOD super->display. WRITE: / ' ', 'Additional data for passenger airplane' INTENSIFIED ON COLOR COL_GROUP. WRITE: / ' Personal:', count_personal, 'Exits:', count_emergency_exits. WRITE: / ' ', 'End of additional data for passenger airplane' INTENSIFIED OFF COLOR COL_GROUP. ULINE /. ENDMETHOD. ENDCLASS. * Implementation of lcl_cargo_airplane CLASS lcl_cargo_airplane IMPLEMENTATION. METHOD constructor. CALL METHOD super->constructor EXPORTING im_name = im_name im_seats = im_seats im_weight = im_weight im_length = im_length im_left_wing = im_left_wing im_right_wing = im_right_wing. cargo = im_cargo. ENDMETHOD. METHOD display. ULINE /. CALL METHOD super->display. WRITE: / ' ', 'Additional data for cargo airplane' INTENSIFIED ON COLOR COL_GROUP. WRITE: / ' Maximum cargo:', cargo. WRITE: / ' ', 'End of additional data for cargo airplane' INTENSIFIED OFF COLOR COL_GROUP.

ULINE /. ENDMETHOD. ENDCLASS. * Implementation of class lcl_airport CLASS lcl_airport IMPLEMENTATION. METHOD constructor. name = im_name. * Create air traffic controllers DATA: controller TYPE REF TO lcl_air_traffic_controller. DATA: controller_name TYPE ty_string. CONCATENATE 'Mayer in' name INTO controller_name SEPARATED BY space. CREATE OBJECT controller EXPORTING im_name = controller_name im_airport = me. APPEND controller TO controllers. CONCATENATE 'Heinz in' name INTO controller_name SEPARATED BY space. CREATE OBJECT controller EXPORTING im_name = controller_name im_airport = me. APPEND controller TO controllers. ENDMETHOD. METHOD close. RAISE EVENT closed EXPORTING ex_airport = im_airport. ENDMETHOD. METHOD sign_on_airplane. DATA: controller TYPE REF TO lcl_air_traffic_controller. count_total_airplanes = count_total_airplanes + 1. READ TABLE controllers INDEX 1 INTO controller. CALL METHOD controller->add_airplane EXPORTING im_airplane = im_airplane. ENDMETHOD. ENDCLASS. * Implementation of class lcl_air_traffic_controller CLASS lcl_air_traffic_controller IMPLEMENTATION. METHOD add_airplane. SET HANDLER on_touched_down FOR im_airplane. APPEND im_airplane TO current_airplanes. ENDMETHOD. METHOD constructor. name = im_name. SET HANDLER on_closed FOR im_airport. ENDMETHOD. METHOD on_closed. DATA: airplane TYPE REF TO lcl_airplane. LOOP AT current_airplanes INTO airplane. SET HANDLER on_touched_down FOR airplane ACTIVATION space. ENDLOOP. REFRESH current_airplanes. ENDMETHOD. METHOD on_touched_down. DATA: airplane TYPE REF TO lcl_airplane. LOOP AT current_airplanes INTO airplane. IF airplane = sender. DELETE current_airplanes. EXIT. * <--ENDIF. ENDLOOP. ENDMETHOD. ENDCLASS.

* Implementation of class lcl_wing CLASS lcl_wing IMPLEMENTATION. METHOD constructor. orientation = im_orientation. length = im_length. ENDMETHOD. METHOD display. WRITE: / ' Orientation:', orientation, 'Length:', length. ENDMETHOD. ENDCLASS. START-OF-SELECTION. DATA: a_left_wing TYPE REF TO lcl_wing. DATA: a_right_wing TYPE REF TO lcl_wing. DATA: a_passenger_airplane TYPE REF TO lcl_passenger_airplane. DATA: a_cargo_airplane TYPE REF TO lcl_cargo_airplane. DATA: ffm TYPE REF TO lcl_airport. DATA: jfk TYPE REF TO lcl_airport. DATA: an_airplane TYPE REF TO lcl_airplane. DATA: table_of_airplanes TYPE REF TO lcl_airplane OCCURS 0. CREATE OBJECT a_left_wing EXPORTING im_orientation = co_left_orientation im_length = 30. CREATE OBJECT a_right_wing EXPORTING im_orientation = co_right_orientation im_length = 30. CREATE OBJECT a_passenger_airplane EXPORTING im_name = 'LH New York' im_seats = 250 im_weight = 30000 im_length = 45 im_left_wing = a_left_wing im_right_wing = a_right_wing im_count_personal = 10 im_count_emergency_exits = 7. CREATE OBJECT a_left_wing EXPORTING im_orientation = co_left_orientation im_length = 45. CREATE OBJECT a_right_wing EXPORTING im_orientation = co_right_orientation im_length = 45. CREATE OBJECT a_cargo_airplane EXPORTING im_name = 'LH Cargo' im_seats = 15 im_weight = 45000 im_length = 55

im_left_wing = a_left_wing im_right_wing = a_right_wing im_cargo = 10000. CREATE OBJECT ffm EXPORTING im_name = 'Frankfurt am Main'. CREATE OBJECT jfk EXPORTING im_name = 'John F. Kennedy'. an_airplane = a_passenger_airplane. APPEND an_airplane TO table_of_airplanes. an_airplane = a_cargo_airplane. APPEND an_airplane TO table_of_airplanes. * Take off LOOP AT table_of_airplanes INTO an_airplane. CALL METHOD an_airplane->take_off EXPORTING im_arrival_airport = ffm. ENDLOOP. * Airport closed CALL METHOD ffm->close EXPORTING im_airport = jfk. * Touch down LOOP AT table_of_airplanes INTO an_airplane. CALL METHOD an_airplane->touch_down. ENDLOOP.

S-ar putea să vă placă și