1

Java プロジェクトに関するガイダンスが必要です。私は、ヒトの遺伝(家系)系統樹を開発する予定です。

これは主題です:

人間の各細胞には、1 番から 22 番までの番号が付けられた 23 対の染色体と、1 組の性染色体 (女性の XX と男性の XY) が含まれています。受精の間、男性の 22 + (X または Y) 染色体は、女性の 22 + X 染色体と結合します。これにより、将来の赤ちゃんを形成する細胞内に 22 対の染色体 + (X または Y) が生じます。父親から受け継がれた23番目の染色体(XまたはY)によって、子供の性別が決まります(女の子はXX、男の子はXY)。

各染色体は多くの遺伝子を持っています (特徴的な形態学的、生理学的、行動的であるほとんどすべてをコードしています)。染色体のペアにより、遺伝情報が複製されます (性染色体の一部を除く)。遺伝子の各コピーは対立遺伝子と呼ばれます。つまり、たとえば、a 遺伝子が目の色の原因である場合、対立遺伝子は青になります。

存在する対立遺伝子の複合発現の結果として発現される遺伝情報。優性対立遺伝子は、常にその担い手のゲノムで発現されます。しかし、同じ遺伝子の優性対立遺伝子が存在するときに、一方の対立遺伝子からの情報が表現されない場合、それは劣性対立遺伝子です。遺伝子の劣性対立遺伝子の特異性は、それがゲノムに存在し、その担い手の表現型で発現されることなく数世代にわたって伝達されることです。優性対立遺伝子が存在しない場合、遺伝子の 2 つのコピーが同じ劣性対立遺伝子 (ホモ接合性劣性) を持っている場合、劣性形質が発現します。ファミリーツリーを使用することにより、ファミリー内の遺伝子の発現を決定することができます。

プログラムは、次のことができる必要があります。

- 23 の染色体に依存する単純化されたバージョンを生成し、ユーザーが遺伝子を染色体に配置してから、染色体の複製、有糸分裂、減数分裂、および融合をシミュレートし、結果の細胞に遺伝子の位置を表示できるようにします。

-家系図と、人の家系図上の遺伝子の発現に関する推定確率 (または確実性) を描画できるようにします。

これまでのところ、クラス Gene とクラス Chromosome を作成しました。次に、たとえば「Parent」というクラスを作成し、その中に 23 個の染色体を作成することを考えました。しかし、それを行う前に、23 番目の染色体を男性と女性で異なるものにしたいと考えています。次に、複製、交差、有糸分裂などをシミュレートします。正しい軌道に乗っているかどうかはわかりません。また、特定の対立遺伝子/遺伝子が劣性または優性であることを指定する方法もわかりません。現時点では、私のクラスはランダムな方法でのみ動作します。私は文書化します

Gene.java

import java.util.Random;

/**
 * @author mkab
 *
 */
public class Gene implements Cloneable {

    private Object allele;

    public Gene(){
        super();
    }
    public Gene(Object allele){
        super();
        this.allele = allele;
    }

    /**
     * Randomly selects a trait from trait1 or trait2 and returns a new Gene with that trait
     * @param trait1
     * @param trait2
     * 
     * @return a new Gene
     */
    public Gene randomAllele(Object trait1, Object trait2){
        Object allele = null;
        Random rand = new Random();
        int i = rand.nextInt(2);// generate between 0 and 2: only 2 possibilities: 0 or 1
        switch(i){
        case 0:
            allele = trait1;
            break;
        case 1:
            allele = trait2;
            break;
        }
        return new Gene(allele);
    }


    public Gene clone() throws CloneNotSupportedException{
        Gene g;
        g = (Gene) super.clone();
        return g;
    }
    /**
     * @param allele the allele to set
     */
    public void setAllele(Object allele) {
        this.allele = allele;
    }

    /**
     * @return the allele
     */
    public Object getAllele() {
        return allele;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "Gene [allele=" + allele +"]";
    }
}

染色体.java

/**
 * 
 */
package project_try;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * Class that creates a pair of chromosome by adding random genes
 * @author mkab
 *
 */
public class Chromosome implements Cloneable {

    /**
     * the user can put as many genes as possible on the chromosome
     */
    private ArrayList<Gene> genes = new ArrayList<Gene>();

    public Chromosome(){
        super();
    }

    public Chromosome(ArrayList<Gene> genes){
        this.genes = genes;
    }

    /**
     * Add a gene object to this chromosomes list.
     */
    public void addGene(Gene gene) {
        genes.add(gene);
    }


    /**
     *creates a copy of a chromosome
     */
    @SuppressWarnings("unchecked")
    @Override
    public Chromosome clone()throws CloneNotSupportedException{
        Chromosome c;
        c = (Chromosome) super.clone();
        c.genes = (ArrayList<Gene>)this.genes.clone();
        //Iterator<Gene> it = c.genes.iterator();
        /*Gene tmp;
        while(it.hasNext()){

        }*/
        return c;
    }

    /**
     * @return the genes
     */
    public ArrayList<Gene> getGenes() {
        return genes;
    }

    /**
     * @param genes the genes to set
     */
    public void setGenes(ArrayList<Gene> genes) {
        this.genes = genes;
    }

    /**
     * 
     * @return
     */
    public int getSize(){
        return genes.size();
    }

    /**
     * @return a gene at an index i of the ArrayList
     * @param index - the index at which to return a gene
     */
    public Gene getGenes(int index) {
        return genes.get(index);
    }


    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "Chromosome [genes=" + genes + "]";
    }

}

私の問題は、遺伝子を劣性または優性にできるようにすることです。たとえば、青い目の遺伝子を持つ男性の染色体が茶色の女性の染色体と交配する場合、男性の遺伝子が優性である場合、子供は茶色の代わりに青い目をしますが、その子供は依然として劣性遺伝子「茶色の目」を持っています.その中のどこかに。

また、作成したクラスがこの問題に正しく取り組んでいるかどうかも知りたいです。また、たとえば 2 つの染色体変数を含むクラス「Pair_of_chromosome」を作成し、23 個の「Pair_of_chromosome」のテーブルを含むクラス「Parent」を作成することも考えています。これが正しい方法かどうかはわかりません。

4

2 に答える 2

0

同様の遺伝子シミュレーション研究を行うためのOctave コードを次に示します。YMMV。

于 2011-03-04T23:41:29.940 に答える
0

私は遺伝学についてあまり知りませんが、これをモデル化する正しい方法は、Person クラスを持ち、2 人 (親) を取るコンストラクターを実装し、それらが同性である場合は例外をスローし、染色体 (および個人) を構築することです。親のランダムな組み合わせ (劣性遺伝子などを考慮) に基づいて、このコンストラクター内の新しい Person を生成します。

于 2011-03-04T22:43:49.567 に答える