差异&编程范式之间的相似之处

时间:2010-03-11 10:46:55

标签: c# oop vb6 paradigms

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

最近我一直对其他编程范例感到好奇,所以我想我会问其他开发者他们对相似性的看法。这些范例之间的差异,特别是OOP?在OOP中,我发现人们非常关注概念之间的关系和逻辑交互。对于其他范例,你必须有哪些思维框架?

3 个答案:

答案 0 :(得分:11)

到目前为止,编程范式的最佳解释可以在Peter van Roy的作品中找到。特别是在书Concepts, Techniques, and Models of Computer Programming 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编辑的计算机音乐新计算范例<一书中。 / p>

另一本演示几种主要编程范例的好书是Structure and Interpretation of Computer Programs 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
    • 基于原型的面向对象:自我
    • 基于类的面向对象Newspeak
      • 基于静态类的面向对象Eiffel
    • 基于多个调度的OO Dylan
    • 功能+面向对象Scala
  • 函数式编程Haskell
    • 纯函数式编程:Haskell
      • 懒惰的纯函数式编程:Haskell
    • 静态函数式编程:Haskell
    • 动态函数式编程Clojure
  • 命令式编程Lua
  • 并发编程:Clojure
    • 消息传递并发编程Erlang
  • 元编程Scheme
  • 面向语言的编程Intentional Domain Workbench

答案 1 :(得分:1)

这是我的看法:

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

答案 2 :(得分:0)

this link试图解释我在过去二十年中使用过的东西。 我之所以提到它是因为它有用,而且我认为它是一种范式,因为要使用它,你需要以特定的方式思考。

您必须考虑的不同方式是,在分析问题时,不是询问有哪些对象以及发生了什么操作,而是从总体要求开始并询问需要说些什么?

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

该链接解释了用于描述动态更改对话框用户界面的特定语言。它的实现取决于特定的控制结构,差异执行。它实现的是源代码减少了一个数量级,编码错误的机会更少。然后可以将这些节省用于使UI更加复杂。

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

我认为函数式编程和OOP的范例最好通过识别它们最佳表达的问题类型来评估。通常这些范式只是变成了乐队,并被吹捧为万灵药,而不是通过他们解决的问题空间对它们进行分类。