主题标题究竟是什么,
在哪种情况下,您更喜欢使用公共函数来更改局部变量,而不仅仅是将该变量定义为公共变量并直接修改它?
答案 0 :(得分:4)
不要直接公开数据成员:使用opaque访问器意味着您可以在以后更改实施而不更改界面。
我应该知道。我不时地采取捷径,并有机会后悔。
答案 1 :(得分:2)
显然,如果你想改变变量以对对象的状态产生一些其他影响(比如重新计算对象的其他一些属性),你必须使用mutator函数。
如果可以将变量设置为将对象置于无效状态的东西,则应该也可以使用mutator函数。这样,如果发生非法事件,您可以抛出异常(或返回错误,或者只是忽略)。这确实可以进行调试。
但是如果某些变量可以用mutator函数修改,而其他变量是公共的,那么程序员需要跟踪哪个是哪个变量。这是浪费时间和精力,因此在某些情况下,最简单的方法就是使用mutator函数。
答案 2 :(得分:1)
如果你纯粹用服务来看待一个对象,你会发现暴露一个变量并不是公开这些服务的好方法。
API必须反映对象的全部内容(为了实现高凝聚力),如果你定义了一个setValue(...),那就不是因为你需要一种方法 - 今天 - - 更改变量,但因为对象公开此服务是有意义的。
所以:
不要为您编写的每个类的每个成员提供访问器或更改器功能。如果accessors / mutator方法是类接口(API)的合理且有用的部分,则仅提供访问器/ mutator函数。
不要将这些方法视为访问者或变异者。相反,将它们视为访问或改变对象的某个抽象属性的方法,这些属性碰巧由单个成员今天表示,但明天可能会以更复杂的方式计算。
答案 3 :(得分:1)
您应该提及您正在处理的语言,因为这会影响答案。
您的第一个想法应该是关于您班级的API。如果你想保持那个API稳定(你应该!),那么考虑一下如何将今天的简单变量改成一个完整的方法。
在许多语言中,您无法在不更改调用代码的情况下将变量更改为方法。 C,C ++和Java属于这一类。切勿在这些语言中使用公共变量,因为以后不会有任何摆动空间。
在Python中,您可以在不更改调用者的情况下将变量更改为属性,因此您不必担心:使用公共变量。
C#我相信有一些属性可以让你透明地将变量更改为方法,但我不确定。
答案 4 :(得分:0)
如果你想改变一个类中的变量,你最好通过属性来做。
在外部修改变量是不好的做法。
想想未来的发展。您可以在不更改整个程序的情况下在属性后面添加一些逻辑。