2010-12-26 10 views
6

私は、Javaでファミリーツリープログラムを作成しています。 - ゲッターとセッター名 性別、年齢などのため ファミリーツリープログラムのロジック

  • FamilyMember - 親を設定するためのPersonゲッター とセッターを拡張し、 子供
  • ファミリー - 複数で構成されてい

    • 者:いくつかのクラスをIを開発しました家族を追加する方法 メンバーを削除する
    • FamilyTreeは、メインクラスである の関係を設定します。

    私は、主に2つの問題を抱えて:

    1)私は人と人との関係を設定する必要があります。現在、私はやっています:

    FamilyMember A, FamilyMember B 
    B.setMother(A); 
    A.setChild(B); 
    

    上記の例は、母子関係を設定するためのものです。

    これは非常にclunkyのようです。それはすべての関係を実装するために非常に長い時間がかかりました。あまり手続き的な方法で複数の関係を実装する方法に関するアイデア?

    2)私は家系図を表示できなければなりません。これどうやってするの?人生を楽にするカスタムクラスがありますか?お時間を

    おかげで...クラス以下のような

  • +0

    どのように表示したいですか? – Roman

    答えて

    4

    を使用しています構造を描画するには、2世代以上表示されている場合は衝突を避けるのが難しいです(線が十字架になる)。したがって、アプリケーションで2つまで維持することが許可されている場合は、それは素晴らしいことです。あなたが一度に表示より多くの世代が必要な場合は、

    alt text

    alt text

    または水平:私はどちらか垂直表現のこの種を使用するプログラムの数を、書きました他の表現を考え出す必要があります。同じ世代のすべての人を同じレベルで見せることができるように、まばらになり始めるかもしれません。

    データ構造として関係を表現する方法に関しては、うんざりです。最も単純で清潔なことは、同じ個人の母親と父親の2人が「結婚している」ということです。しかし、どのように複数のパートナー、幼児などを表現したいと思いますか?それはあなたのプログラムが何をすべきかだけでは分かりません。たぶんデータセットにこれらの合併症がないかもしれません。しかし、それが難しい場合を最初に考えてみるのが良いでしょう。単純な表現は、困難なケースをカバーする簡単な拡張には向いていません。

    あなたが予想する最も困難なケースのいくつかを(手作業で)描きます。どのような種類のデータを録音する必要があるのか​​、どのように整理するのかを示唆しています。ドロー時の選択肢(誰が最初に来るか、各ノードで使用するシンボルやテキストなど)は、データ構造の決定を通知します。 Bの母親とAの子の両方を設定

    は冗長なようだ - と冗長性がエラーにつながる - 1を選びます。どれ? Bの母親(Aの性別)を設定すると、さらに多くの情報があります。子どもの数が0人以上の場合は、厳密に2人の親が必要です。だから私はとちょうど Bの母親を設定する傾向があります。問題の個体と親が等しいセットを選ぶために全員を繰り返して、どの個体の子供もいつでも見つけることができます。実際に母親を保存する&父親関係(単純な親関係と比較して)は重複を減らすことができます(個人に性別を格納していると仮定します)。

    0

    何か(これは擬似コードではない本当のJavaクラス)

    class Node 
    { 
    
        public Node Parent { get;set;} 
    
        public List<Node> Childs {get;set;} 
    
    } 
    

    がに関して

     Node ultimateGrandParent = new Node(); 
        ultimateGrandParent.Parent = null; 
        ultimateGrandParent.Childs = new List<Node>(); 
    
    +0

    木構造で伝えたい。私の主な問題は、関係を設定することです。私は家族が父親と子供が多いことを許す家族のクラスを持っています。私は結婚をどのように実装するか、また、同じ親を持つ多くの子供たちのためのセッティング関係をどのように実装するかについてはわかりません。 – dr85

    0

    複数のリレーションシップを実装する方法については、あまり手続き的ではありません 方法はありますか?

    はい、あなたは、オブジェクトとしての関係自分自身を表現することができます。任意の2人の人はゼロ以上の関係を持つことができます。

    年前、私はそのマスター名インデックス内の任意の2つの人々の間の関連のために、より一般的にこれをしなかった警察の記録システムに取り組みました。

    リレーションシップが指示されることがあります。母親は---母親である。

    リレーションシップは階層的であってもよい。母親は親です。

    2)私は ファミリーツリーを表示できなければなりません。これどうやってするの? そこにカスタムクラスがありますか? 人生を楽にしますか?

    はい、グラフの表示をサポートする既存のコードがあります。私は個人的にはprefuse visualization toolkitで働いていた経験がありました。

    興味のあるプリフュージョンツリービューがあります。 this exampleのノードをクリックしてみてください。 (ただし、自分以外の家族が使用するソフトウェアを使用する場合は、ツリーが不十分な場合があります)。