我有一种情况,我的“代理”对象包含大量数据,包括图形、物理以及现在的ai。
我以前在单独的对象中编码这些“代理”的组件,它们是并行的。现在我意识到,由于代理包含在可重新大小的ArrayList中,如果其中一个代理被销毁,索引将不再与ai组件并行。
说实话,代理类已经有10页长了,将ai方法和数据包含在单独的对象中是非常明智的。当然,这方面的一个问题是,方法将以某种方式被“复制”,因为与其让一个ai对象接受和处理来自多个代理的数据,我还需要每个代理对象都有一个ai对象。
我曾经问过这个问题,有人告诉我,拥有多个方法实例不会影响性能或内存膨胀,所以这不应该是一个问题。
我不知道如何解决这个问题,除非可能在代理对象和ai对象中存储一个agent_id,然后在需要调用它们时对每个列表进行搜索。不用说,这是一种糟糕的做事方式。
在C++中,这个问题的简单解决方案是一个指针,其中指向适当ai实例的指针将包含在代理数据中。我不知道如何做到这一点,所以我最好的解决方案就是将更多的数据插入到代理对象中,并将其作为参数传递给ai对象。
有没有更好的方法来解决这个“平行错配”问题。
Edit>>>
我知道我可以把所有的数据都填充到agent类中。据我所知,有一个30页的课程是一个糟糕的oop结构的例子。
我的问题是,如何创建/引用/存储在代理类中,同时将所有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(){}
//....
}
}发布于 2016-03-02 03:17:31
若要创建引用,请尝试
public class Agent{
//pseudo code that represents what I need (yes the class declaration order is wrong)
ai_module AI_ref = new ai_module();
graphics_module Graphics_ref = new graphics_module();
int[][] physics_data; //Like I said, 10 pages of this
void method1(){}
void method2(){}
//....
}至于并行数组,您的示例并没有提供足够的细节来演示您想要做的事情。
//伪代码,表示我所需要的(是的,类声明顺序是错误的)
您的意思是在定义Agent之前定义ai_module和graphics_module是错误的吗?事实并非如此。java编译器对此没有异议。
您可能应该阅读基本的java教程。我认为它将解决你的许多问题。
发布于 2016-03-02 01:33:20
并行数组是在Basic和Fortran是现代语言时发展起来的一种60年代的结构。这些语言没有其他数据结构。
自20世纪90年代以来,在OO开发中,如果您有几种不同类型的数据属于一起,则创建一个对象来保存对这些数据位的引用,这样您就不需要担心任何并行的事情。
我强烈建议您将代码重构为现代最佳实践并使用对象。由于您没有提供明确的详细信息,这是可以给出的最明确的答案。
https://stackoverflow.com/questions/35736796
复制相似问题