2011-09-25 6 views
2

교수님이 LeJOS NXT를 사용하여 특정 동물의 행동을 시뮬레이트하는 로봇을 만들어야한다는 Java 과제가 있습니다. 나는 을 선택하여 용을 개발했습니다. 지금까지 내가 생각해 낸 모든 가능한 행동은 다음과 같습니다.동물의 행동을 묘사 할 때 어떤 객체 구조를 사용해야합니까?

  • 장애물과 너무 가까우면 뒤돌아 봅니다.
  • 배터리가 부족할 때 잠자기 상태가됩니다.
  • 닿은 경우 개체를 밀기.
  • 너무 밝 으면 어두운 부분을 찾으십시오.

나는 하나 개의 클래스에 순차적으로 그것을 개발하거나 다른 클래스로 모든 드래곤의 행동을 분할 여부를 알 수 없기 때문에 지금 매우 혼란 스러워요. 아래의 내 설명을 살펴보십시오. 대신이 같은 하나 개의 클래스 안에 모든 기록의

:

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 기술을 습득 할 수있게 도와줍니다.

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 구조에 대한 제 생각이 합리적인지 묻고 싶습니다. 그렇지 않으면 한 클래스에서 모든 것을 개발하는 것이 훨씬 쉽지만 OOP와는 아무런 관련이 없습니다. 또한 코드를 완성 할 여러 그룹 멤버가 있으므로 OOP 방식으로 개발할 클래스를 공유하는 것이 더 좋을 것이라고 생각합니다.

이 상황에서 어떤 방향으로 가야합니까?

나는 모든 의견을 (감사 :

+0

* 숙제 * 태그 –

+0

을 모두 추가하면이 경우에는 과장 될 것입니다. 당신은 많은 동물이 있다면, 당신은이 흥미로운 것을 발견 할 것입니다 : http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/ –

답변

4

공통의 슈퍼 클래스 클래스로 다른 작업을 추출의 선택은 이럴 합리적이다 그러나 나는 하지 서브 클래스의 DragonBehavior 추상 클래스의 Dragon 클래스는 인식 할 것이다. 이 방법으로 실제로 행동을 바꾸지 않고 행동을 드래곤에 추가하거나 제거 할 수 있습니다.

어떻게 동작합니까? 더 이상 행동을 유발하지 못하게 할 수 있습니다. , 당신은 행동을 할 수 있고 (심지어 런타임에!) 우선 순위를 변경하려면 다시 정렬하십시오 (는 잠을 자는데 비해 장애물을 더 많이 또는 덜 중요하게 푸는 중입니까?).

+1

오히려 유용한 패턴의 위대한 언급에 대해 – obfuscation

+0

+1 이런 좋은 대답, 그게 내가 짝을 찾고있는거야 (: –

관련 문제