【问题标题】:How can I write classes that don't rely on "global" variables?如何编写不依赖“全局”变量的类?
【发布时间】:2010-05-24 15:04:51
【问题描述】:

当我在大学上第一门编程课程时,我们被告知全局变量是邪恶的,应该不惜一切代价避免使用(因为您可以快速开发出令人困惑且无法维护的代码)。第二年,我们学习了面向对象编程,以及如何使用类创建模块化代码。

我发现每当我使用 OOP 时,我都会使用我的类的私有变量作为全局变量,,它们可以(并且正在)被类中的任何函数读取和修改。这并不适合我,因为它似乎引入了全局变量在 C 等语言中存在的相同问题。

所以我想我的问题是,如何停止使用“全局”变量编写类?假装我在用函数式语言写作会更有意义吗?我的意思是让所有函数都接受参数和返回值,而不是直接修改类变量。如果我需要设置任何字段,我可以只获取函数的输出并分配它,而不是让函数直接执行。这似乎可以使代码更易于维护,至少对于较大的类。常见的做法是什么?

【问题讨论】:

  • "让所有函数都接受参数和返回值,而不是直接修改类变量。如果我需要设置任何字段,我可以只获取函数的输出并分配它,而不是让函数执行直接吧。”这就是我被教导如何有效地编码,作为可重用性、可读性(假设您的函数名称反映函数的功能)、良好结构和易于修改的来源。

标签: oop global-variables


【解决方案1】:

我发现每当我使用 OOP 时, 我使用我的类的私有变量作为 全局变量,即它们可以是 (并且)被任何人阅读和修改 类中的函数。

这是完全可以接受的。

变量被限制在你的类中,所以它们不是“全局的”。

Encapsulation

【讨论】:

  • 但是如果你的类足够大,那和一个大的,比如 C 程序随意改变全局变量有什么区别呢?
  • @Joel - 这就是问题所在,如果您的课程那么大,那么应用程序的总体设计可能存在问题。
  • @Joel:没有太大区别,也不是很OO =D。
  • @ho:绝对是设计问题。
【解决方案2】:

我同意类成员变量有时在某些方面感觉像全局变量。我发现重要的是保持类小,然后每个变量只能从有限数量的地方访问。如果您只有几个大类,则成员变量和全局变量之间的差异有时会受到限制。

传递过多的参数有时也是一个问题,如果您迫切希望避免使用所有成员变量,您很容易以过多的参数结束代码,从而使代码难以遵循。

【讨论】:

    【解决方案3】:

    类变量不是全局变量,它们是类的每个实例的本地变量。这是 OOP 的强大概念之一,并且是完全可以接受的(并且是正确的方法[假设您的类每个都处理一件逻辑事情,请参阅:封装])。

    【讨论】:

      【解决方案4】:

      如果您的成员变量在整个应用程序中都可以访问,那么我认为您为 OOP 构建的代码不正确。将代码分成更多、更小的类,每个类都有明确定义的目的。这样一来,每个私有成员变量的范围现在都被限制在程序中需要它的部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-20
        • 1970-01-01
        • 1970-01-01
        • 2016-04-24
        • 2020-07-29
        • 2021-02-26
        • 1970-01-01
        相关资源
        最近更新 更多