質問
私は今回何度も聞いており、FPとOOが直交しているという考えを理解し、検証しようとしています。
まず第一に、2つの概念が直交することを意味するのはどういう意味ですか?
FPは、可能な限り不変性と純度を促進します。 OOは、状態と突然変異のために構築されたもののように思えます(命令プログラミングのわずかに組織化されたバージョン?)。そして、私はオブジェクトが不変である可能性があることを理解しています。しかし、OOは私に状態/変化を暗示しているようです。
彼らは反対のようです。それは彼らが直交していることを意味しますか?
Scalaのような言語は、OOとFPの両方を簡単に行うことができますが、これは2つの方法の直交性に影響しますか?
解決
「直交」という用語は、同義語がある数学から来ています:「垂直」。これに関連して、あなたはそれを「2つのことはお互いに何の関係もない」と理解することができます。
人々がFPとOOを比較すると、しばしば2つの別々の軸を混同します。
一方では、機能的なプログラミングと命令的なプログラミングがあります。ジョナスは良いことを与えます 比較 2の。 One-Sentenceバージョンには、「データフローとコントロールフロー」が表示されます。
他の軸はデータ抽象化です。 Haskellのような言語は、抽象データ型を使用して、抽象データに使用します。 SmallTalkはオブジェクトを使用して、そのデータとそのデータの操作を単一のユニットに融合します。ウィリアムクックは私が彼の論文でできるよりもよく説明しています データの抽象化を理解することで、再訪しました.
ほとんどの人がFPとOOが正反対であると考えることになることは完全に理解できます。ほとんどのOO言語は不可欠です。したがって、HaskellとJavaを比較すると、データフロー + ADTとコントロールフロー +オブジェクトがあります。しかし、他の可能性があります! Matthias Felleisenは、彼の講演でFPとOOを幸せに結婚させる方法を説明しています 機能的オブジェクト.
他のヒント
まず第一に、2つの概念が直交することを意味するのはどういう意味ですか?
つまり、2つの概念には対照的なアイデアがないか、互いに互換性がないことを意味します。
FPは、可能な限り不変性と純度を促進します。 OOは、状態と突然変異のために構築されたもののように思えます(命令プログラミングのわずかに組織化されたバージョン?)。そして、私はオブジェクトが不変である可能性があることを理解しています。しかし、OOは私に状態/変化を暗示しているようです。
彼らは反対のようです。それは彼らの直交性にどのように影響しますか?
Scalaのような言語は、OOとFPの両方を簡単に行うことができますが、これは2つの方法の直交性に影響しますか?
OOは、カプセル化、オブジェクト構成、データの抽象化、サブタイピングによる多型、および 必要に応じて制御された突然変異 (OOでも不変性が奨励されています)。 FPは、関数の構成、制御抽象化、および制約された多型(別名パラメトリック多型)に関するものです。したがって、2つのアイデアは矛盾していません。どちらも、さまざまな種類のパワーと抽象化メカニズムを提供します。これらは確かに1つの言語で持つことができます。実際、これは論文です スカラ 建設されました!
彼の中で スカラ実験 Googleで話すMartin Oderskyは、OOとFPの2つの概念が互いに直交していると信じており、Scalaが2つのパラダイムをエレガントにシームレスに統合して、Scalaコミュニティでオブジェクト機能のパラダイムとして一般的に知られている新しいパラダイムをどのように統合するかを非常によく説明しています。 。あなたのために話を見なければなりません。 :-)
直交 大まかに「独立」を意味します。
したがって、FPとOOが直交している場合、オブジェクトを使用するかどうかにかかわらず、不変性を使用することができ、オブジェクトが不変かどうかにかかわらず使用できます。
*私は今回何度も聞いており、FPとOOが直交しているという考えを理解し、検証しようとしています。 *
まず第一に、2つの概念が直交することを意味するのはどういう意味ですか?
Wikipediaの引用:「直交性は、システムのコンポーネントによって生成される技術的効果を変更することで、システムの他のコンポーネントに副作用を作成したり伝播したりすることを保証します。」
簡単に言えば、1つのシステムへの変更がなく、他のシステムの変更に影響を与えないことを意味します。
たとえば、車には直交コンポーネントとコントロールがあります(たとえば、車両の加速は、加速機能に排他的に関与するコンポーネント以外に他に影響しません。たとえば、無線には影響しません(CDの再生に影響するかどうかはわかりませんが、私のものは時々スキップするので))。
FPは、可能な限り不変性と純度を促進します。 OOは、状態と突然変異のために構築されたもののように思えます(命令プログラミングのわずかに組織化されたバージョン?)。そして、私はオブジェクトが不変である可能性があることを理解しています。しかし、OOは私に状態/変化を暗示しているようです。
彼らは反対のようです。それは彼らが直交していることを意味しますか?
ちょっと。問題は、これらの概念のいずれも本当に堅実に定義されていないことです。しかし、はい、あなたはそれの要点を手に入れました。