java - 设置字段与创建新对象

标签 java oop

我正在阅读 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/

相关文章:

java - 序列化包含 List 字段的对象

php - 通过类递归进行函数调用?

c++ - 我可以覆盖 C++ 中的运算符吗?

c++ - 如何在这种 C++ 设计场景中避免胖/污染接口(interface) - OOPS?

php - 将数组作为类构造函数的函数参数传递

java - 为什么这个java程序不能运行?

javascript - 使用 JavascriptExecutor selenium 创建一个带有链接作为背景的图像

java - 如何找到 int[] 中的第 K 个最大差异?

java - 设置 JPanel 的大小不依赖于 JFrame 的大小

c++ - 观察者模式 - 进一步的考虑和通用的 C++ 实现