6

オブジェクトモデルを機能的なスタイルで実装することは、まったく実用的ですか?

OOPが優れていると思われる問題の1つは、オブジェクトモデルの記述です。

たとえば、HTML DOMは複雑でステートフルな獣であり、UI直接インターフェースし、動的言語からのプログラム可能性を必要とします。OOP機能は多くの点で役立つ傾向があります。

  • メンバーのアクセス制約により、信頼できないコード(javascriptなど)とのインターフェースが安全になります
  • アクセサ関数とプロパティにより、UIへのバインドがはるかに便利になります
  • オブジェクトモデルを常に渡す必要がないため、メソッドが非常に簡単になります。

MVVMを介してモデルを投影している場合、ストーリーのUI側は少し議論の余地があるかもしれませんが、それでも内部で常に状態と格闘しています。

私はこのプロジェクトのためにF#で作業しているので、OOPに簡単に頼ることができますが、実用的でなくなる前にどこまでプッシュできるかについて興味があります。デザインパターンなどはありますか?

4

1 に答える 1

5

これは「正しい」答えを出すのに少し哲学的ですが、大丈夫です。

私の意見では、問題はFPとOOが並置されているとみなすために発生しますが、そうではありません。FPと命令型プログラミングは並置されています。つまり、式を使用するのではなく、ステートメントを使用するのです。

問題の一部は、とにかく私の意見では、OOが明確な定義を欠いていることです。これをサポートするために、「実際には「オブジェクト指向」という用語を作成しました。C++を念頭に置いていなかったと言えます」と言ったアラン・ケイを指していますが、ほとんどの言語はOO、つまりjava / C#と見なされます。 smalltalkよりもC++の後に多くを取ります。

OO C ++ / java / C#スタイルが提供するのは、コードをモデルに編成したり、データを作成したり、プロパティを追加したりするための優れた方法です。これは実質的に機能せず、関数型プログラミングでうまく使用できます。

多くのC++/ java / C#はステートフルである傾向がありますが、そうである必要はありません。javaとC#はどちらも、文字列クラスなどの不変の基本タイプを持っています。本当のJavaとC#では、不変のクラスを簡単に作成することはできませんが、少しの努力でそれを行うことができます。

不変の適切な場所に私たちを導くのはどれですか?私の設計では、通常、すべてを不変にすることから始めます。これにより、修正が容易になるためです。これによりパフォーマンスの問題が発生する場合は、クリティカルパスに可変性を追加し始めます。不変性が機能しない場所の1つは、GUIコントロールです。これには、通常、不変にはあまりにも多くの状態が含まれています。不変の「コンビネータ」アプローチを使用してGUIを構築するのにかなり長い道のりを得ることができると言った後、可変のGUIコントロールによって解釈されます。これは多かれ少なかれWebSharperの人がしていることです:http://www.intellifactory.com/products/wsp/Home.aspx

FP / OOの議論のためのもう一つの素晴らしいリソースは、Brainの「関数型プログラミングはコードの構造にどのように影響しますか?」です。(これはFP / OOについての私の考え方に大きな影響を与えました):http://lorgonblog.wordpress.com/2008/09/22/how-does-functional-programming-affect-the-structure-of-your-code/

于 2011-04-28T11:47:39.757 に答える