Java の課題があり、教授から LeJOS NXT を使用して、特定の動物の行動をシミュレートするロボットを作成するように求められています。私はドラゴンを開発することにしました。これまでに思いついたすべての可能な動作は次のとおりです。
- 障害物に近すぎると向きを変える。
- バッテリーが少なくなるとスリープ状態になります。
- 触れたら物を押す。
- 明るすぎる場合は、暗い場所を見つけてください。
- 等
1つのクラスで順番に開発するか、すべてのドラゴンの動作を異なるクラスに分割するかがわからないため、現在かなり混乱しています。以下の私の説明をご覧ください。
次のように 1 つのクラス内にすべてを記述する代わりに:
Dragon.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 スキルを習得するのに役立つことを目的としているため、よりオブジェクト指向に見えるようにしたいと考えています。したがって、私の 2 番目のオプションは、Dragon の Behavior 抽象クラスを次のように拡張するアクション クラスを作成することです (大まかに):
Dragon.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 構造に関する私の考えが妥当かどうかを尋ねたいと思います。そうでない場合は、1 つのクラスですべてを開発する方がはるかに簡単ですが、OOP とは何の関係もありません。コードを仕上げるためのグループ メンバーも何人かいるので、クラスを共有して OOP で開発するとよいと思います。
この場合、どちらに行けばいいですか?
すべてのコメントに感謝します (: