매우 객체 지향 (OO) 스타일 로 Java 로 프로그래밍하고 있습니다. OOP는 매우 직관적으로 제공되지만 다른 종류의 프로그래밍에 대한 지식은 거의 없습니다.
절차 적 프로그래밍 이란 정확히 무엇입니까 ? OOP와 정확히 다른 점은 무엇입니까? 함수형 프로그래밍 과 같은 것 입니까?
저는 OO가 아닌 모든 프로그래밍이 절차 적이라고 생각했습니다. 그러나 나는 이것이 사실이 아니라고 생각하기 시작했습니다.
매우 객체 지향 (OO) 스타일 로 Java 로 프로그래밍하고 있습니다. OOP는 매우 직관적으로 제공되지만 다른 종류의 프로그래밍에 대한 지식은 거의 없습니다.
절차 적 프로그래밍 이란 정확히 무엇입니까 ? OOP와 정확히 다른 점은 무엇입니까? 함수형 프로그래밍 과 같은 것 입니까?
저는 OO가 아닌 모든 프로그래밍이 절차 적이라고 생각했습니다. 그러나 나는 이것이 사실이 아니라고 생각하기 시작했습니다.
답변:
Wikipedia에는 이러한 용어에 대한 좋은 설명이 있습니다. 어쨌든 다음은 요약입니다.
선언적 프로그래밍 은 명령형 프로그래밍과 반대입니다. 방법 (예 : SQL, 정규식)보다는 계산 대상을 지정합니다.
함수형 프로그래밍 은 계산할 수있는 표현식으로 계산합니다. 함수는 값이며 다른 함수로 전달되거나 다른 함수에서 반환 될 수 있습니다. 돌연변이는 권장되지 않습니다. 모든 변수는 기본적으로 변경할 수 없습니다. 결과적으로 명령을 달성하는 데 필요한 상태 변경 순서보다는 계산중인 항목을 강조하므로 명령 식보다 선언적입니다.
OOP는 꽤로드 된 용어이기 때문에 관계가 약간 복잡합니다. 기능적 언어와 절차 적 언어 모두에서 객체를 사용할 수 있지만 OO로 광고하는 언어는 절차 적입니다. 문제를 더 혼란스럽게하려면 :
이로 인해 사람들은 OOP가 추상화를 달성 할 수있는 유일한 방법이라고 생각하게되며 기능 프로그래밍과 OOP는 어떻게 든 반대이거나 상호 배타적입니다. 많은 사람들은 또한 모든 기능적 언어가 순수하고 돌연변이를 허용하지 않는다고 생각합니다.
또한 사람들은 일반적으로 명령 / 절차를 서로 바꾸어 던질 수 있으며 때로는 OOP와 대조하고 (추상화가 적은 코드, 일반적으로 C), 때로는 함수형 프로그래밍과 대조하기도합니다. 구조적 프로그래밍 이라는 용어 는 내가 알 수있는 한 대부분 사용하지 못했습니다 (이 시점에서 대부분의 사람들은 goto와 globals가 해롭다 고 당연한 것으로 생각하기 때문에).
절차 적 프로그래밍은 다른 많은 언어 디자인 (기능이 아닌 기능)의 기본 구성 요소 중 하나 인 프로그래밍에 대한 접근 방식입니다.
대부분의 언어는 "Procedural Programming"에 속하며 아마도 대부분의 사람들에게 가장 자연스러운 디자인 방식 일 것입니다 (OO로 생각하면 소수라고 생각합니다).
기본은 절차 적입니다.
다른 사람들이 말했듯이, 그것은 순차적으로 프로그램을 구성하는 메커니즘입니다.
OO 메소드와 유사한 명명 된 코드 블록 인 "프로 시저"를 정의하는 메커니즘이 필요합니다.이 매개 변수는 0에서 많은 매개 변수를 허용하고 선택적으로 값을 리턴합니다 (일반적으로 함수라고 함)-아마도 기능 언어와 혼동 될 수 있습니다. )
패러다임은 당신이 할 일이나 전달되는 일의 방식을 지시하지 않습니다.
단순히 프로그램이 순차적 인 방식으로 작동하는 일련의 절차 (또는 기능)로 구성 될 것이라고 간단히 설명합니다. 그런 다음 데이터는 절차와 독립적으로 정의됩니다.
이것은 객체 지향 프로그래밍과는 다릅니다. 객체 지향 프로그래밍은 데이터와 그 데이터에 작용하는 메소드 (함수가 아님) 모음을 중심으로 프로그램을 구성합니다.
그것에 대해 생각하는 한 가지 방법은 데이터 범위와 관련이 있습니다.
절차 적 언어 범위는 매우 간단합니다. 변수는 주어진 프로 시저 (로컬로 선언 됨)의 범위에있을 수 있으며 중첩 된 범위를 사용하여 물건을 호출하는 최상위 항목 (전역 적으로 선언 된 수준)까지있을 수 있습니다.
객체 지향 언어에서는 현재 사용중인 객체의 컨텍스트 범위 인 새로운 범위 지정 컨텍스트를 추가합니다.
객체 지향과 비교할 때 절차를 생각하는 또 다른 방법은 모든 메소드 를 정적으로 선언 해야하는 객체 지향 언어를 고려하는 것 입니다. 결과적으로 클래스를 사용하여 프로 시저를 그룹화 할 수있는 절차 언어가 작성됩니다.
절차 적 프로그래밍 은 확실히 기능적인 프로그래밍이 아닙니다.
절차 적 프로그래밍은 컴퓨터 모델을 머릿속에 기계로두고 메모리에서 데이터를 수정하는 방법에 대해 생각하는 것입니다. 먼저 A
값 3으로 설정 한 다음 1을 추가하고 메모리 위치에 A
다시 저장 합니다 (이전 값 덮어 쓰기).
함수 프로그래밍을 말하는 것 A
(3), 그리고 B
이며 A + 1
, 다음 계산하는 방법을 컴퓨터 그림을시키는 B
. 당신이 정의하면 A
그것은 해야 변경할 수 없습니다 (변경되지 않음). 또한 함수를 사용하면 함수를 일급 값으로 전달하는 것과 같은 작업을 수행 할 수 있습니다 (함수는 함수를 인수로 취할 수 있음).
객체 지향 프로그래밍은 종종 두 가지를 결합하며 두 가지에 직교합니다. 함수형 프로그래밍을 사용하고 불변 개체를 반환 할 수 있으며, 해당 개체에는 계산 된 값을 반환하는 메서드가있을 수 있으며, 함수형 객체 지향 프로그래밍이라는 게을리가 있습니다. 또한 "리포지토리"(데이터베이스의 추상 버전)를 나타내는 개체를 가질 수 있으며 리포지토리에있는 재료를 "저장"하고 "다시 가져 오기"하여 해당 개체가 수행 된 방법에 대한 모든 세부 정보를 처리 할 수 있습니다. . 기본적으로 객체 지향 절차 적 프로그래밍입니다.
OOP는 조금 더 정교해진 절차 적 프로그래밍 방식에 지나지 않으며, 이는 다시 더 큰 명령형 프로그래밍 제품군에 속합니다. 그 주장의 증거는 많은 C # / Java 프로그래머들이 "뭔가를하는"경향이 있고 다음과 같은 방법을 선호한다는 것입니다.
void doThisAndThat(....) { ... do something ... }
따라서 많은 void 메소드 (이전의 프로 시저 (sic!)라고 함)와 다음과 같은 코드 로 구성된 프로그램 :
doThis();
if (state is that) doSomethingElse();
doThat();
완벽한 절차 적 프로그래밍입니다.