1

我的“代理”对象包含大量数据,包括图形、物理,现在还有 ai。

我以前在单独的对象中编码这些“代理”的组件,这些对象是并行的。现在我意识到,由于代理包含在可调整大小的 ArrayList 中,如果其中一个代理被销毁,索引将不再与 ai 组件平行。

说实话,agent类已经有10页长了,把ai方法和数据包含在一个单独的对象中是很明智的。当然,这样做的一个问题是方法将以某种方式“复制”,因为我不需要一个 AI 对象来接受和处理来自许多代理的数据,而是每个代理对象都需要一个 AI 对象。

我曾经问过这个问题,并被告知拥有多个方法实例对性能或内存膨胀没有影响,所以这应该不是问题。

我不确定如何解决这个问题,除了可能将 agent_id 存储在 agent 对象和 ai 对象中,然后在需要调用它们时在每个列表上运行搜索。不用说,这是在性能方面做事的糟糕方式。

在 C++ 中,这个问题的简单解决方案是指针,其中指向正确 ai 实例的指针将包含在代理数据中。我不知道该怎么做,所以我最好的解决方案是将更多数据塞进代理对象中,并将其作为参数传递给 ai 对象。

有没有更好的方法来解决这个“并行不匹配”问题。

编辑>>>
我知道我可以把所有的数据塞进代理类。我被教导的是,有一个 30 页的课程是糟糕的 oop 结构的一个例子。

我的问题是,如何创建 /reference/ 来存储在代理类中,同时将所有 AI 数据封装在 AI 模块中。

编辑>>示例

    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(){}
    //....

    }

}
4

2 回答 2

4

并行数组是 1960 年代在 Basic 和 Fortran 是现代语言时开发的构造。这些语言没有其他数据结构。

自 1990 年代以来,随着 OO 的发展,如果您有几种不同类型的数据属于一起,您可以创建一个对象来保存对这些数据位的引用,这样您就无需担心并行任何事情。

我强烈建议您将代码重构为现代最佳实践并使用对象。由于您没有提供明确的详细信息,因此这是可以给出的最明确的答案。

于 2016-03-02T01:33:20.303 回答
1

要创建您的参考,请尝试

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(){}
    //....

}

至于您的并行数组,您的示例并没有真正提供足够的细节来证明您正在尝试做什么。

//pseudo code that represents what I need (yes the class declaration order is wrong)

你的意思是在定义Agent之前定义ai_module并且graphics_module是错误的吗?它不是。java编译器对此没有任何问题。

您可能应该学习基本的 java 教程。我认为它将解决您的许多问题。

于 2016-03-02T03:17:31.703 回答