10월8일 - 4주차 -1번
Function 도 Encapsulation 이 된다.
Program 1개가 1의 Internal Table 을 사용한다.
Function Group 영역의 Global Data 는
Function Group 안의 Function Module이 호출되었을때 공유하게 된다.
~ 호출이 되는 순간에 Function Group 의 Data가 메모리에 올라오게 된다.
바로 메모리에 올라가게 된다.
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 로 만들어 진다 하네요.
국내의 대부분의 프로젝트는 CBD개발 방법론으로 만들어 지고 있는 듯 하다.
하지만 처음 설계되로 만들어 지는 곳은 본적도 들은 적도.. 별로 없는 듯 하다.
아밥에서 객체에 대한 이야기를 듣는것도 참으로 아이러니 한 일이지만 아무튼...
잘 만들어진 UML은 시스템을 이해하는데 아주 많은 도움을 주기도 했다. 개발이 끝날때까지의 변경에 대한 적용을
문서에 잘 해 나갔으면 말이다.
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.
이게 자바로는 이쯤 되려나?
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";
}
r_tab.append(r_veh);
}
foreach(lcl_vehicle lv:r_tab ){
System.out.println(lv.carrid);
}
}
}
*
금기시 되는 선언 ...
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 상의 한 영역에만 존재한다.