Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在OOP中使用setter的最佳方法_Oop_Coding Style_Setter - Fatal编程技术网

在OOP中使用setter的最佳方法

在OOP中使用setter的最佳方法,oop,coding-style,setter,Oop,Coding Style,Setter,假设我有一个类,每当我设置某些属性bla,foo(可以在外部和内部设置)时,我想调用该类的另一个方法,让我们调用它onChangeFunction() 当直接设置内部值时,简单地调用onChangeFunction()是否是一种好方法,例如 function someFunction() // Some Calculations here ... this.bla = some_value; this.onChangeFunction() end 或者最好也只使用内部setter方

假设我有一个类,每当我设置某些属性
bla
foo
(可以在外部和内部设置)时,我想调用该类的另一个方法,让我们调用它
onChangeFunction()

当直接设置内部值时,简单地调用
onChangeFunction()
是否是一种好方法,例如

function someFunction()
  // Some Calculations here ...
  this.bla = some_value;
  this.onChangeFunction()
end
或者最好也只使用内部setter方法设置这些变量
bla
foo
,因为它会触发某个动作,因此它将是一个更清晰的代码

我甚至更进一步:假设我不需要一个可以从外部调用的外部setter(访问类型=
public
),发明一个
private
setter来执行相同的方法,并且只因为触发了set操作而使用setter,这是否仍然是件好事? 编辑:我的意思是:即使我没有一个公共setter(因为不应该有一个公共访问权限来设置变量,因为它只是一个内部变量),拥有一个私有的setter(仅仅因为触发的动作)是否仍然是好的


提前谢谢

我认为从长远来看,总是使用setter,并从setter内部调用
onChangeFunction()
是不容易出错的

您不需要指定您想要的编程语言,但有些语言允许您定义一个“属性”,该属性看起来像数据成员,但在尝试更改时总是调用函数。例如,请参见Python中的


至于你的第二个问题,我认为拥有一个
私人设置者没有什么错。

谢谢你的快速回复。是的,我也认为它不太容易出错,我只是想知道,如果使用内部例程中的setter而不是直接访问值,是否会有点过于复杂。我现在想到的语言是MATLAB,但这是一个相当普遍的问题。但是谢谢你的提示,我不知道这样的事情存在。关于我的第二个问题:好吧,我只是想知道这是否是一种常见的做法,因为到目前为止,我认为
getters setters
是一个让一些私人VAR“外部”可以访问的概念。@colheath:我们正在讨论使用两行setter,并用一行替换每个呼叫站点的两行代码。老实说,我不会称之为“过度复杂”。@colheath:我已经更新了答案以解决编辑问题。但是,知道这一点可能需要几分钟才能看到我所做的更改。简而言之:在我看来,拥有一个
private
setter没有什么错。哈哈,是的,谢谢,你比我快。我也编辑了我的文章来解决你的编辑问题,但你可能还是读了那篇老文章,因为我速度不够快:)编辑:哦,很酷,MATLAB还提供了
属性访问方法的功能
,如果有人对它感兴趣,请看这里: