2016-11-20 1 views
0

にクラスの複数のオブジェクトを格納するのは、私はそうのような式のArrayListので作られているプログラムという名前のクラス(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のオブジェクトに変換することになっており、これらのオブジェクトに名前を関連付けることも想定されています。私は上記の行ったようProgramクラスはすでに私が必要とするname属性を持っており、私はそれを必要とするとき、または単にその名前でオブジェクトを参照する場合、それは悪い習慣だまたはオブジェクトを格納するためにも、可能な場合は私の質問がある

public class Interpreter implements Serializable { 
    Program _program; 

    public Interpreter(){ 
    } 

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

これらを格納するために、インタプリタクラスのProgram型の配列リストを作成する必要がある場合。

私はいくつかのOOPのコンセプトの頭を抱いていて、インタプリタを介してプログラムタイプのオブジェクトを作成し続け、後でどこでも参照することはできないのだろうかと思っていました。最終的に右に消える?

例えば、インタプリタからプログラムを取得することもできます。

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

答えて

0

アプリケーションの設計によって異なります。例えば。式がプログラムの一部であるかどうかを確認するには、次の点を考慮する必要があります。

  • 表現は独立して存在しますか?
  • Expressionを複数のプログラムにリンクすることはできますか?

上記の質問のいずれかの回答が「はい」の場合、Expressionの独立したエンティティを持つ必要があり、ExpressionとProgramの間にマッピングを格納できます。

さて、Programの「名前」属性を格納する質問には、私はSOに答えると、基本的構成の違いを説明this記事thisを見た推薦する(つまり、あなたが試してみました1)と継承(別のアプローチ)。

すべてのエンティティが同じプロパティ(名前、作成日など)を共有している場合は、Abstractクラスを作成してこれらのクラスを拡張することをおすすめします。