분류 전체보기 (122)
공지사항 (3)
주저리 주저리 (26)
Ubuntu (3)
개발관련 (37)
개발이야기 (6)
Language (20)
Framework (5)
Pattern (2)
DataBase (4)
Server (4)
Book (9)
스터디 (0)
db connection  Eclipse  STRUTS2  다짐  자바  Head First Software Development  ubuntu netbook remix  HFSD  oracle  mylyn 
«   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





 
 
 
 
 

 
 
        

 

10월9일
+   [Language/ABAP]   |  2009. 10. 12. 16:41  
20091009

SE24 로 이동.

Class 를 만드는 방법 소개.

SE38 program을 이용하여

Class 가져다 쓰기.(저번시간에 한 내용은 Local Class 였지만... 이번에는 공용 Class이다.)

Method 를 부르는 방법에는 2 종류가 있다.

CALL METHOD r_veh 방식과... r_veh->method() . 방식이다.

SE24 접속 이름 주고.~

Attribute Tab에서 이름 적어주고

벌써 오후( 졸려요...)


Functional Method 에 대해서...
importing 과 returning 만으로 이루어져 있다.

exporting은 할 수 없음.


예제 z08_kdn_oop8

constructor (생성자의 이해)

Static Constructor .

클래스를 건들기만 하면...

Class Constructor 작동되는데 only once 딱 한번만 발생.

Class Constructor 는 언제 실행되나요? 라는 질문이 나올수 있겠습니다.
1. Create object

2. 클래스명 =>static Attribute 사용할때 .

3. 클래스명=>Static Method( ) . 호출할 때.


inherit(상속)









 
 
        

 

10월8일
+   [Language/ABAP]   |  2009. 10. 12. 16:40  
10월8일 - 4주차 -1번

function 도 Encapsulation 이 된다.

Program 1개가  1의 Internal Table 을 사용한다.

Function Group 영역의

Global Data 는

Function Group 안의 Function Module이 호출되었을때 공유하게 된다.

~ 호출이 되는 순간에 Function Group 의 Data가 메모리에 올라오게 된다.


function 은 안되는데 .. Class 는 되더라..



바로 메모리에 올라가게 된다.



Example of a Function Group

FG

G : Speed.
FM1 : Inc-Speed.
FM2 : Des-Speed.
FM3 : get-Speed.

Instantiate.

The Object-Oriented Programming Model of ABAP Object.

작명 규칙

Super Class (부모)/              A: Class          zcl*(se24) 나중에
                                                   |             lcl* (se38) 현재
                                     ┌-------┼ -------┐
Sub Class (자식) / A'Class      A"Class     A^Class  '



polymorphism:

상속을 받은 Class들에 똑같은 행위를 요청하여도 그들이 하는 행위의 형태는 다르다.


OOP의 SPEC 에 관하여... 그리고 설계 하는 방법.!

UML 사용...

Unified Modeling Language

Class 에서

Define 은  Method & Attribute

Implement 는 Method  로 만들어 진다 하네요.

composition : 부분이 값으로 전체를 구성하거나 전체에 포함되면 composition.

aggregation : 부분이 참조로 전체를 구성하거나 전체에 포함되면 aggregation.


association [əsòusiéi∫ən, -∫i-]
1. 협회 (society) , 조합, 단체, 사단 (社團) , 회사, 결사 (結士)
2. U 연합, 합동, 공동;관련 《with》 ; 《완곡》 기업 연합, 담합 《with》
3. U 교제, 제휴, 연락 《with》 ; 《완곡》 혼외 정사, 불륜 《with》
4. U,C 【심리】 연상, 관념 연합;함축, 암시적 의미; 【수학】 조합; 【화학】 (분자의) 회합
5. =ASSOCIATION FOOTBALL
6. 【생태】 (생물) 군집

aggregation [æ̀grigéi∫ən]
1. U 집합, 집성 (集成) , 집적 (集積)
2. 집합체, 집단; 【야구】 팀~·al a.


composition [kɑ̀mpəzí∫ən] [kɔm-]
1. U 구성, 조립, 합성, 혼성
2. U,C 【인쇄】 식자, 조판
3. 구성물;합성물, 혼합물;모조품 《흔히 생략해서 compo라 함》 ; (합성) 성분
4. 한 편의 작문, 문장;악곡
5. U,C 배합, 배치 (arrangement) ; 【미술】 구도
6. U 작문 (법) , 작시 (법) ;문체; 【음악】 작곡 (법)
7. U (물질의) 구조, 조성 《of》
8. U 기질, 성질, 자질
9. 【법】 조정, 타협, 화해 《with》 ;화해금
10. U 【문법】 (단어의) 복합 (법) , 합성


