...そして、おそらくOOPのベースとなった記事の1つです。
そうではありませんが、議論に追加されました。特に、当時、彼が論文で説明した最初の基準を使用してシステムを分解するように訓練された開業医に追加されました。
まず、私の評価が正しいかどうか知りたいです。FPパラダイムとこの記事は哲学的に同意しませんか?
いいえ。また、私の目には、FPプログラムがどのように見えるかについてのあなたの説明は、プロシージャや関数を使用する他のプログラムと変わりません。
データは関数から関数に渡され、各関数はデータを密接に認識し、途中で「変更」します。
... 「親密性」の部分を除きます。親密性を正確に回避するために、抽象データに対して機能する関数を使用できる(そして実際に行うことが多いため)したがって、あなたはその「親密さ」をある程度制御でき、あなたが隠したいもののためのインターフェース(すなわち機能)をセットアップすることによって、あなたが好きなようにそれを調整することができます。
そのため、関数型プログラミングを使用して情報隠蔽のParnas基準をたどることができず、KWICインデックスの実装になり、彼の2番目の実装と同じような利点が得られない理由はありません。
彼らが同意すると仮定して、FPがデータ隠蔽の実装とは何かを知りたいです。OOPでこれを見るのは明らかです。クラス外の誰もアクセスできないプライベートフィールドを持つことができます。FPの場合、これとの明らかな類似性はありません。
データに関する限り、FPを使用してデータ抽象化とデータ型抽象化を作成できます。これらはいずれも、抽象として関数を使用して、具体的な構造とこれらの具体的な構造の操作を隠します。
編集
ここでは、FPのコンテキストでの「データの非表示」はそれほど役に立たない(またはOOPっぽい(?))と主張するアサーションが増えています。それで、SICPから非常にシンプルで明確な例をここにスタンプさせてください:
システムが有理数で動作する必要があるとします。それらを表現する1つの方法は、分子または分母という2つの整数のペアまたはリストとしてです。したがって:
(define my-rat (cons 1 2)) ; here is my 1/2
あなたはデータの抽象化を無視した場合、最も可能性の高いあなたが使用して分子と分母を取得しますcar
とcdr
:
(... (car my-rat)) ; do something with the numerator
このアプローチに続き、有理数を操作するシステムのすべての部分は、合理的な数であることを知っているだろうcons
-彼らがしますcons
有理数を作成し、リスト演算子を使用してそれらを抽出するための番号。
直面する可能性のある問題の1つは、有理数の形式を縮小する必要がある場合です。システム全体で変更が必要になります。また、作成時に削減することにした場合、合理的な用語の1つにアクセスするときに削減する方が良い場合があります。
別の問題は、仮にそれらの代替表現が好まれ、そのcons
表現を放棄することに決めた場合です-再びフルスケールの変更。
これらの状況に対処するための適切な努力は、おそらく、インターフェースの背後にある合理性の表現を隠し始めるでしょう。最後に、次のような結果になる可能性があります。
(make-rat <n> <d>)
分子が整数で分母が整数<n>
である有理数を返します<d>
。
(numer <x>)
有理数の分子を返します<x>
。
(denom <x>)
有理数の分母を返します<x>
。
そして、システムは、どの理性が作られているかをもはや知りません(そして、もはやすべきではありません)。これがためであるcons
、car
とcdr
有理数に固有のものではなくmake-rat
、numer
とdenom
しています。もちろん、これは簡単にFPシステムにすることができます。したがって、「データの隠蔽」(この場合、データ抽象化、または表現と具体的な構造をカプセル化する努力として知られています)は、オブジェクト指向、関数型プログラミング、またはなんでも。
そして、ポイントは...彼らがしている「隠しの種類」またはカプセル化(手順の抽象化の場合、設計決定、データ構造またはアルゴリズムを隠しているかどうか)を区別しようとするかもしれませんが、それらはすべて同じテーマを持っています。それらは、パルナスが明確にした1つ以上のポイントによって動機付けられています。あれは:
- 変更可能性:必要な変更をローカルで行うことができるか、システム全体に分散するか。
- 独立した開発:システムの2つの部分を並行して開発できる程度。
- わかりやすさ:システムのどの部分がその部分の1つを理解するために知られている必要があるか。
上記の例はSICPの本から引用したものなので、本でのこの概念の完全な議論とプレゼンテーションのために、第2章をチェックすることを強くお勧めします。また、FPのコンテキストで抽象データ型に精通することをお勧めします。これは、テーブルに他の問題をもたらします。