【问题标题】:Function pointers implication to Object-oriented programming函数指针对面向对象编程的影响
【发布时间】:2018-06-23 08:36:18
【问题描述】:

在他的演讲“编程的未来”中,Robert Martin 提到了the motives for structured, functional and object-oriented paradigms

  • 结构化编程:不要使用无拘无束的goto
  • 函数式编程:不要使用赋值;
  • 面向对象编程:不要使用指向函数的指针。

但他提到的 OOP 背后的动机让我感到困惑。为什么 C# 作为一种面向对象的语言,会有委托(我的理解是函数指针)?

如果 OOP 本质上就是避免使用指向函数的指针,那么它们有什么问题?

【问题讨论】:

  • 一切都是为了避免自己处理裸指针。内部?只有指针和goto。从第一个汇编语言出现之前就一直是这样,并且很可能会进入量子计算机时代。处理裸指针有很多问题。 hte .NET 设计团队希望通过不让您处理它们来避免所有这些。委托只是替代指针的众多事物之一。输出参数是另一个。
  • 好吧。我们可以做任何事情。我们可以在 C# 中使用指针,在 Js 中使用赋值。任何事物。但是我们为什么不想这样做呢?有没有更好的方法?这几个问题是我们应该问自己的。 OOP 不是要避免使用指针,而是要以不需要任何函数指针的方式编写代码......
  • @Fabjan 在阅读了您评论的最后一句话后,我有一个“啊哈”的时刻,把所有东西都装好。很简单,谢谢!

标签: c# oop delegates function-pointers paradigms


【解决方案1】:

我认为这是对面向对象的歪曲,可能只是为了戏剧性的效果。

面向对象最大的实现是:

  • 隐藏数据、提供功能(封装、数据隐藏)
  • 告诉,不要问(消息)
  • 强内聚,弱耦合

这些都没有从技术上明确禁止指向函数的指针。他可能的意思是,OO 中不应该有“静态”函数,因此显然不需要指向“静态”函数的指针。这对我来说听起来很牵强......

总结:我不知道,但听起来不对。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-08
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多