我正在阅读 an article早些时候,当我从 Alan Kay 中看到以下引述时:
"Lots of so called object oriented languages have setters and when you have an setter on an object you turned it back into a data structure."
文章继续暗示这不是最佳实践,从长远来看可能会损害您开发的应用程序。
我是一名 CompSci 学生,具有 C、Java、PHP、Ruby 等方面的经验...因此我相当熟悉 OOP 作为概念和实践,但绝不是专家。
我想我的问题归结为:
在编写 OO 程序时访问字段值(使用 getter)然后根据修改后的值创建新对象而不是使用 setter 方法简单地调整该字段在语义上是否正确(并且是最佳实践)对象。
或者,如果有一 block 木头,然后我从原来的那 block 木头上雕刻出一些木头,我应该将它建模为质量更小的同一 block 木头,还是完全是一 block 新木头。
使用 setter 似乎更简洁,如果您创建了如此多的对象,垃圾收集将成为一个问题,因此我从理论而非实践的角度来解决这个问题。
预先感谢您的回答!
最佳答案
一个对象必须至少具有以下两种职责之一:行为和知识。行为定义对象如何对其执行上下文中的事件作出 react ,知识定义对象知道什么。
行为被实现为方法,其中方法名称映射到触发 react 的事件。知识作为 getter 实现,返回值映射到被查询的知识。
以这种方式设计和实现的对象很少需要 setter,因为对象状态仅在响应外部事件时发生变化。话虽如此,人们可以将外部事件实现为 setter (例如 car.setSpeed(...)),但通常应该寻找更合适的名称(例如 car.accelerateTo(...) 和 car.decelerateTo(. ..)).
关于java - 设置字段与创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383780/