我有一个 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
}
但是,我想让它看起来更面向对象,因为该课程旨在帮助我们获得更多的 OOP 技能。所以我的第二个选择是创建像这样(大致)扩展 Dragon's Behavior 抽象类的动作类:
龙.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 方式开发会更好。
在这种情况下我应该走哪条路?
我感谢所有评论(: