1 / 50

Chapter 9 – 부 프로그램

Chapter 9 – 부 프로그램. Outline 9.1 개요 9.2 매개변수 평가와 전달기법 9.3 형식 매개변수 명세 9.4 부작용과 이명 9.5 연산자 중복 정의 9.6 포괄 기능 9.7 코루틴. 부프로그램 (subprogram, procedure) 일련의 행위나 계산을 추상화하는 기법으로 제공 실행과 분리해서 선언할 수 있는 블록 ( 호출 요구 ) 함수 (function) : 함수 이름으로 값 반환

lamya
Download Presentation

Chapter 9 – 부 프로그램

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 9 – 부 프로그램 Outline 9.1 개요 9.2 매개변수 평가와 전달기법 9.3 형식 매개변수 명세 9.4 부작용과 이명 9.5 연산자 중복 정의 9.6 포괄 기능 9.7 코루틴

  2. 부프로그램(subprogram,procedure) 일련의 행위나 계산을 추상화하는 기법으로 제공 실행과 분리해서 선언할 수 있는 블록(호출 요구) 함수(function) : 함수 이름으로 값 반환 서브루틴(subroutine),프로시저(procedure) : 매개변수로 값 반환 부프로그램의 일반적 특성 각 프로시저는 단일 진입점을 갖음 호출프로그램(caller)은 피호출 프로그램(callee)의 실행동안 중단 부프로그램 종료 시 제어는 호출자에게 되돌아감 프로시저의 구성 프로시저 이름 매개변수(parameter) 리스트 환경(environment) 몸체(body) 9.1 개요 procedure프로시저 이름(매개변수리스트) 선언부(declarations) 몸체(body) end프로시저 이름

  3. 매개변수 (parameter) 매개변수 결합 (parameter association) 위치 매개변수 결합(positional parameter association) 리스트에 나타난 위치로 바인딩 짧은 매개변수 리스트에 적합 이름 매개변수 결합(named parameter association) 이름으로 바인딩 매개변수 리스트가 길 때 적합 일부 매개변수 값을 디폴트로 줄 때 적합 9.1 개요

  4. 함수(Function) 함수 이름으로 값을 반환 함수의 투명성 제공(환경 변화 없이) 함수 값 반환 방법 함수이름에 값 배정 RETURN 문으로 결과 값 반환 함수 반환 값으로 허용되는 자료형 FORTRAN, ALGOL 60 : 스칼라형(실수, 정수, 논리형 등) Pascal : 스칼라형, 포인터 PL/I : 스칼라형, 포인터, 문자열 Ada : 모든 자료형(배열, 레코드 등 포함): 반환문의 직교성 C, C++ : 스칼라형, 포인터(반환문의 직교성을 갖도록 제공) 9.1 개요

  5. 프로시저에서 사용 식별자 형식 매개 변수 지역 변수 비지역 변수 프로시저에 관해서 고려할 사항 비지역 변수 값을 바인딩하는 환경은? 실 매개 변수의 평가방법은? 형식 매개 변수와 실 매개 변수의 바인딩 방법은? 9.1 개요

  6. 형식 매개 변수와 실매개 변수 실 매개 변수 호출 프로그램으로 전달하기 위하여 사용된 식 또는 이름 형식 매개 변수 부프로그램이 실행될 때, 실 매개 변수를 대신하여 사용되는 이름 일반적으로 지역 변수(또는 상수) 역할 매개 변수 명세 제공 최근 경향 형식매개변수 이름, 자료형, 바인딩 방법 등등 9.2 매개변수 평가와 전달기법

  7. 형식 매개 변수와 실 매개 변수의 사용 예 형식 매개 변수 - 피호출자 (callee) 실 매개 변수 - 호출자 (caller) 9.2 매개변수 평가와 전달기법 • SUBROUTINE P(A , B) [Fortran] • procedure P(A , B) [Algol] • P:PROCEDURE(A , B); [PL/I] • ▽ A P B [APL] • CALL P(X , Y * Z) • P(X , Y * Z) • CALL P(X , Y * Z); • X P Y × Z

  8. 형식 매개 변수와 실 매개 변수의 대응 방법 위치 대응 형식 매개 변수와 실 매개 변수가 순서대로 대응 예) procedure TEST(A, B : in REAL; C : in INTEGER); call TEST(0.1, 100.0, 50); 이름 대응 실 매개 변수에서 대응되는 형식 매개 변수 이름 사용 Ada 언어 예 : 위치 대응, 이름 대응 병행 사용 (위 procedure 선언문에서 다음 경우 모두 동일) TEST (A => 0.1, C => 50, B => 100.0); TEST (0.1, C => 50, B => 100.0); TEST (0.1, 100.0, 50); 9.2 매개변수 평가와 전달기법

  9. 참조 호출(Call by reference, - by address, - by location) 실 매개 변수 주소를 대응되는 형식 매개 변수에 보내는 방법 procedure p (x, y) call p (a, b) 기법 적용 caller는 실 매개 변수의 주소를 계산하여 callee에게 전달 a x y b 9.2 매개변수 평가와 전달기법

  10. 예제)참조 호출 기법의 사용 예 p(x[i], y) 호출시 목적 코드 • procedure p(a, b) {call by reference} • begin a b * 4 end 9.2 매개변수 평가와 전달기법 x[i] 주소 ADDR1 y 주소 ADDR2 LDIND ADDR2 MULT @4 STIND ADDR1

  11. 값 호출(call by value) 형식 매개 변수의 지역 변수화 실 매개 변수 값을 대응 지역 변수로 복사 특징 - 실 매개 변수 값 불변 call p (a, b) procedure p (x, y) 기법 적용 caller는 실 매개 변수 주소(또는 값) 전달 callee는 r-value를 형식 매개 변수의 기억 장소에 복사 이후 다른 지역 변수와 동일하게 취급 a x y b 9.2 매개변수 평가와 전달기법

  12. 값 호출 기법의 예제 목적 코드 • procedure p(a, b) {call by value} • begin a b * 4 end LDIND ADDR1 STORE a LDIND ADDR2 STORE b 실매개 변수값을 지역 변수인 형식 매개 변수에 복사 LOAF b MULT @4 STORE a 몸체부에 대한 코드 9.2 매개변수 평가와 전달기법

  13. 결과 호출 기법 (call by result) 피호출자가 반환 직전에 형식 매개 변수의 값을 대응되는 실 매개 변수에 복사 후 반환 형식 매개 변수 - 지역 변수 취급 형식 매개 변수의 초기 값 미정의(callee에서 정의) 값-결과 호출 기법 (call by value-result) 값 호출 기법과 결과 호출 기법을 함께 사용한 방법 기법 적용 callee 실행 시작 - 값 호출 기법 적용 callee 실행 끝 - 결과 호출 기법 적용 9.2 매개변수 평가와 전달기법

  14. 표 9.1매개 변수 전달 기법에 따른 프로그램 예 9.2 매개변수 평가와 전달기법 procedure PRINT integer y procedure INCR(x) integer x begin y 1 x x + 2 end begin y 0 INCR(y) write y end • 프로그램 실행 후 인쇄 값 (y) • call by reference 적용 : 3 • call by value-result 적용 : 2

  15. 이름 호출 기법 (Call by name) 형식 매개 변수의 이름이 사용될 때마다 그에 대응되는 실 매개 변수 자체가 사용된 것으로 간주 (필요한 r-value 또는 l-value를 매번 계산) 기법 적용 caller - 실 매개 변수의 r-value와 l-value 계산 routine (THUNK ) 작성 callee – 필요시 THUNK를 이용하여 필요한 값( r-value,l-value) 계산 단점 구현 난해 프로그램 판독성 난해 9.2 매개변수 평가와 전달기법

  16. 이름 전달 기법 예제 call EXCHG(J, N(J)) 의 해석 procedure EXCHG(X, Y) integer TEMP begin TEMP X X Y Y TEMP end 호출 시 J의 값 J0로 가정 참조 호출 : J0 N(J0 ) 이름 호출 : J N(J0) N(N(J0 )) J0 Integer TEMP begin TEMP J J N(J) N(J) TEMP end 9.2 매개변수 평가와 전달기법

  17. 예제 9.2 매개변수의 전달에 아래 기법이 각각 사용되었다고 가정할 때, 출력되는 값을 구하여라. Call by value Call by name Call by reference P : PROCEDURE ; DECLARE A(3), I ; /* A는 세 개의 원소를 갖는 배열 */ I = 1 ; /* =은 배정 연산자 */ A(1) = 2 ; A(2) = 4 ; /* A(I)가 실 매개 변수 */ CALL Q( A(I) ) ; END P ; Q : PROCEDURE( B );/* 형식 매개 변수 B는 */ /* 실매개변수 A(I)에 대응됨 A(I) = 3 ; /* 식별자 A와 I는 /* I = 2 ; /* 프로시져 P에서 상속 */ PUT LIST(B) ; /* B의 값을 인쇄 */ END Q ; 9.2 매개변수 평가와 전달기법

  18. 예제 9.3 매개변수의 전달이 아래 기법이 각각 사용되었다고 가정할 때, 출력되는 값을 구하여라. Call by reference Call by value Call by name • P : PROCEDURE ; • DECLARE A ; • A = 1 ; • CALL Q(A) ; • END P ; Q : PROCEDURE(B) ; DECLARE A,B ; A = 2 ; PUT LIST(B) ; END Q ; 9.2 매개변수 평가와 전달기법

  19. 예제 9.4 다음 Algol 형태의 프로그램에서 매개 변수 전달 방법이 아래 (a), (b), (c), (d) 및 (e) 기법으로 사용되었을 경우,프로그램이 실행된 후의 v[3]과 v[4]의 최종값을 구하여라. (단, 미확정될 수도 있음) call by value call by reference (c) call by result (d) call by value result (e) call by name begin integer k integer array v procedure P(a) integer a begin a a + 1 v[k] 5 k 3 a a + 1 end v[3] 6 v[4] 8 k 4 call P( v[k] ) end 9.2 매개변수 평가와 전달기법

  20. 실 매개 변수와 형식 매개 변수의 정적 형 검사 형식 매개 변수 명세표 요구 형식 매개 변수 명세 - 자료형, 전달 기법, 초기값, 대응 관계 등 각종 언어의 형식매개 변수 명세 Pascal : 자료형, 전달 기법 ( 값 전달 기본, var 선언 - 참조 전달, 값-결과 전달) Algol 60 : 전달 기법(이름전달 기본, value 선언 - 값 전달) Ada : 전달 기법 - 예약어 in(값 전달), out(결과 전달), in out (값-결과 전달) in - 지역 상수 취급 (지역 변수 취급 안함) 형식 매개 변수 자료형 선언 형식 매개 변수의 디폴트(초기) 값 선언 가능 (지역 상수인 in mode도 가능) Ada 함수는 투명성을 위해 in 모드만 가능 9.3 형식 매개 변수 명세

  21. 프로그래밍 언어의 유해한 특징 GOTO 문 포인터 사용 : 이명 발생 유도 부수효과 (side effect) 이명(aliasing) 9.4 부작용과 이명

  22. 부수 효과(side effect) 단위 프로그램간의 의사 소통 방법 비지역 변수 접근 부수효과 이용 참조 전달기법, 이름 전달기법 실 매개 변수 값 변화(부수효과) 예기치 못한 결과 발생(심각한 오류 발생) 단점 프로그램 판독성 저하 심각한 오류 발생 함수의 투명성 상실 9.4 부작용과 이명

  23. 이 명(aliasing) 동일한 기억 장소를 함께 사용하고 있는 다른 이름 한 변수 값 변화 동일장소 사용하는 다른 변수의 값 변화 이명의 효과(aliasing effect) 초기 언어 : 효율적 기억 장소 사용을 위해 이명 허용 예) Fortran의 EQUIVALENCE, Cobol의 REDEFINES, C의 union 등 * x, y가 서로 이명 관계 9.4 부작용과 이명 call p(a,a) procedure p(x,y) ; x := x + 1 ; y := x + y ; endp 프로시저 호출에서 발생되는 이명 예(참조호출)

  24. 중복 정의(overloading) 한 개체(식별자, 함수 이름, 연산자)가 두 가지 이상의 개념 갖음 참조)영역 구멍(hole in scope) 개념과 대조 사용 이유 자연스러운 원래의 일반적인 표기 사용을 지원 동일한 이름이나 연산자를 중복 사용하여 하나의 프로그램으로 합쳐도 혼동되지 않음 (문맥에 의한 구별) 중복정의 사용시 구별법 의미 확정을 문맥에서 알 수 있으면 컴파일러가 수행 문맥으로 구별이 될 수 없는 경우 사용자가 제약 사항을 명시(자격 부여) 사용자 중복 정의 제공(최근 언어) 9.5 연산자 중복 정의

  25. Ada사용 예) “*” 연산자를 행렬 곱셈에 중복 정의 (사용자 정의) 이항 연산자(binary operator)“*”를 행렬 곱셈 연산자로 정의 자료형 MATRIX는 별도 선언 MATRIX 형 검사 - Ada 시스템에서 수행 A := B * C ; B, C가 MATRIX 형 - 위 함수 정의대로 수행 B, C가 integer 형 - 정수 곱셈 문맥으로 검사 B, C가 real 형 - 실수 곱셈 9.5 연산자 중복 정의 function "*"(X, Y : MATRIX) return MATRIX ;

  26. 중복 정의 연산자를 결정하기 위한 방법 자료형 정보를 파스 트리의 각 노드에 붙인 것을 가정 (동적 또는 정적으로 결정) 트리의 단 노드들의 자료형 확정 간 노드의 자료형 결정 = (complex) + (real) C (complex) * (integer) R (real) I 2 (integer) (integer) 9.5 연산자 중복 정의 COMPLEX C INTEGER I REAL R . . C = 2 * I + R

  27. 표 9.2 Ada에서의 중복 표현 해결 예 9.5 연산자 중복 정의 procedure MAINis ... package P is function F(X : REAL) returnRANGE ; -- P.F function G(X : DOMAIN) return REAL ; -- P.G function K(X : DOMAIN) return BOOLEAN ; -- P.K endP; function F(X : BOOLEAN) return RANGE ; -- MAIN.F function G(X : DOMAIN) return BOOLEAN ; -- MAIN.G function K(X : DOMAIN) returnREAL ; -- MAIN.K S : DOMAIN ; T : RANGE ; U : BOOLEAN ; V : REAL ; use P; ... begin T := F(V) ; -- P.F(V)를 의미 T := F(U) ; -- MAIN.F(U)를 의미 T := F(K(S)) ; -- MAIN.F(P.K(S))인지 P.F(MAIN.K(S))인지 모호함 T := F(G(S)) ; -- MAIN.F(MAIN.G(S))인지 P.F(P.G(S))인지 모호함 end

  28. 포괄 프로시저 (generic procedure) 하나 이상의 요소를 매개변수로 받아들여 실 프로시저를 생성할 수 있는 프로시저 틀(procedure templates) 컴파일 시간에 실 매개 변수가 대체되어 실 프로시저를 발생 코딩의 오류 감소 프로그램의 길이 축소 추상화 개념 제공 ELI, Simula, CLU (자료형에 따른 프로시저들 생성) 9.6 포괄 기능 (Generic Functions)

  29. Ada의 부프로그램이나 패키지에서 사용되는 포괄 설비 매크로(macro)의 확장된 개념 프로그램 생성 틀 (자체가 호출될 수 없음) 실 프로시저 : 번역시 정적 생성 (instantiation) 9.6 포괄 기능 (Generic Functions)

  30. 표 9.3 Ada에서의 포괄 프로시저 예 포괄 프로시저를 사용하여 실 프로시저를 생성시키는 방법 프로시저의 사용 9.6 포괄 기능 (Generic Functions) generic type ITEM is private; procedure SWAP(X, Y : in out ITEM) is TEMP : ITEM ; begin TEMP := Y ; Y := X ; X := TEMP ; end ; procedure SWAPINTEGER is new SWAP(INTEGER) ; procedure SWAPREAL is new SWAP(FLOAT) ; SWAPINTEGER(A, B) ; SWAPREAL(P, Q) ;

  31. 포괄 프로시저 SWAP에 중복 표현을 함께 사용 EXCHG (A, B) 의 해석 A, B의 자료형에 따라 정수형, 문자형, 실수형, 부울형 SWAP 프로시저결정 포괄 기능 제공 설계 고려 사항 포괄기능 사용 가능 연산은 ? Ada - procedure, function, package 9.6 포괄 기능 (Generic Functions) procedure EXCHG is new SWAP(INTERGER) ; procedure EXCHG is new SWAP(FLOAT) ; procedure EXCHG is new SWAP(BOOLEAN) ; procedure EXCHG is new SWAP(CHARACTER) ;

  32. 코루틴 호출된 프로그램의 수행이 완전히 끝나기 전에 타 프로시저 (호출 프로시저 포함)로 제어를 넘겼다가 재개(resume)할 수 있는 프로시저 B A Resume B Resume A Resume B ResumeA Resume B 9.7 코루틴 (Coroutines)

  33. 특징 코루틴은 제어를 넘겨 받으면 프로시저의 일부만 실행 제어의 반환은 실행 일시 정지 후에 제어를 받으면 정지된 위치에서 실행 재개(resume) 프로시저들간의 관계가 주종 관계가 아님 coroutine A에서 resume B 문장 실행 시 수행 작업 (1) A의 resume 문장 다음 위치를 A의 제어 장소에 기억 (2) coroutine B의 실행 위치를 알기 위하여 B의 제어 장소의 값 참조 (3) B의 제어 장소의 참조된 값으로 제어 분기 코루틴은 이산 체계 시뮬레이션 언어의 범주에서 취급 경우에 따라 자연스러운 알고리즘 제공 기존 언어에서 시뮬레이션으로 간단히 해결 9.7 코루틴 (Coroutines)

  34. 슬라이드 쇼가 끝났습니다.

  35. 용 어 정리

  36. 부프로그램 (subprogram)

  37. 매개 변수 (parameter)

  38. 매개 변수 결합 (parameter association)

  39. 위치 매개 변수 결합(positional parameter association)

  40. 이름 매개 변수 결합 (named parameter association)

  41. 함수 (function)

  42. 실매개 변수 (actualparameter)

  43. 형식 매개 변수 (formal parameter)

  44. 참조 호출 기법(call by reference, address, location)

  45. 값 호출 (call by value)

  46. 부작용 (side effect)

  47. 이 명 (aliasing)

  48. 중복 정의 (overloading)

  49. 포괄적인 (generic)

  50. 코루틴 (coroutines)

More Related