Getter-Setter和私有变量

8 浏览
0 Comments

Getter-Setter和私有变量

如果我通过getter返回的引用来改变私有变量的值,那么这不是绕过了setter方法吗?这不是违背了getter-setter和私有变量的目的吗?

0
0 Comments

Getter-Setter and private variables问题产生的原因是为了保护对象的封装性和数据的安全性。在编程中,我们通常会使用private关键字将变量声明为私有,在类的外部不能直接访问这些变量。为了让外部代码能够访问和修改这些私有变量,我们通常会提供公共的getter和setter方法。

然而,有时候我们希望只允许外部代码访问变量的一部分,而不是全部。在这种情况下,直接提供一个通用的getter和setter方法就会破坏对象的封装性,因为外部代码可以通过setter方法修改对象的任意属性,而不受限制。

为了解决这个问题,我们可以根据需要提供特定的getter和setter方法。例如,假设我们有一个包含X和Y坐标的Dimension对象,我们可以只提供getX和getY方法来获取这两个坐标的值,而不提供通用的getter和setter方法。这样,外部代码就只能获取坐标的值,而不能修改坐标的值。

下面是一个示例代码:

public int getDimensionX()
{
    return cannotBeChanged.getX();
}
public int getDimensionY()
{
    return cannotBeChanged.getY();
}

通过这种方式,我们可以控制外部代码对私有变量的访问,提高对象的封装性和数据的安全性。这样,我们可以更好地保护对象的状态,避免不必要的错误和风险。

0
0 Comments

Getter-Setter和私有变量是程序中常见的一种设计模式。它们的目的是允许外部实体访问程序中的安全变量。下面将讨论为什么需要这种设计模式以及解决方法。

首先,程序员需要为外部实体提供一种访问受保护变量的方式。为了保护程序的安全性,我们不应该直接提供setter方法,只提供getter方法。只有那些在程序运行过程中可能会发生变化的属性才应该有setter方法。

其次,setter方法可以用来对某些属性施加限制。例如,可以对属性值进行无效值检查、预填充、逻辑分析、填充另一个依赖属性、防御性复制等等。

此外,getter和setter方法有助于维护系统的软件熵。软件熵是指系统中的混乱程度。如果我们使用getter和setter来访问属性,可以更好地控制系统的混乱程度。

然而,不应该在不需要的地方创建getter和setter方法,因为这会导致模板代码的产生。模板代码是指那些重复、冗余的代码。只有在将来可能需要对程序进行扩展时,才应该使用getter和setter方法。例如,如果我们要升级日志记录库,只需更改getter和setter方法的实现即可。

总之,Getter-Setter和私有变量是一种常见的设计模式,它们为外部实体提供了一种访问受保护变量的方式。通过只提供getter方法和有选择地提供setter方法,我们可以更好地保护程序的安全性。此外,getter和setter方法还有助于维护系统的软件熵,并为将来对程序进行扩展提供了方便。然而,我们应该避免在不需要的地方创建getter和setter方法,以减少模板代码的产生。

0
0 Comments

Getter-Setter and private variables是一个在编程中经常出现的问题。它的出现原因是因为在代码中使用了public fields或者不必要的getters和setters。这些做法可能会导致一些问题的出现。解决这个问题的方法是只在真正需要的地方使用getters和setters,并且让类型暴露更大的行为,而不仅仅是作为状态的存储库。

在《Clean Code》这本书中,对于getters和setters有以下几个结论:

1. 使用public fields是非常不好的。

2. 在不需要的地方使用getters和setters也是有问题的。

3. 好的做法是只在真正需要的地方使用getters和setters,让类型暴露更大的行为。

这里的"evil"一词是指在默认情况下使用这些做法可能会导致问题的发生,而并非真正的邪恶。在编程中没有什么是邪恶的(除了在C语言中可能从你的鼻子里飞出的鼻妖;))。然而,如果默认情况下使用这些做法,可能会导致一些问题的出现。

0