有什么像功能模型吗?

Sta*_*low 5 modeling functional-programming

在面向对象的范例中,我将在使用OO语言开始实现它之前创建一个对象/概念模型.

在函数式编程中是否有与对象模型平行的东西.它被称为功能模型吗?或者我们在范例中创建相同的概念模型,然后在其中一种语言中实现它.

有文章/书籍,我可以阅读有关功能模型的内容吗?

或以不同的方式...即使我们使用函数式编程语言,我们会从对象模型开始吗?

Dai*_*man 6

实际上有.有一种基于抽象数据类型的函数式语言规范形式,称为代数规范.它们的行为在某些方面与对象的行为非常相似,但是构造是逻辑和数学的,并且像函数构造一样是不可变的.

在布宜诺斯艾利斯大学的算法和数据结构课程中使用的特定功能规范语言具有生成器,观察器和附加操作.生成器是一个表达式,它既是实例又是数据类型的可能组合.例如,对于二叉树(ADT bt),我们有空节点和二进制节点.所以我们有发电机:

-nil
-bin(left:bt, root: a, right:bt)
Run Code Online (Sandbox Code Playgroud)

左边是bt的实例,root是泛型值,右边是另一个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)
Run Code Online (Sandbox Code Playgroud)

这具有使用递归操作定义的优点,并且具有更多,正式有趣的属性,您可以使用称为结构归纳的东西来证明您的规范是正确的(是的,您证明您的算法将产生正确的结果).

这是一个在学术界很少见到的相当学术性的话题,但值得深入了解程序设计可能会改变您对算法和数据结构的看法.适当的参考书目包括:

Bernot,G.,Bidoit,M.和Knapik,T.1995.观察规范和不可区分性假设.理论值.COMPUT.科学.139,1-2(1995年3月),275-314.DOI = http://dx.doi.org/10.1016/0304-3975(94)00017-D

Guttag,JV和Horning,JJ 1993.落叶松:正式规范的语言和工具.Springer-Verlag New York,Inc.软件开发中的抽象和规范,Barbara Liskov和John Guttag,麻省理工学院出版社,1986年.

代数规范的基本原理1.方程和初始语义.H. Ehrig y B. Mahr Springer-Verlag,柏林,海德堡,纽约,东京,德国,1985年.

使用相应的链接:http : //www.cs.st-andrews.ac.uk/~ifs/Resources/Notes/FormalSpec/AlgebraicSpec.pdf http://nms.lcs.mit.edu/larch/pub/larchBook. PS

这是一个有趣的话题.


Roh*_*hit 0

流程图和/或过程模型/图可以用作非面向对象程序的功能模型。但它仍然没有给出类似于 OO 模型的边界感。

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