프로시저

Procedural programming

프로시저 프로그래밍은 프로시저 호출의 개념을 기반으로 하는 필수 [1]프로그래밍에서 파생된 프로그래밍 패러다임입니다.절차(일종의 루틴 또는 서브루틴)에는 수행할 일련의 계산 단계가 포함되어 있습니다.주어진 프로시저는 다른 프로시저 또는 그 자체를 포함하여 프로그램 실행 중 임의의 시점에서 호출될 수 있습니다.Fortran, ALGOL, COBOL, PL/I [2]BASIC을 포함한 최초의 주요 절차 프로그래밍 언어는 1957~1964년경에 등장했다.파스칼과 C는 1970-1972년에 출판되었다.

컴퓨터 프로세서스택 레지스터를 통해 프로시저 프로그래밍을 위한 하드웨어 지원을 제공하며 프로시저를 호출하고 프로시저에서 반환하는 명령을 제공합니다.다른 유형의 프로그래밍에 대한 하드웨어 지원은 가능하지만 상업적으로 성공한 시도는 없었습니다(Lisp 머신이나 Java 프로세서 [contradictory]등).

절차 및 모듈화

모듈화는 일반적으로 특히 크고 복잡한 프로그램에서는 바람직합니다.입력은 보통 구문적으로 인수 형식으로 지정되며 출력은 반환값으로 전달됩니다.

