... 아마도 OOP가 기반을 둔 기사 중 하나 일 것입니다.
실제로는 아니지만 토론에, 특히 당시 논문에서 설명한 첫 번째 기준을 사용하여 시스템을 분해하도록 훈련받은 실무자에게 추가되었습니다.
먼저 평가가 올바른지 알고 싶습니다. FP 패러다임과이 기사는 철학적으로 동의하지 않습니까?
또한 FP 프로그램의 모양에 대한 설명은 절차 나 기능을 사용하는 다른 것과 다를 바 없습니다.
데이터는 함수마다 전달되며 각 함수는 데이터를 밀접하게 인식하고 그 과정에서 "변경"합니다.
... "친밀감"부분을 제외하고 는 친밀감을 피하기 위해 추상 데이터에서 작동하는 기능을 가질 수 있고 종종 수행하기도합니다. 따라서, 당신은 그 "친밀감"을 어느 정도 제어 할 수 있으며, 숨기고 자하는 것에 대한 인터페이스 (예 : 기능)를 설정함으로써 원하는대로 조절할 수 있습니다.
따라서 우리가 함수형 프로그래밍을 사용하여 정보 숨기기에 대한 파르 나스 기준을 따를 수없는 이유는 없습니다. 두 번째 구현과 비슷한 장점을 가진 KWIC 지수를 구현하게되었습니다.
그들이 동의한다고 가정하면, 데이터 숨기기의 FP 구현이 무엇인지 알고 싶습니다. OOP에서 이것을 볼 수 있습니다. 수업 외부의 아무도 액세스 할 수없는 개인 필드를 가질 수 있습니다. FP에서 나에게 이것에 대한 명백한 비유는 없습니다.
데이터가 문제가되는 한 FP를 사용하여 데이터 추상화 및 데이터 유형 추상화를 구체화 할 수 있습니다. 이들 중 어느 것이 든 콘크리트 구조와 함수를 추상화로 사용하여 이러한 콘크리트 구조의 조작을 숨 깁니다.
편집하다
FP와 관련하여 "데이터 숨기기"가 그다지 유용하지 않다고 주장하는 주장이 점점 늘어나고 있습니다 (또는 OOP-ish (?)). SICP의 매우 간단하고 명확한 예를 여기에 표시하겠습니다.
시스템이 유리수로 작동해야한다고 가정하십시오. 그것들을 나타 내기 원하는 한 가지 방법은 분자와 분모의 두 쌍의 정수 또는 쌍의 목록입니다. 그러므로:
(define my-rat (cons 1 2)) ; here is my 1/2
당신은 데이터 추상화를 무시하면, 가장 가능성이 당신이 사용하는 분자와 분모를 얻을 것이다 car
및 cdr
:
(... (car my-rat)) ; do something with the numerator
이 접근 방식에 따라, 유리수를 조작하는 시스템의 모든 부분은 유리수가 숫자임을 알게 cons
됩니다 cons
.리스트 연산자를 사용하여 유리수를 생성하고 추출 할 수 있습니다.
직면 할 수있는 한 가지 문제는 합리적인 수의 형식을 줄여야 할 때입니다. 전체 시스템에서 변경이 필요합니다. 또한 생성시 축소하기로 결정한 경우, 합리적인 용어 중 하나에 액세스 할 때 축소하는 것이 더 좋으며, 또 다른 전체 규모 변경이 발생합니다.
또 다른 문제는 가설 적으로 대체 표현이 선호되고 cons
표현 을 포기하기로 결정한 경우 -다시 전체 스케일 변경입니다.
이러한 상황을 처리하기위한 모든 노력은 인터페이스 뒤의 합리적 표현을 숨기기 시작합니다. 결국 다음과 같이 끝날 수 있습니다.
(make-rat <n> <d>)
분자가 정수 <n>
이고 분모가 정수인 유리수를 리턴합니다 <d>
.
(numer <x>)
유리수의 분자를 돌려줍니다 <x>
.
(denom <x>)
유리수의 분모를 돌려줍니다 <x>
.
그리고 시스템은 더 이상 어떤 합리성이 만들어 졌는지 알지 못할 것이다. 이 때문입니다 cons
, car
그리고 cdr
유리수의 본질이 아니라 make-rat
, numer
하고 denom
있습니다 . 물론 이것은 FP 시스템 일 수 있습니다. 따라서 "데이터 숨기기"(이 경우 데이터 추상화 또는 표현 및 콘크리트 구조를 캡슐화하려는 노력)는 OO, 함수 프로그래밍 또는 컨텍스트와 상관없이 관련 개념 및 널리 사용되는 기술로 제공됩니다. 도대체 무엇이.
그리고 요점은 ... (절차 적 추상화의 경우 디자인 결정이나 데이터 구조 또는 알고리즘을 숨기고 있는지 여부와 관계없이) "숨김"종류 나 캡슐화를 구분하려고 시도 할 수 있지만, 모든 이들의이 같은 주제를 가지고 : 그들은 파르 나스가 명시 적으로 만든 하나 개 이상의 지점에 의해 좌우된다. 그건:
- 변경 가능성 : 필요한 변경이 로컬로 이루어질 수 있는지 또는 시스템을 통해 확산되는지 여부
- 독립적 인 개발 : 시스템의 두 부분을 동시에 개발할 수있는 정도.
- 이해 : 시스템 중 하나를 이해하기 위해 필요한 시스템의 양.
위의 예는 SICP 서적에서 발췌 한 것이므로이 서적에서이 개념에 대한 전체 토론과 발표를 위해서는 2 장을 확인하는 것이 좋습니다 . 또한 FP와 관련하여 추상 데이터 유형에 익숙해지는 것이 좋습니다. 이로 인해 다른 문제가 발생합니다.