我有一项 Java 作业,其中我的教授要求我使用 LeJOS NXT 来制作一个模拟某种动物行为的机器人。我选择开发一条龙。到目前为止我提出的所有可能的行为是:
- 如果距离障碍物太近,请转身。
- 电池电量低时进入休眠状态。
- 如果接触到则插入物体。
- 如果太亮,请找一个暗点。
- 等等
我现在很困惑,因为我不知道是在一个类中按顺序开发它还是将所有龙的行为分成不同的类。请看我下面的解释。
不要像这样在一个类中编写所有内容:
龙.java
public class Dragon {
LightSensor ls = new LightSensor
public static main(String args[]) {
while (!BUTTON.Escape.IsPressed()) {
if (this.closeToObject()) {
this.turnAround();
}
// more conditions
}
}
private boolean closeToObject() {
//TODO
return false;
}
private void turnAround() {
//TODO
}
//... more methods
}
但是,我想让它看起来更加面向对象,因为该类(class)旨在帮助我们获得更多的 OOP 技能。所以我的第二个选择是创建扩展 Dragon's Behaviour 抽象类的操作类,如下所示(大致):
龙.java
public class Dragon {
Detect detect = new Detect(); // carry all the detection methods: distance, sound, etc.
TurnAround turnAround = new TurnAround();
public static main(String args[]) {
while (!BUTTON.Escape.IsPressed()) {
if (detect.tooCloseToObject()) {
turnAround.prepare(); // beep beep alert
turnAround.setDerection(true); // e.g. turn right
turnAround.turn();
}
}
}
}
DragonBehaviors.java
abstract class DragonBehavior {
abstract void prepare();
public void setDirection(boolean direction) {
//...
}
}
TurnAround.java
public class TurnAround extends DragonBehaviors {
String direction;
public void TurnAround() {}
public void prepare() {
// sound alert
}
public void setDirection(boolean direction) {
if (direction) this.direction = "Right";
else this.direction = "Left";
}
public void turn() {
// TODO
}
}
上面的代码大致是一个草稿,不要关注它。最后,我想问一下我上面关于OO结构的想法是否合理,否则在一个类中开发整个东西会容易得多,但它与OOP无关。我也有几个小组成员来完成代码,所以我认为如果我们共享类以 OOP 方式进行开发会更好。
在这种情况下我应该走哪条路?
我感谢所有的评论(:
最佳答案
您选择将不同的操作提取到具有公共(public)父类(super class)的类中是恕我直言合理的。但是,我会让 Dragon
类仅了解 DragonBehavior
抽象类,不子类。这样您就可以添加和删除龙的行为,而无需实际更改它。
关于java - 我应该使用什么面向对象结构来描述动物的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7544404/