首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >功能类型的对象模型?

功能类型的对象模型?
EN

Stack Overflow用户
提问于 2011-04-28 08:33:38
回答 1查看 649关注 0票数 6

用函数式实现对象模型有实际意义吗?

OOP似乎擅长的一个问题是描述对象模型。

例如,HTML是一个复杂的、有状态的庞然大物,它直接与UI接口,并且需要动态语言的可编程性。OOP特性在很多方面都很有用:

  • 成员访问约束使得与不可信代码(例如javascript)的接口、安全的

  • 访问器函数和属性使绑定到UI更加方便,而不必始终传递对象模型,从而使方法更加简单。

如果您要通过MVVM投射模型,则故事中的UI方面可能会有一点争议,但您仍然在不断地与内部状态进行斗争。

我在F#中为这个项目工作,所以我可以很容易地使用OOP,但我很好奇,在它变得不切实际之前,我能把它推到多远。有没有设计模式什么的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-28 11:47:39

这是一个“正确”的答案有点哲学,但好的,我会咬。

在我看来,问题的出现是因为您认为FP和OO是并列的,但它们并不是并列的。FP和命令式编程是并列的,即使用表达式和使用语句。

部分问题是,OO缺乏一个明确的定义,我认为无论如何。为了支持这一点,我要指出的是,Alan说“实际上是我编造了”面向对象“这个术语,我可以告诉你,我并没有想到C++。”然而,我们认为大多数我们认为面向对象的语言,即java/C#,在C++之后比smalltalk更多。

OO ++/java/C#风格为我们提供了一种很好的方法,可以将我们的代码组织成模型,创建包含添加属性的数据等等。

正如您所指出的,许多C++/ java /C#往往是有状态的,但它们并不一定是有状态的,java和C#都有基本类型,比如它们的字符串类是不可变的。的确,java和C#并不容易创建不可变的类,但只要稍加努力,就可以做到这一点。

那我们到哪里去了不可变的专用呢?在我的设计中,通常从使一切都不可变开始,因为这样可以使事情更容易纠正,而且如果我看到这会导致性能问题,我就开始在关键路径上添加一些可更改性。永久不变永远不会起作用的地方是GUI控件,它通常包含太多的不可变状态。尽管如此,使用不可变的“combinator”方法可以很长的时间来构建GUI,然后由可变的gui控件来解释。这或多或少就是WebSharper这个家伙所做的:http://www.intellifactory.com/products/wsp/Home.aspx

FP/OO辩论的另一个重要资源是“函数式编程如何影响代码的结构?”(这极大地影响了我对FP/OO的思考):http://lorgonblog.wordpress.com/2008/09/22/how-does-functional-programming-affect-the-structure-of-your-code/

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5815836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档