2017-01-19 2 views
2

データ構造プロジェクトのためのソートデータベースを実装しています。クラスコンストラクタを使用して2つの異なるタイプのオブジェクト配列を作成する

StudentInstructorの2つの子クラスを持つ抽象スーパークラスPersonがあります。

最後に、UniversityPeopleと呼ばれる別のクラスがあり、アプリケーションによって使用されるときにStudentオブジェクトとInstructorオブジェクトの両方の配列への参照が作成されます。 UniversityPeopleのコンストラクタが呼び出されると、sizeをパラメータとして指定されたオブジェクトの配列が作成されます。作成時にコンストラクタ内の2つのオブジェクトをどのように区別するかを考えることができません。私が最初に考えたのは2つのコンストラクタた:

Instructor[] instArray; 
Student[] stuArray; 

public UniversityPeople(int size) 
{ 
    Student[] stuArray = new Student[size]; 
} 
public UniversityPeople(int size) 
{ 
    Instructor[] instArray = new Instructor[size]; 
} 

しかし、それについて考える(といくつかの読書をしている)した後、私はこれを行うことはできません知っています。 私の次の考えは、UniversityPeopleコンストラクタで一種のオブジェクト検証メソッドを使用することでしたが、実装には苦労しています。

基本的に、クラスはStudentオブジェクトの配列を作成するタイミングと整数サイズを引数としてInstructorオブジェクトの配列を作成するタイミングを知る必要があります。

誰かが正しい方向に私を指すことができたら、私は本当にそれを感謝します。私は主にC言語でコーディングしていましたので、OOPへの復帰は非常に時間の経過してちょっと変わってきました。ありがとう!

+0

なぜPersonの配列を作成しないのですか? –

+0

'UniversityPeople'に静的ファクトリメソッドを作成することができます。これは、コンストラクタと異なり、名前で区別することができます。しかし、私はあなたの要件をよく理解していません。なぜあなたのクラスはメンバーとして2つの配列を持ちますが、初期化するだけですか? –

+0

その抽象的なので、私は正しく読んで覚えている場合、サブクラスは抽象スーパークラスのそれらのメソッドにアクセスすることはできませんでした。私は間違っている可能性がありますか? – FuegoJohnson

答えて

5

まず、私はアプローチに疑問を呈します。この単一のクラスがあまりにも多くのことをしようとしているように思えます。あなたは本当に、本当にそれをやりたいなら、私はプライベートコンストラクタを呼び出すstaticファクトリメソッドをお勧めします:

public class UniversityPeople { 
    private final Student[] students; 
    private final Instructor[] instructors; 

    private UniversityPeople(int studentCount, int instructorCount) { 
     students = new Student[studentCount]; 
     instructors = new Instructor[instructorCount]; 
    } 

    public static UniversityPeople forStudents(int size) { 
     return new UniversityPeople(size, 0); 
    } 

    public static UniversityPeople forInstructors(int size) { 
     return new UniversityPeople(0, size); 
    } 
} 

あなたは各サイズに対してチェックを実行し、唯一のあなたが本当にしたい場合は、それが0より大きいかどう割り当てることができに。しかし、私が言うように、私は可能であればデザインを再訪したいと思います。

+0

ええ、私は実装が奇妙だと思ったが、それはインストラクターが明示的に求めているものなので、私は従わなければならない。私には2つの異なる授業が理にかなっていますが、私は逃げ出します。とにかく、これは間違いなく動作するようです。 – FuegoJohnson

+0

@FuegoJohnson:その情報を質問に入れたいと思うかもしれません。少し奇妙なことを知っていることを尋ねるときはいつでも、それを認める(そして正当化を提供する)ことで、その側面の議論を避ける。これはあなたが求められているものなら、それはいいです:) –

+0

本当に、私はおそらく何かを言っているはずでしたが、私はとても疲れていて、クラスLOLの全体的な実装を挫折させました。とにかく、すばやい応答のおかげで、私はあなたの答えを選択しました。 :) – FuegoJohnson

1

方向のみが必要な場合:デザインパターン "factory"を探します。これはあなたを助けるはずです。

+0

ありがとう、私はこの実装を認識していませんでしたが、それは正しい方向に私をポイントしていただきありがとうございます。 – FuegoJohnson

関連する問題