범위 지정은 절차를 모듈로 유지하는 데 도움이 되는 또 다른 기술입니다.따라서 프로시저가 명시적 허가 없이 이전 인스턴스를 포함한 다른 프로시저의 변수에 액세스하지 못하게 됩니다(그 반대도 마찬가지입니다.

소규모 프로그램이나 빠르게 작성된 프로그램에서 사용되는 덜 모듈화된 프로시저는 실행 환경에서 많은 변수와 상호 작용하는 경향이 있으며, 다른 프로시저에서도 이러한 변수가 수정될 수 있습니다.

간단한 인터페이스를 지정하고, 자급자족하며, 재사용할 수 있기 때문에 프로시저는 프로그래밍 라이브러리를 통해 다양한 사용자 또는 다른 그룹에 의해 작성된 코드를 만드는 편리한 수단이 됩니다.

다른 프로그래밍 패러다임과의 비교

명령형 프로그래밍

절차 프로그래밍 언어도 실행 환경의 상태를 명시적으로 참조하기 때문에 필수 언어입니다.이것은 변수(프로세서 레지스터에 대응 가능)에서 로고 프로그래밍 언어의 "거북이" 위치까지 모두 가능합니다.

종종 "프로시저 프로그래밍"과 "임페리얼 프로그래밍"이라는 용어는 동의어로 사용됩니다.그러나 절차 프로그래밍은 블록과 범위에 크게 의존하는 반면, 필수 프로그래밍은 전체적으로 이러한 기능을 갖출 수도 있고 가지지 않을 수도 있습니다.이와 같이 절차 언어는 일반적으로 블록에 작용하는 예약된 단어를 사용합니다.if,while,그리고.for제어 플로우를 실장하기 위해서입니다만, 비구조화 명령어는 같은 목적으로 goto 문과 브랜치테이블을 사용합니다.

객체 지향 프로그래밍

프로시저 프로그래밍의 초점은 프로그래밍 태스크를 변수, 데이터 구조 및 서브루틴의 집합으로 나누는 반면 객체 지향 프로그래밍에서는 프로그래밍 태스크를 인터페이스를 사용하여 동작(메서드)과 데이터(멤버 또는 속성)를 노출하는 개체로 나누는 것입니다.가장 중요한 차이점은 프로시저 프로그래밍이 데이터 구조에서 작동하기 위한 절차를 사용하는 반면 객체 지향 프로그래밍은 둘을 하나로 묶기 때문에 클래스의 인스턴스인 "오브젝트"는 "소유" 데이터 [3]구조에서 작동한다는 것입니다.

명명법은 두 가지에 따라 다르지만 의미는 비슷합니다.

절차 객체 지향
절차. 방법
기록. 물건
모듈 학급
프로시저 호출 메세지

기능 프로그래밍

실용적인 기능 언어에서 모듈화 및 코드 재사용의 원칙은 구조화된 프로그래밍에서 비롯되었기 때문에 절차 언어와 근본적으로 동일합니다.예를 들어 다음과 같습니다.

  • 절차는 기능에 대응합니다.둘 다 프로그램의 다양한 부분과 실행 시 다양한 지점에서 동일한 코드를 재사용할 수 있습니다.
  • 마찬가지로 프로시저 호출은 함수 어플리케이션에 대응합니다.
  • 함수 인수, 반환 값 및 변수 범위를 사용하여 함수 및 함수들이 동일한 방식으로 서로 구분됩니다.

스타일 간의 주요 차이점은 기능적 프로그래밍 언어가 절차적 프로그래밍의 필수 요소를 제거하거나 최소한 강조한다는 것입니다.따라서 기능 언어의 기능 세트는 순수 기능 측면에서 가능한 한 많은 쓰기 프로그램을 지원하도록 설계되었습니다.

  • 절차 언어는 프로그램의 실행을 암묵적으로 공유 상태를 변경할 수 있는 명령어 시퀀스로 모델링하는 반면, 기능적 프로그래밍 언어는 변수와 반환값의 관점에서만 서로 의존하는 복잡한 표현의 평가로 실행을 모델링합니다.이러한 이유로 기능 프로그램은 코드 실행의 자유로운 순서를 가질 수 있으며, 그 언어들은 프로그램의 다양한 부분이 실행되는 순서를 거의 제어하지 못할 수 있다(예를 들어 Scheme의 프로시저 호출에 대한 인수는 임의의 순서로 실행된다).
  • 기능 프로그래밍 언어는 새로운 절차 언어에 포함되지만, 일급 함수, 익명 함수 및 폐쇄를 지원(및 많이 사용)합니다.
  • 기능성 프로그래밍 언어는 필수 루프 구조 대신 테일콜 최적화고차 함수에 의존하는 경향이 있습니다.

그러나 많은 기능적 언어는 사실 불순하게 기능하며 프로그래머가 절차적 스타일 또는 두 스타일을 조합하여 프로그램을 작성할 수 있도록 하는 명령적/절차적 구조를 제공합니다.기능 언어의 입력/출력 코드는 절차 형식으로 작성되는 것이 일반적입니다.

프로그래밍이 어렵기 때문에(따라서 어려운) 구조화된 프로그래밍 규칙을 회피하는 소수의 난해한 기능 언어(Unlambda 등)가 존재합니다.이러한 언어는 절차적 언어와 기능적 언어 간의 공통적인 근거에 대한 예외입니다.

논리 프로그래밍

논리 프로그래밍에서 프로그램은 전제의 집합이며, 연산은 후보 정리를 증명하려고 시도함으로써 이루어진다.이러한 관점에서 논리 프로그램은 문제를 어떻게 해결할 것인가보다 무엇이 문제인가에 초점을 맞춘 선언적인 프로그램입니다.

그러나 SLD 해결로 구현된 역추리 기법은 Prolog와 같은 논리 프로그래밍 언어의 문제를 해결하기 위해 사용되며 프로그램을 목표 감소 절차로 취급합니다.이 형식의 절은 다음과 같습니다.

H1n:- B, …, B.

둘 다 절차로서 이중 해석을 하다

H, B 및 … 및 Bn 보이다/해결하다1

논리적인 의미로서:

B와1 …, 그리고n B는 H를 의미합니다.

경험이 풍부한 논리 프로그래머는 절차적 해석을 사용하여 효과적이고 효율적인 프로그램을 작성하고 선언적 해석을 사용하여 프로그램이 올바른지 확인합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Programming Paradigms".
  2. ^ "Welcome to IEEE Xplore 2.0: Use of procedural programming languages for controlling production systems". Proceedings. The Seventh IEEE Conference on Artificial Intelligence Application. ieeexplore.ieee.org. doi:10.1109/CAIA.1991.120848. S2CID 58175293.
  3. ^ Stevenson, Joseph (August 2013). "Procedural programming vs object-oriented programming". neonbrand.com. Retrieved 2013-08-19.

외부 링크