FPとOOは直交するのか?
質問
FPとOOは直交しているという考えを理解し、検証しようとしているのですが、これは何度も聞いていることです。
まず、2つの概念が直交しているとはどういうことでしょうか?
FPは不変性と純粋性を可能な限り奨励し、OOは状態と変異のために構築されているように見えます。 オブジェクトは不変であることができますが、OOは状態や変化を意味するように思われます。
両者は正反対のように思えます。そのことが直交性にどのような影響を及ぼしているのでしょうか?
Scalaのような言語では、OOとFPの両方を簡単に行うことができますが、これは2つの手法の直交性に影響を与えるのでしょうか?
どのように解決するのですか?
直交性 は、2つのものが無関係であることを意味します。これは数学に由来しており、その意味は 垂直 . 一般的な用法では、2つの決定が無関係であることや、ある主題が別の主題を考える際に無関係であることを意味することがあります。ここで使用されているように、直交とは、ある概念が他の概念を暗示または排除しないことを意味します。
2つの概念 オブジェクト指向プログラミング と 関数型プログラミング は互いに相容れないものではありません。オブジェクト指向はミュータビリティを意味するものではありません。従来の方法でオブジェクト指向のプログラムに触れた人の多くは、まずC++やJava、C#などの、ミュータビリティが一般的で奨励さえされている言語を使っています(標準ライブラリにはミュータブルなクラスが豊富に用意されています)。したがって、多くの人がオブジェクト指向プログラミングを命令型プログラミングやミュータビリティと結びつけるのは理解できることです。
しかし、オブジェクト指向プログラミングは次のようなトピックを扱っています。
- カプセル化
- ポリモーフィズム
- 抽象化
いずれもミュータビリティを意味するものではなく、また関数型プログラミングを除外するものでもありません。つまり、これらは 直交 であり、異なる概念です。どちらか一方を使うこともできますし、両方を使うこともできます(あるいはどちらも使わないこともできます)。Scala や F# のような言語は、両方のパラダイムを 1 つの言語に統合しようとしています。
<ブロッククオートScalaはマルチパラダイムプログラミング言語であり、以下の機能を統合するように設計されています。 オブジェクト指向プログラミングと関数型プログラミング .
F#は簡潔で表現力があり、効率的な 関数です。 であり オブジェクト指向言語 であり、複雑な問題を解決するために簡単なコードを書くことを支援する.NETのための言語です。
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] mixinとは何か、なぜ有用なのか?
-
[解決済み] インターフェースとベースクラス
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Inversion of Controlとは?
-
[解決済み] リスコフ置換原理の例として、どのようなものがありますか?
-
[解決済み】「結合度が低く、結合度が高い」とはどういう意味ですか?
-
[解決済み] ProxyパターンとDecoratorパターンの違い
-
[解決済み] メソッドチェイニング - なぜ良い習慣なのか、そうでないのか?
-
[解決済み] 実装ではなくインターフェースにプログラムする」とはどういう意味ですか?
-
[解決済み] デリゲートはどこで使うのですか?[クローズド]
-
[解決済み] Mediator Vs Observer オブジェクト指向デザインパターン
-
[解決済み] protected なメンバ変数を使うべきですか?
-
[解決済み] R:スロットとは何ですか?