gpt4 book ai didi

oop - OOP 和函数式编程的区别(方案)

转载 作者:行者123 更新时间:2023-12-04 16:32:22 25 4
gpt4 key购买 nike

很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center .




10年前关闭。




我正在观看斯坦福大学的视频类(class)/讲座。类(class)是“计算机程序的结构和解释”

在第一堂 OOP 讲座中,讲师 (Brian Harvey) 将 OOP 方法描述为对同一问题给出不同答案的方法,而函数式编程中的函数为特定输入提供特定输出。

以下代码是 OOP 中的一个方法示例,每次调用时都会给出不同的答案:-

(define-class (counter)
instance-vars (count 0))
(method (next)
(set! count (+ count 1))
count) )

现在虽然类(class)是用scheme来说明的,但我对语言本身并没有太多关注,所以无法解释代码;但是一个类似的函数“next”不能和这个“next”函数做同样的事情吗?
在 C 中,我会声明一个全局变量,并且每次在调用 next 时将其加一。我知道 C 是程序性的,但我猜想在 Scheme 中也可以做类似的事情。

最佳答案

好。恕我直言,这些都是对“OOP”和“函数式编程”的略微可疑的定义。这两个术语在行业和学术环境中都被一致使用,而且不一致,更不用说非正式使用了。如果你深入挖掘一下,真正发生的事情是有几个正交概念——在如何处理程序时做出选择的不同轴——正在被混淆,其中一组选择被任意称为“OOP”,尽管没有其他任何东西将它们联系在一起。

这里涉及的两个最大的区别可能是:

  • 身份与值(value) :您是否通过隐式身份(基于内存位置或诸如此类)对事物进行建模并允许它们任意更改?或者您是否根据事物的值(value)对事物进行建模,而没有固有的身份概念?如果你说 x = 4这是否意味着 x是数字 4 的永恒柏拉图理想的别名,或者是 x当前是 4 的事物的名称,但以后可能是其他事物(同时仍然是 x )?
  • 数据与行为 :您是否使用可以检查、操作和转换表示形式的简单数据结构?或者你是否使用抽象的行为来做事,只根据你可以用它做的事情来表示数据,让这些行为抽象相互影响?

  • 大多数标准命令式语言倾向于使用身份和数据——指向 C 的指针 struct s 尽可能纯粹地采用这种方法。 OOP 语言的定义主要是通过选择行为而非数据来定义,通常也倾向于身份,但不一致(参见“不可变”对象的流行)。

    函数式编程通常更倾向于值而不是身份,同时在不同程度上混合数据和行为。

    这里还有很多事情要做,但我认为这是您在这里想知道的关键部分。

    如果有人好奇,我之前已经详细阐述了其中的一些内容: Analyzing some essential concepts of many OOP languages , more on the identity/value issue and also formal vs. informal approaches , a look at the data/behavior distinction in functional programming ,可能其他我想不到。警告,我有点啰嗦,这些不适合胆小的人。 :P

    关于oop - OOP 和函数式编程的区别(方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6720348/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com