5

オブジェクト指向パラダイムでは、OO 言語を使用して実装を開始する前に、オブジェクト/概念モデルを作成します。

関数型プログラミングのオブジェクト モデルに類似するものはありますか。それは機能モデルと呼ばれますか?または、どちらかの言語で実装する前に、両方のパラダイムで同じ概念モデルを作成します。

機能モデルが存在する場合、機能モデルについて読むことができる記事/本はありますか?

または別の言い方をすれば...関数型プログラミング言語を使用している場合でも、オブジェクトモデルから始めますか?

4

3 に答える 3

6

実際にあります。代数的仕様と呼ばれる抽象データ型に基づく関数型言語の仕様の形式があります。それらの動作は、いくつかの点でオブジェクトの動作と非常に似ていますが、構成は論理的かつ数学的であり、機能的構成のように不変です。

ブエノスアイレス大学のAlgorithmsandData Structuresクラスで使用されている特定の機能仕様言語には、ジェネレーター、オブザーバー、および追加の操作があります。ジェネレーターは、インスタンスであり、データ型の可能な構成でもある式です。たとえば、バイナリツリー(ADT bt)の場合、nullノードとバイナリノードがあります。したがって、ジェネレーターがあります。

-nil
-bin(left:bt, root: a, right:bt)

左がbtのインスタンスである場合、ルートは一般的な値であり、右は別のbtです。したがって、nilはbtの有効な形式ですが、bin(bin(nil、1、nil)、2、nil)も有効であり、値が2のルートノードを持つバイナリツリーを表し、左側の子ノードは値が1で、子の右ノードがnullです。

したがって、ツリー内のノード数を計算する関数の場合、ADTのオブザーバーを定義し、各ジェネレーターにマップする公理のセットを定義します。したがって、たとえば:

numberOfNodes(nil) == 0
numberOfNodes(bin(left,x,right))== 1 + numberOfNodes(left) + numberOfNodes(right)

これには、操作の再帰的定義を使用するという利点があり、構造的帰納法と呼ばれるものを使用して仕様が正しいことを証明できる、より形式的に興味深い特性があります(はい、アルゴリズムが適切な結果を生成することを示します)。

これは、学界以外ではめったに見られないかなり学術的なトピックですが、アルゴリズムやデータ構造についての考え方を変える可能性のあるプログラム設計についての洞察を得る価値があります。適切な参考文献は次のとおりです。

Bernot、G.、Bidoit、M.、およびKnapik、T.1995。観察仕様と区別できない仮定。理論。計算します。科学 139、1-2(1995年3月)、275-314。DOI = http://dx.doi.org/10.1016/0304-3975(94)00017-D

Guttag、JV and Horning、JJ 1993. Larch:正式な仕様のための言語とツール。Springer-Verlag New York、Inc.ソフトウェア開発における抽象化と仕様、Barbara Liskov y John Guttag、MIT Press、1986年。

代数的仕様の基礎1.方程式と初期意味論。H. Ehrig y B. Mahr Springer-Verlag、ベルリン、ハイデルベルク、ニューヨーク、東京、ドイツ、1985年。

対応するリンク: http: //www.cs.st-andrews.ac.uk/~ifs/Resources/Notes/FormalSpec/AlgebraicSpec.pdfhttp: //nms.lcs.mit.edu/larch/pub/larchBook。 ps

それは興味深いトピックの一体です。

于 2008-12-02T05:40:32.673 に答える
1

OO パラダイムと FP パラダイムの両方で、ドメイン モデル (解決する問題) を形成し、ドメイン オブジェクトをミラーリングするオブジェクトをプログラム内に作成します。プログラム オブジェクトがドメイン オブジェクトを反映する方法は、使用しているパラダイムと言語の影響を受けるという点で、いくつかの違いがあります。いくつかの例 (Haskell):

于 2009-01-06T03:14:26.913 に答える
0

フローチャートおよび/またはプロセスモデル/図は、非OOプログラムの機能モデルとして使用できます。しかし、それでもOOモデルのような境界の感覚は得られません。

http://en.wikipedia.org/wiki/Functional_model

于 2008-11-13T20:03:56.120 に答える