У меня есть ситуация, когда объекты моего агента содержат огромное количество данных, включая графику, физику, а теперь и ай.Java: Resizable Arraylists не будут оставаться параллельными
Я ранее кодировал компоненты этих «агентов» в отдельных объектах, которые были параллельными. Теперь я понимаю, так как агенты содержатся в повторно значимом ArrayList, что если один из агентов уничтожен, индексы больше не будут параллельны компонентам ai.
По правде говоря, класс агента уже имеет длину 10 страниц, и очень разумно содержать методы и данные ai в отдельном объекте. Одна из проблем заключается в том, что методы будут «воспроизведены» в некотором смысле, потому что вместо того, чтобы иметь один объект ai, который будет принимать и обрабатывать данные от многих агентов, мне нужен один объект ai для каждого объекта агента.
Я спросил об этом один раз раньше, и мне сказали, что наличие нескольких экземпляров методов не влияет на производительность или раздувание памяти, так что это не должно быть проблемой.
Я не уверен, как решить эту проблему, за исключением, возможно, хранения агента-агента в объекте-агенте, а также в объекте ai, а затем запуска поиска в каждом списке, когда мне нужно их вызвать. Излишне говорить, что это ужасный способ сделать вещи полезными.
В C++ простым решением этой проблемы будет указатель, в котором указатель на соответствующий экземпляр ai будет содержаться в данных агента. Я не знаю, как это сделать, поэтому мое лучшее решение - просто вставить больше данных в объект-агент и передать его как аргумент объекту ai.
Есть ли лучший способ решить эту проблему «параллельного несоответствия».
Редактировать >>>
Я знаю, что могу заполнить все данные в классе агентов. То, чему меня учили, имеет 30-страничный класс - пример плохой структуры.
Вопрос: как я могу создать/reference/для хранения в классе агента, сохраняя все данные ai, инкапсулированные в модуль ai.
Edit >> Пример
public class Agent{
//pseudo code that represents what I need (yes the class declaration order is wrong)
AI_ref = new Reference(ai_module);
Graphics_ref = new Reference(graphics_module);
int[][] physics_data; //Like I said, 10 pages of this
void method1(){}
void method2(){}
//....
}
public class graphics_module{
int[][] graphics_data; //this is also about 10 pages
void method1(){}
void method2(){}
//....
}
public class ai_module{
int[][] ai_data; //this will likely span 5ish pages
void method1(){}
void method2(){}
//....
}
}
Одна большая концепция ООП заключается в том, что все состояние/данные объекта инкапсулируются внутри объекта (в отличие от распространения во внешних структурах данных, таких как ваши аррайалисты). Таким образом, им становится легче управлять ими как единицей. Поэтому я бы сказал, что ваш план, чтобы Агент содержал все необходимые ему данные, звучит как хорошая идея. – Thilo
@Thilo Еще один аспект ООП - это модульность. У меня нет проблем с сохранением ссылок на все данные в объекте агента, но наличие 30-страничного класса определенно/не соответствует/хорошему. Мне нужны указатели, а java их не поддерживает. – bigcodeszzer
Объекты могут быть составлены из других объектов. Это позволяет избежать 30 классов страниц. Объекты в Java разделяются с использованием ссылок. Вероятно, это то, что вы подразумеваете под «указателями». – Thilo