15

最近Channel9のGoingDeep番組を見た場合、非常に頻繁に言及されるトピックの1つは、プログラミングにおける数学的双対性です。TomasPには、オブジェクト指向プログラミングの二重性に関する優れたブログ投稿があります。

これは、Microsoft Researchが、オブザーバーデザインパターンが実際にはイテレーターパターンの数学的デュアルであることを発見してからです。それ以来、彼らはさまざまな方法で二重性の概念を使用してきました。

私の質問は:

プログラミングにはどのような数学的二重性がありますか?

オブジェクト指向プログラミングは良いスタートです。主なGoFデザインパターンは、デコレータ、ステート、イテレータ、ファサード、ストラテジー、プロキシ、ファクトリメソッド、アダプタ、オブザーバ、テンプレートメソッド、コンポジット、シングルトン、アブストラクトファクトリおよびコマンドです。これが良いオブジェクトグラフポスターです。

4

4 に答える 4

2

プログラミングにおける主な二重性は、コードとデータの二重性であり、Lisp で最も明確に示されていますが、イントロスペクション機能を提供するほとんどの現代言語でも明らかです。

于 2010-08-04T23:43:57.967 に答える
1

オブザーバー/イテレーターの二重性は、継承のより一般的な OO パラダイムと委任と集約の代替パラダイムの現れで​​あると主張することができます。前者では、より専門化されたオブジェクトは基本機能を使用して (上向き) 一般的な機能を継承し、後者では、より一般化されたオブジェクトは委任を使用してより専門的な機能にアクセスします (下向き/外向き) - oo という事実について多くの学術的な議論があります。デザインはどちらの形式でも表現できます。形式間の差異は(合理的に)厳密で定義されているため、二重に分類できると思います

詳細については、オーランド条約 2を参照してください。

于 2010-08-05T12:38:37.513 に答える
1

OO よりも FP の方が多いため、それが完全にあなたが探していたものかどうかはわかりませんが、もちろん、プログラムを証明と、型を式と「同一視」するCurry-Howard Correspondance (別名 Curry-Howard Isomorphism) があります。

于 2010-08-04T21:24:48.297 に答える
1

私は、オブジェクトとクロージャー/匿名関数を双対と考えています。

オブジェクトはデータの集まりであり、一連のルーチンがそれに「接続」されています (つまり、そのメソッド)。

関数型プログラミングの意味でのクロージャは、関数への (呼び出し可能な) 参照であり、一連のデータが (バインドされた自由変数の形式で) 添付されています。

于 2010-08-05T13:29:23.003 に答える