Какая архитектура лучше всего подходит для этого симулятора?

Мне нужно сделать симулятор на Java, который будет имитировать езду на машине по шоссе. На трассе должно быть 3 полосы движения, в каждой полосе находятся автомобили с постоянной скоростью. На этой трассе есть один агент, который должен проехать и не врезаться в другую машину. Подробное описание можно найти в этой статье в разделе 2.5 и на рисунке 5.

Это изображение из упомянутой статьи и показывает внешний вид шоссе:

enter image description here

Моя цель - написать только симулятор (и GUI), а не логика агента. Теперь я хотел бы разработать архитектуру этого симулятора, и здесь мне нужна помощь.

Моя идея, как может выглядеть API агента:

public abstract class BaseAgent {
    public abstract void run()
    public abstract void onCrash();
}

Агент (автомобиль) на шоссе должен быть потомком этого класса. На каждом шаге симулятор вызывает функцию run () , где - логика агентов. В этой функции агент может вызывать такие функции, как:

goLeft();
goRight();
getNearestCarInLane(int lane_no);
getMySpeed();

Итак, на каждом шаге агент может решить, останется ли он на текущей полосе движения или повернет налево или направо. И это все, что может сделать агент.

Итак, это API агентов, но я не знаю, как спроектировать остальную часть симулятора. Моя первая попытка моделировать архитектуру была:

class Agent — descendant of BaseAgent, can ride on highway.
class Highway — stores position of all cars on highway.
class Simulator — creates instance of agent and highway; in every step, call agent’s `run()` and monitors any car crash.

Это не очень хорошая архитектура.В каком классе должны быть методы goLeft () , goRight () и getNearestCarInLane () ? Потому что эти методы должны быть внутри класса BaseAgent , но должны знать положение каждой машины на шоссе. В итоге у меня было что-то вроде этого:

Simulator s = new Simulator();
Highway h = new Highway();
Agent a = new Agent();

s.setAgent(a);
s.setHighway(h);
a.setHighway(h);
h.setAgent(a);

И это ужасно и некрасиво.

Так что мне здесь нужна небольшая помощь более умных людей. Может кто-нибудь дать мне ссылку на книгу, статью, что угодно о симуляторах / архитектуре? Или объясните, что я делаю не так?

Я не программист, и этот проект является частью факультативного курса на моем факультете под названием Программная инженерия .

6
задан Roland Ewald 11 October 2011 в 20:49
поделиться