存取器和突变体方法

Accessor and Mutator Methods

本文关键字:方法 突变 存取      更新时间:2023-10-16

可能的重复:
为什么使用getter和setter?

在我看来,编写访问器和赋值器方法是一大麻烦,尤其是在处理非常简单的属性时。我为什么要麻烦使用它们?

答案主要取决于您编写代码的目的以及如果单独工作,您对自己的信任程度:

  • 当您与人员合作时,或者当您想强制执行编译时检查以确保您没有在类外使用它们时,保持变量私有是有用的
  • 如果你有副作用,setter很有用
  • 如果您有副作用或希望保持变量只读,getter非常有用
  • 有或没有getter和setter是你的选择,如果其他人要使用你的类,那么封装可能是一件好事,因为信息隐藏原则
  • 如果你是唯一一个只做你想做的事情的人,如果你真的觉得有必要的话,你会及时添加它们
  • 既然我们谈论的是C++,不要忘记friend指令,它允许细粒度封装,而不需要设置setter和getter(即使它鼓励耦合,所以这里有两种不同的思想流派)

我不能谈论C++语法负担,但在一般面向对象的术语中,你应该提供getter和setter,因为其他类不知道你如何存储内部状态,包括哪些属性是直接存储的,哪些是基于其他状态计算的,哪些会进一步传递给其他对象。与更广泛的世界签订一份关于类将如何存储状态的合同公告,这将限制你未来可以进行的调整,通常会阻碍优化,并随着你解决的问题变得更加微妙而破坏你的代码。

  1. 它们使人们能够控制访问。你可以只读,读/写,甚至只写
  2. 它使人们能够在必要时更改底层实现。考虑计算多辆车的平均速度。您可以通过存储速度列表来实现这一点,然后在需要时计算平均值保持一个运行总数和数字
  3. 所有对类的访问都是通过方法进行的。更容易发现错误
  4. 这不是一个很大的努力。可以使用脚本来创建它们