【问题标题】:Storing multiple objects of a class in another将一个类的多个对象存储在另一个类中
【发布时间】:2017-04-04 03:53:18
【问题描述】:

假设我有一个名为 Program 的类,它由 Expression(s) 的数组列表 + 一个 name 属性组成,如下所示:

public class Program extends Expression {

  private String _name;
  /*Storage for expressions.*/
  List<Expression> _expressions = null;

  /*Program constructor*/
  public Program(String name) {
        _name = name;
        _expressions = new ArrayList<Expression>();
      }

然后我有一个名为解释器的类,它应该将输入转换为类 Program 的对象,并且还应该存储这些对象,并将名称与它们相关联。

public class Interpreter implements Serializable {
  Program _program;

  public Interpreter(){
  }

  public void createProgram(String program_name){
    Program program = new Program(program_name);
    _program = program;
  }

我的问题是,如果 Program 类已经具有我需要的 name 属性,那么像我上面所做的那样存储对象是否是不好的做法,甚至是可行的,并且当我需要它或者我应该创建时只需通过它的名称引用对象解释器类中的 Program 类型的数组列表来存储这些。

我在理解 OOP 的一些概念时遇到了一些麻烦,我想知道我是否只是通过解释器继续创建 Program 类型的对象并且以后不要在任何地方引用它们,它们最终会消失吧?

例如,我还应该能够通过这样的方法从解释器中获取程序。

  public Program readProgram(String filename){
       return getProgram(filename);
}

【问题讨论】:

    标签: java arrays oop object


    【解决方案1】:

    这取决于应用程序设计。例如。要检查 Expression 是否可以成为程序的一部分,您需要考虑以下几点:

    • 表达式可以独立存在吗?
    • 一个表达式可以链接到多个程序吗?

    如果上述任何一个问题的答案是肯定的,那么我们需要有独立的表达式实体,我们可以存储表达式和程序之间的映射。

    现在,对于在Program 中存储“名称”属性的问题,我建议您查看this SO 答案和this 文章,它们基本上解释了组成之间的区别(即您已经尝试过)和继承(另一种方法)。

    如果所有实体共享相同的属性(例如名称、创建日期等),则建议创建一个抽象类并让这些类扩展该类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 2022-06-16
      • 2017-08-16
      相关资源
      最近更新 更多