분류 전체보기 (122)
공지사항 (3)
주저리 주저리 (26)
Ubuntu (3)
개발관련 (37)
개발이야기 (6)
Language (20)
Framework (5)
Pattern (2)
DataBase (4)
Server (4)
Book (9)
스터디 (0)
mylyn  ubuntu netbook remix  oracle  다짐  자바  Head First Software Development  STRUTS2  Eclipse  db connection  HFSD 
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
+ dazzi님 블로그
+ 온 오프 믹스! (모임,세미…
+ kenu blog
+ OKJSP: 사는 얘기
+ 정호님 블로그
+ 존경하는회수형님
+ 자바지기님 블로그
+ 루비나라 출입구
+ 은정이누나 블롯
+ Total :
+ Today :
+ Yesterday :
  

 

 

 

10월12일
+   [Language/ABAP]   |  2009. 10. 12. 16:41  
20091012 - 짠

        VEHICLE
            △
  ┌-----┼-----┐
   |         |         |
car      bus     truck


저번주에 상속을 배웠으니...

예제 car를 가지고 설명중...

* redefinition   = JAVA : Override ( polymophim)

* 상속받은 부모의 method를 가공할 수 있다.
  인자들을 못 바꾸고.  Logic만 수정하는 개념.

* Supper Class의 Method를 꼭 호출하지 않아도 됨.

METHOD get_average_fuel.
  re_fuel     = super->get_average_fuel( im_distance = im_distance
                                         im_fuel     = im_fuel )  + 2.

*CALL METHOD SUPER->GET_AVERAGE_FUEL
*  EXPORTING
*    IM_DISTANCE = IM_distance
*    IM_FUEL     = im_fuel
*  RECEIVING
*    RE_FUEL     = re_fuel
*    .
ENDMETHOD.


Overloading.
 - 인자수를 변경할 수 있다.
 - logic을 수정할 수 있다.
 - SuperClass Construct를 꼭 호출 해야 한다.
 
 constructor 버튼을 눌러서 창이 나오면
 
 parameter를 누른다음 im_color 을 정의한다.
 
 그 후 color = im_color 로 만든다.
 
 METHOD constructor.
  CALL METHOD super->constructor
    EXPORTING
      im_make = im_make.
  color = im_color.
ENDMETHOD.


 
 
 Static Components and Inheritance
 
 1. A class that defines a public or protected static attribute shares this attribute with all its subclasses
 
 2. Static method cannot be redefined

 
 106page  
 
 Up-Cast = Narrowing Casting...
 
 부모 클래스에 자식 클래스의 주소를 넘기면...
 
 부모는 상속 해준 Attribute 와 method 에 대해서만
 
 Pointing 하게 된다.
 
 redefinition 한 method 에 대해서는... 자식의 로직을
 
 실행하게 된다.
 
 
 예제
 
 DATA: r_veh   TYPE REF TO zcl08_kdn_vehicle,
      r_car   TYPE REF TO zcl08_kdn_car,
      r_bus   TYPE REF TO zcl08_kdn_bus,
      r_truck TYPE REF TO zcl08_kdn_truck,
      r_tab   TYPE TABLE OF REF TO zcl08_kdn_vehicle.

DATA: car_avg_fuel   TYPE i,
      bus_avg_fuel   TYPE i,
      truck_avg_fuel TYPE i,
      veh_avg_fuel   TYPE i."s_consum.

CREATE OBJECT: r_car , r_bus , r_truck.


r_veh = r_car.
veh_avg_fuel = r_veh->get_average_fuel( im_distance = 500 im_fuel = 50 ).
WRITE : 'car:',veh_avg_fuel.

r_veh = r_bus.
veh_avg_fuel = r_veh->get_average_fuel( im_distance = 500 im_fuel = 50 ).
WRITE : 'bus:',veh_avg_fuel.

r_veh = r_truck.
veh_avg_fuel = r_veh->get_average_fuel( im_distance = 500 im_fuel = 50 ).
WRITE : 'truck:',veh_avg_fuel.


r_veh = r_car.
APPEND r_veh TO r_tab.
r_veh = r_bus.
APPEND r_veh TO r_tab.
r_veh = r_truck.
APPEND r_veh TO r_tab.

LOOP AT r_tab INTO r_veh.
  veh_avg_fuel = r_veh->get_average_fuel( im_distance = 500 im_fuel = 50 ).
  WRITE : /  veh_avg_fuel.
ENDLOOP.


사용은 같은 internal Table 은 배열 같아서 같은 형식의 여러개의 데이터가 입력 되는 형식이다.

ㅋㅋㅋ 조금뒤에 더...

Polymorphism 의 조건. (method기준)
1.  Inheritance

2. Redefinition.

3. Up-Cast(Narrowing Cast).



LOOP AT r_tab INTO r_veh.
  IF sy-tabix = 1.
    r_car ?= r_veh.
    r_car->get_color( ).
  ENDIF.
  veh_avg_fuel = r_veh->get_average_fuel( im_distance = 500 im_fuel = 50 ).
  WRITE : /  veh_avg_fuel.
ENDLOOP.

down Cast (widening Cast)

A ?= B. 라는 형식으로 ...


 LOOP AT r_tab INTO r_veh.
  TRY .
      CASE sy-tabix.
        WHEN 1.
          r_car ?= r_veh.
          r_car->get_color( ).
        WHEN 3.
          r_truck ?= r_veh.
          r_truck->get_cargo( ).
        WHEN 4.
          r_truck ?= r_veh.
          r_truck->get_cargo( ).
        WHEN OTHERS.
      ENDCASE.
    CATCH cx_sy_move_cast_error.
      MESSAGE i004(z08_kdn) WITH 'itab' sy-tabix.

  ENDTRY.

  veh_avg_fuel = r_veh->get_average_fuel( im_distance = 500 im_fuel = 50 ).
  WRITE : /  veh_avg_fuel.
ENDLOOP.


interface 시작..

Interface 안에는 .. Implementation 을 할 수 없다.

상속 (uses) class 안에서 해당 I/F 의 mothod를 implemention 한다.


compound Interface.~

interface 에서 interface 를 부르는 것을 두고 하는 말....

Z08_KDN_TT 이녀석을 이용해서 테스트 함 해보자.



DATA: r_car    TYPE REF TO zcl08_kdn_car.
DATA: r_bus   TYPE REF TO zcl08_kdn_bus.
DATA: r_truck  TYPE REF TO zcl08_kdn_truck.
DATA: r_rental TYPE REF TO zcl08_kdn_rental.


START-OF-SELECTION.

  CREATE OBJECT : r_car , r_bus, r_truck.

  CREATE OBJECT : r_rental.

  r_rental->add_vehicle( r_car ).
  r_rental->add_vehicle( r_truck ).
  r_rental->add_vehicle( r_bus ).

  r_rental->get_vehicle( ).


METHOD add_vehicle.
  APPEND im_vehicle TO vehicle_list.
ENDMETHOD.


짜잔...

zcl_vehicle - trigger

1. EVENT : VEHICLE_CREATED 라는 이벤트를 생성할 것이다.

2. Rase - Constructor(car/bus/truck 영향)

3. add_vehicle 이 실행..됨


constructor 에

 setHandler add_vehicle for acc Instances





 
 
 
 
 

 
 
        

별책부록's Blog is powered by Daum