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

Dav*_*Dev 5 c# oop vb6 paradigms

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

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

Jör*_*tag 11

到目前为止,编程范式的最佳解释可以在Peter van Roy的作品中找到.特别是在Peter Van Roy和Seif Haridi 的"计算机编程概念,技术和模型 "一书中.(这是随附的wiki.)CTM使用多范式的Distributed Oz编程语言来介绍所有主要的编程范例.

彼得范罗伊也制作了这张惊人的海报,展示了34种主要范例及其在不同轴上的关系和位置.这张海报基本上是一个令人难以置信的压缩版CTM.有关该海报的更全面的解释载于" 傻瓜编程范例:每个程序员应该知道的内容"一文,该文章出现在G. Assayag和A. Gerzso编辑的" 计算机音乐新计算范例 "一书中.

另一本展示几种主要编程范例的好书是Harold Abelson和Gerald Jay Sussman 的计算机程序结构和解释.几十年来,这本书是麻省理工学院CS101的基础.Abelson和Sussman自己教授的课程是在1986年为惠普公司培训时录制的.

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

您可以在麻省理工学院的OpenCourseWare网站上找到2005年春季课程的录像和课程资料.麻省理工学院短期ArsDigita大学项目的另一个课程录音.SICP也在其他大学教过,实际上它正在伯克利教授.

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

  • 一次一个范式
  • 用语言强迫你进入范式

理想情况下,你会使用一种将范式推向极致的语言.在多范式语言中,很容易"欺骗"并回归到您更熟悉的范例.并且使用范例作为库只能在诸如Scheme之类的语言中实现,这些语言是专门为这种编程设计的.例如,在Java中学习惰性函数式编程并不是一个好主意,尽管有这样的库.

这是我最喜欢的一些:

  • 一般的面向对象:自我
    • 基于原型的面向对象:自我
    • 基于类的面向对象:Newspeak
      • 基于静态类的面向对象:Eiffel
    • 基于多个调度的OO:Dylan
    • 功能+面向对象:Scala
  • 函数式编程:Haskell
    • 纯函数式编程:Haskell
      • 懒惰的纯函数式编程:Haskell
    • 静态函数式编程:Haskell
    • 动态函数式编程:Clojure
  • 命令式编程:Lua
  • 并发编程:Clojure
    • 消息传递并发编程:Erlang
  • 元编程:方案
  • 面向语言的编程:Intentional Domain Workbench