过去4年我一直在做开发人员,在大学学习软件开发之前的4年。在我4年的行业中,我已经在VB6中做了一些工作(这是一个笑话),但大多数都是在C#/ ASP.NET中。在此期间,我已经从“对象感知”程序范式转变为面向对象范式。
最近我一直对其他编程范例感到好奇,所以我想我会问其他开发者他们对相似性的看法。这些范例之间的差异,特别是OOP?在OOP中,我发现人们非常关注概念之间的关系和逻辑交互。对于其他范例,你必须有哪些思维框架?
答案 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 website。 Another recording of the course from MIT's short-lived ArsDigita University project。事实上,其他大学也教过SICP it is being taught at Berkley right now。
就个人而言,我自己的经验是真的只能理解编程范式
理想情况下,你会使用一种将范式推向极致的语言。在多范式语言中,很容易“欺骗”并回归到您更熟悉的范例。并且使用范例作为库只能在诸如Scheme之类的语言中实现,这些语言是专门为这种编程设计的。例如,在Java中学习惰性函数式编程并不是一个好主意,尽管有一些库。
以下是我的一些最爱:
答案 1 :(得分:1)
这是我的看法:
答案 2 :(得分:0)
嗯this link试图解释我在过去二十年中使用过的东西。 我之所以提到它是因为它有用,而且我认为它是一种范式,因为要使用它,你需要以特定的方式思考。
您必须考虑的不同方式是,在分析问题时,不是询问有哪些对象以及发生了什么操作,而是从总体要求开始并询问需要说些什么?
由此,您可以选择或设计特定于域的语言(DSL),并用该语言陈述您的问题。
该链接解释了用于描述动态更改对话框用户界面的特定语言。它的实现取决于特定的控制结构,差异执行。它实现的是源代码减少了一个数量级,编码错误的机会更少。然后可以将这些节省用于使UI更加复杂。
对于其他类型的问题,其他控制结构是合适的,但是通过精心选择的DSL工作,使源代码更小,更容易修改,更不容易出错的概念是常见的方法。
我认为函数式编程和OOP的范例最好通过识别它们最佳表达的问题类型来评估。通常这些范式只是变成了乐队,并被吹捧为万灵药,而不是通过他们解决的问题空间对它们进行分类。