假设我有一个名为Program的类,它由Expression(s)的arraylist +名称属性组成,如下所示:
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>();
}
然后我有一个名为interpreter的类,它应该将输入转换为类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属性,那么就像上面那样存储对象是不好的做法,甚至是可行的,只需要在我需要时引用对象或者我应该创建它解释器类中用于存储这些的程序类型的数组列表。
我在围绕OOP的一些概念时遇到了一些麻烦,我想知道我是否只是通过解释器继续创建Program类型的对象,并且不会在以后的任何地方引用它们,它们最终会消失了吗?
我也应该能够通过例如这样的方法从解释器中获取程序。
public Program readProgram(String filename){
return getProgram(filename);
}
答案 0 :(得分:0)
这取决于应用程序设计。例如。要检查Expression是否可以成为程序的一部分,您需要考虑以下内容:
如果上述任何一个问题的回答是肯定的,那么我们需要拥有独立的Expression实体,我们可以存储Expression和Program之间的映射。
现在,关于存储&#39;名称&#39; Program
中的属性,我建议您查看this SO回答和this文章,它基本上解释了Composition(即您尝试过的那个)与继承(另一种方法)之间的区别)。
如果所有实体共享相同的属性(例如名称,创建日期等),那么建议创建一个Abstract类并使这些类扩展该类。