首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编程范例之间的区别和相似之处

编程范例之间的区别和相似之处
EN

Stack Overflow用户
提问于 2010-03-11 18:46:55
回答 3查看 4.9K关注 0票数 5

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

最近我对其他编程范例很好奇,所以我想我应该问问其他开发人员对这些范例之间的异同的看法,特别是对于OOP?在OOP中,我发现概念之间的关系和逻辑交互是非常重要的。对于其他范式,你的思维框架是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-12 01:02:35

到目前为止,对编程范式的最好解释是在Peter van Roy的作品中找到的。尤其是在 by Peter Van Roy and Seif Haridi这本书中。(Here's the companion wiki.) CTM使用multi-paradigm Distributed Oz programming language来介绍所有主要的编程范例。

彼得·范·罗伊也制作了this amazing poster that shows the 34 major paradigms and their relations and positions on various axis。这张海报基本上是CTM令人难以置信的压缩版本。对这张海报的更全面的解释包含在文章Programming Paradigms for Dummies: What Every Programmer Should Know中,这篇文章出现在由G.assayag和A.Gerzso编辑的《计算机音乐的新计算范式》一书中的一章中。

另一本演示了几种主要编程范例的好书是 by Harold Abelson and Gerald Jay Sussman。几十年来,这本书一直是麻省理工学院CS101的基础。A course taught by Abelson and Sussman themselves was recorded at a corporate training for Hewlett-Packard in 1986

CTM和SICP之间的主要区别在于,CTM使用支持它们的语言(主要是分布式Oz,但也有其他一些)来演示大多数主要范式。SICP OTOH通过在本地不支持它们的语言(Scheme的子集)中实现它们来演示它们。看到在十几行左右的代码中实现面向对象是非常棒的。

你可以找到video recordings and course materials from the Spring 2005 course on MIT's OpenCourseWare websiteAnother recording of the course from MIT's short-lived ArsDigita University project。SICP也在其他大学教授,实际上是it is being taught at Berkley right now

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

  • 一次只有一种范式,语言中的
  • 会迫使您进入范式

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

下面是我最喜欢的几个:

通用对象:基于类的对象定向: Self

  • class-based
  • object-orientation -orientation:Self
  • class-based
    • static object-orientation:Newspeak - Self object-orientationEiffel

代码语言:javascript
复制
- **multiple dispatch based OO**: [Dylan](http://www.opendylan.org/)
- **functional + object-orientation**: [Scala](http://scala-lang.org/)

  • functional编程:Haskell
    • lazy纯函数式编程:Haskell
      • pure functional programming:Haskell
        • pure functional programming:Haskell functional programming

代码语言:javascript
复制
- **static functional programming**: Haskell
- **dynamic functional programming**: [Clojure](http://clojure.org/)

  • imperative编程Erlang

编程:Clojure

  • message-passing并发编程:Clojure

  • metaprogrammingScheme
  • language-oriented编程接口:Intentional Domain Workbench
票数 12
EN

Stack Overflow用户

发布于 2010-03-11 18:56:37

以下是我的观点:

  • 函数式编程意味着编写接收数据并对其进行操作的函数。通过将functions.
  • Object-oriented编程、封装的数据及其运算符组装到单个组件中,该组件可以很好地映射到心理模型,从而构建大型应用程序。在协作objects.
  • Declarative编程的基础上构建大型应用程序(例如,SQL)将做什么与如何做分离开来。你告诉关系数据库你想要它做什么,而把驱动力留给查询引擎。
票数 1
EN

Stack Overflow用户

发布于 2010-05-20 09:17:26

嗯,this link试图解释我在过去20年里用过的东西。我提到它是因为它被证明是有用的,我认为它是一种范式,因为要使用它,你需要以一种特定的方式思考。

你必须思考的不同方式是,当分析一个问题时,不是问有什么对象和发生了什么动作,而是从总体需求开始,问需要说什么?

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

该链接解释了用于描述动态变化的对话用户界面的特定语言。它的实现依赖于一种特殊的控制结构,即差异执行。它实现的是源代码的数量级减少,编码错误的机会更少。这些节省下来的钱可以用来使用户界面更加复杂。

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

我认为函数式编程和OOP的范型最好的评估方法是确定它们最适合表达的问题类型。通常,这些范例只是成为潮流,被吹捧为万能的,而不是根据它们所解决的问题空间对它们进行分类。

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

https://stackoverflow.com/questions/2424269

复制
相关文章

相似问题

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