1. ホーム
  2. oop

FPとOOは直交するのか?

2023-10-08 06:20:04

質問

FPとOOは直交しているという考えを理解し、検証しようとしているのですが、これは何度も聞いていることです。

まず、2つの概念が直交しているとはどういうことでしょうか?

FPは不変性と純粋性を可能な限り奨励し、OOは状態と変異のために構築されているように見えます。 オブジェクトは不変であることができますが、OOは状態や変化を意味するように思われます。

両者は正反対のように思えます。そのことが直交性にどのような影響を及ぼしているのでしょうか?

Scalaのような言語では、OOとFPの両方を簡単に行うことができますが、これは2つの手法の直交性に影響を与えるのでしょうか?

どのように解決するのですか?

直交性 は、2つのものが無関係であることを意味します。これは数学に由来しており、その意味は 垂直 . 一般的な用法では、2つの決定が無関係であることや、ある主題が別の主題を考える際に無関係であることを意味することがあります。ここで使用されているように、直交とは、ある概念が他の概念を暗示または排除しないことを意味します。

2つの概念 オブジェクト指向プログラミング 関数型プログラミング は互いに相容れないものではありません。オブジェクト指向はミュータビリティを意味するものではありません。従来の方法でオブジェクト指向のプログラムに触れた人の多くは、まずC++やJava、C#などの、ミュータビリティが一般的で奨励さえされている言語を使っています(標準ライブラリにはミュータブルなクラスが豊富に用意されています)。したがって、多くの人がオブジェクト指向プログラミングを命令型プログラミングやミュータビリティと結びつけるのは理解できることです。

しかし、オブジェクト指向プログラミングは次のようなトピックを扱っています。

  • カプセル化
  • ポリモーフィズム
  • 抽象化

いずれもミュータビリティを意味するものではなく、また関数型プログラミングを除外するものでもありません。つまり、これらは 直交 であり、異なる概念です。どちらか一方を使うこともできますし、両方を使うこともできます(あるいはどちらも使わないこともできます)。Scala や F# のような言語は、両方のパラダイムを 1 つの言語に統合しようとしています。

Scalaはマルチパラダイムプログラミング言語であり、以下の機能を統合するように設計されています。 オブジェクト指向プログラミングと関数型プログラミング .

ソース

<ブロッククオート

F#は簡潔で表現力があり、効率的な 関数です。 であり オブジェクト指向言語 であり、複雑な問題を解決するために簡単なコードを書くことを支援する.NETのための言語です。

ソース