recursive [rikəˊːrsiv]
1. 【수학】 순환의
2. 되풀이되는, 재귀하는
3. 【컴퓨터】 순환적인, 반복적인, 회귀적인~·ly ad. ~·ness n.




포인팅 하는 법.

REPORT  z08_kdn_oop_1.

INCLUDE z08_kdn_oop_1top.
DATA: r_veh  TYPE REF TO lcl_vehicle.

DATA: r_tab TYPE TABLE OF REF TO lcl_vehicle.

START-OF-SELECTION.

  DO 3 TIMES.
    CREATE OBJECT r_veh.
    IF sy-index EQ 3.
      r_veh->carrid = 'AA'.
    ENDIF.
    APPEND r_veh TO r_tab.
  ENDDO.

  LOOP AT r_tab INTO r_veh.
    WRITE: / r_veh->carrid.
  ENDLOOP.

 
 
 
  이게 자바로는 이쯤 될 것 같은데.~ 5.0 이상 버젼으로...
 
class lcl_vehicle{
  public scarr-carrid carrid = "LH";
}

import lcl_vehicle
class  z08_kdn_oop_1{
   lcl_vehicle r_veh;
   ArrayList<lcl_vehicle> r_tab = new ArrayList<lcl_vehicle>;
  public static void main(){
      for(i=0;i<3;i++){
        r_veh = new lcl_vehicle();
        if(i == 3){
            r_veh.carrid = "AA";
            
        }
      }   
  }
}


* 금기시 되는 선언 ...
1. Header Line 을 가진 Internal Table
2. Tables 도 안됨
3. Data 선언을 할 때  like Spfli  는 안 됨.


* 자 그럼 하나  해보자!( 예제..)

*&---------------------------------------------------------------------*
*& Report  Z08_KDN_OOP_1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  z08_kdn_oop_1.

INCLUDE z08_kdn_oop_1top.

DATA: r_tab TYPE TABLE OF REF TO lcl_vehicle.
DATA: r_veh TYPE REF TO lcl_vehicle.

START-OF-SELECTION.

  PERFORM select_vehicle USING 'AA'.
  PERFORM select_vehicle USING 'LH'.

  LOOP AT r_tab INTO r_veh.
    LOOP AT r_veh->it1 INTO r_veh->wa1.
      WRITE: / r_veh->wa1-carrid , r_veh->wa1-connid,
               r_veh->wa1-cityfrom , r_veh->wa1-cityto.
    ENDLOOP.
  ENDLOOP.



*&---------------------------------------------------------------------*
*&      Form  select_spfli
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0080   text
*      -->P_R_TAB  text
*----------------------------------------------------------------------*
FORM select_vehicle  USING  f_carr TYPE spfli-carrid.
  CREATE OBJECT r_veh.
  SELECT *
    FROM spfli
    INTO TABLE r_veh->it1
   WHERE carrid EQ f_carr.
  APPEND r_veh TO r_tab.
ENDFORM.                    " select_vehicle



36 Page

* readonly는 변경할 수 없지만 ... method 가 실행되면 값을 변경하는게 가능하다.



Attribute(Data) 나 Method(Function) 을 참조하는 방식
1. ClassName => xxx

2. instanceName->xxx


이렇게 가능하다.

method 에 대해서 배워보자.

REPORT  z08_kdn_oop_3.
INCLUDE z08_kdn_oop_top3.

DATA: r_veh TYPE REF TO lcl_vehicle.

START-OF-SELECTION.
  CREATE OBJECT r_veh.

  r_veh->get_count( ).

  CALL METHOD r_veh->get_count.


 

*&---------------------------------------------------------------------*
*&  Include           Z08_KDN_OOP_TOP3
*&---------------------------------------------------------------------*
CLASS lcl_vehicle DEFINITION.
  PUBLIC SECTION.
    METHODS: get_count.

  PRIVATE SECTION.
    CONSTANTS: count TYPE i VALUE 10.
ENDCLASS.                    "lcl_vehicle DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_vehicle IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_vehicle IMPLEMENTATION.
  METHOD get_count.
    WRITE: / count.
  ENDMETHOD.                    "get_count
ENDCLASS.                    "lcl_vehicle IMPLEMENTATION




** static method 는      class 명 => sm( )
                               Instance명 -> sm( )

** Static Attribute는?

Static 은 memory 상의 한 영역에만 존재한다.








 
 
        
<<이전 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ··· | 41 | 다음>>

별책부록's Blog is powered by Daum