这个问题在这里已经有答案了:

过去 4 年我一直从事开发人员工作,之前的 4 年是在大学学习软件开发。在我从事这个行业的 4 年里,我用 VB6 做了一些工作(这是一个笑话),但大部分都是用 C#/ASP.NET 完成的。在此期间,我已经从“对象感知”过程范例转向面向对象范例。

最近我对其他编程范式感到好奇,所以我想我应该向其他开发人员询问他们对这些范式之间的异同的看法,特别是 OOP?在面向对象编程中,我发现非常关注概念之间的关系和逻辑交互。对于其他范式,你必须采用什么思维框架?

有帮助吗?

解决方案

迄今为止,对编程范式的最佳解释可以在 Peter van Roy 的著作中找到。尤其是书中 计算机编程的概念、技术和模型 作者:彼得·范·罗伊和赛义夫·哈里迪. (这是配套的 wiki。) CTM 使用 多范式分布式 Oz 编程语言 介绍所有主要的编程范例。

彼得·范·罗伊还制作了 这张令人惊叹的海报展示了 34 个主要范式及其在各个轴上的关系和位置. 。这张海报基本上是 CTM 的一个令人难以置信的压缩版本。文章中包含对该海报的更全面的解释 傻瓜编程范式:每个程序员都应该知道什么 作为书中的一个章节出现 计算机音乐的新计算范式, ,由 G 编辑。阿萨亚格和A.格兹索。

其他 演示了几种主要编程范例的好书是 计算机程序的结构和解释 作者:哈罗德·阿贝尔森和杰拉尔德·杰·苏斯曼. 。几十年来,本书一直是 MIT CS101 的基础。 Abelson 和 Sussman 自己讲授的课程在 1986 年惠普公司培训中录制.

CTM 和 SICP 之间的主要区别在于,CTM 使用支持它们的语言(主要是 Distributed Oz,但也有一些其他语言)演示了大多数主要范例。SICP OTOH 通过以下方式演示了它们 实施 他们用一种语言 不是 原生支持它们(Scheme 的子集)。看到用十几行代码实现面向对象真是太棒了。

你可以找到 麻省理工学院 OpenCourseWare 网站上 2005 年春季课程的视频录像和课程材料. 麻省理工学院短暂的 ArsDigita 大学项目的另一段课程录音. 。事实上,其他大学也教授过 SICP 现在伯克利正在教授它.

就我个人而言,我自己的经验是 真的 理解编程范式是唯一可能的

  • 一次一种范式
  • 在语言中 力量 你进入范式

理想情况下,您将使用一种将范式发挥到极致的语言。在多范式语言中,很容易“欺骗”并退回到您更熟悉的范式。并且只有在像Scheme这样专门为这种编程设计的语言中才真正可能使用范式作为库。例如,学习 Java 中的惰性函数式编程并不是一个好主意,尽管有相关的库。

这是我最喜欢的一些:

  • 一般面向对象: 自己
    • 基于原型的面向对象:自己
    • 基于类的面向对象: 新话
    • 基于多重调度的面向对象: 迪伦
    • 函数式+面向对象: 斯卡拉
  • 函数式编程: 哈斯克尔
    • 纯函数式编程:哈斯克尔
      • 惰性纯函数式编程:哈斯克尔
    • 静态函数式编程:哈斯克尔
    • 动态函数式编程: 克洛尤尔
  • 命令式编程: 卢阿
  • 并发编程:克洛尤尔
  • 元编程: 方案
  • 面向语言的编程: 意向域工作台

其他提示

这是我的看法:

  • 函数式编程意味着编写接收数据并对其进行操作的函数。您可以通过组装函数来构建大型应用程序。
  • 面向对象编程将数据及其运算符封装到一个组件中,该组件可以很好地映射到心智模型上。您可以通过协作对象构建大型应用程序。
  • 声明式编程(例如 SQL)将所做的事情与完成的方式分开。您告诉关系数据库您希望它做什么,并将驱动权留给查询引擎。

出色地 这个链接 试图解释我在过去二十年中使用过的一些东西。我提到它是因为它被证明是有用的,并且我认为它可以作为一个范例,因为要使用它,你需要以特定的方式思考。

你必须思考的不同方式是,在分析问题时,你不是问存在什么对象以及发生什么操作,而是从整体需求开始并问 需要说什么?

由此,您选择或设计一种特定于领域的语言(DSL),并用该语言陈述您的问题。

该链接解释了一种用于描述动态变化的对话框用户界面的特定语言。它的实现取决于特定的控制结构,即差分执行。它所实现的是源代码数量级的减少,编码错误的可能性也更少。这些节省下来的钱可以用来让用户界面变得更加复杂。

对于其他类型的问题,其他控制结构也是合适的,但通过精心选择的 DSL 工作的概念是常见的方法,使源代码更小、更容易修改、更不容易出错。

我认为函数式编程和面向对象编程的范例最好通过确定它们最能表达的问题类型来评估。通常这些范式只是成为潮流并被吹捧为包治百病的灵丹妙药,而不是根据它们解决的问题空间对它们进行分类。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top