0

嗨,为基本问题道歉,我确定我之前已经被告知答案,我花了一些时间搜索但找不到一个好的答案(可能是因为它很难作为搜索查询来表达),我已经完成了之前有一点 OO 编程,但最近我做了很多程序性的东西,所以这似乎让我的想法蒙上了阴影。

我有一个必须处理字符串的程序,该程序的一部分涉及清理字符串,所以我有这个方法:

private void sanitizeString() {
    removeEscape();
    removePunctuation();
    removeCaps();
}

并且在类的前面声明了变量

String x = "... some string ..."

在程序中,您显然会将所有函数传递他们需要处理的字符串,我的问题是在 OO 中是否可以在类的顶部声明这个字符串,然后执行类似的操作

private void removeCaps() {
    x = x.toLowerCase();
}

或者应该是

private String removeCaps(String y) {
    y = y.toLowerCase();
    return y;
} 

我认为这应该是第一种方式,我知道这行得通,但我正在做一些必须证明良好 OO 的事情,所以我只想检查我的基本假设是否正确。

谢谢

4

3 回答 3

1

你在这里有一个权衡:

  1. 将变量声明为类变量意味着您必须为要清理的每个字符串创建一个新对象。

  2. 将 String 变量传递给每个方法意味着您可以重用同一个对象来清理多个字符串。

您必须权衡每种方法的优缺点,以决定哪种方法最适合您的特定情况。

于 2012-11-30T21:23:07.080 回答
0

由于x被声明为类变量,这个很好:

  private void removeCaps() {
        x = x.toLowerCase();
  }

因为类变量可以在类方法中访问,并且您不需要将类变量作为参数传递给相同的类方法

相同的类变量只能以这种方式访问​​。非常简单的示例可能是 POJO 类,您可以在其中声明类变量并通过 getter/setter 方法公开它们。你不需要将类变量传递给这些方法,有时你不能(例如在 getter 方法中)。

在方法中添加一些关于类变量与局部变量的想法。

  1. 如果需要一个理论上与类定义相关的变量,则该变量应定义为类变量。例如employeeId、employeeName.. 员工类中的变量应该定义为Employee 类变量。

  2. 如果存在仅对类方法本地的变量需求,并且在方法/类之外的任何地方都不需要,则应将其定义为方法内部的局部变量。

  3. 如果您正在定义一些实用程序方法来使用某些变量进行响应,那么这些变量应该作为参数传递给 util 方法。

回到你的问题:

如果您要定义一个完整的类,例如Sanitising它有几个围绕字符串变量的方法,例如字符串类本身,那么最好将您的字符串定义为类变量并使用类变量编写方法。

但是,如果您要定义Sanitising 为 util/helper 类,那么最好将字符串作为方法参数传递,因为您通常不希望您的 util 方法是有状态的(与类实例相关联)。

于 2012-11-30T21:18:20.177 回答
0

为了展示良好的 OO,您绝对应该使用

private String removeCaps(String y) {
    return y.toLowerCase();
} 

您可以将您的对象,在这种情况下,您的全局字段x中的字符串作为参数传递给方法。然后字符串在本地字段中y并返回修改后的版本。

于 2012-11-30T21:20:49.940 回答