Мне нужно руководство по проекту Java.Я должен разработать генетическое (семейное) древо человека.
Это тема:
Каждая клетка человека содержит 23 пары хромосом, пронумерованных от 1 до 22, и пару половых хромосом.: XX у женщин и XY у мужчин.Во время оплодотворения 22 хромосомы (X или Y) мужчины сливаются с 22 + Х хромосомой женщины.Это приводит к 22 парам хромосом + (X или Y) в клетке, которые сформируют будущего ребенка.23-я хромосома, переданная отцом (X или Y), определит пол ребенка (XX для девочки, XY для мальчика).
Каждая хромосома несет много генов (кодирующих практически все, что является характеристикойморфологический, физиологический, поведенческий).Из-за пар хромосом генетическая информация дублируется (за исключением частей половых хромосом).Каждая копия гена называется аллелем. Таким образом, это означает, например, что если ген отвечает за цвет глаза, то аллель синий .
Генетическая информация, выраженная как следствие комбинированной экспрессии аллелейприсутствоватьДоминантный аллель всегда экспрессируется в геноме его носителя.Однако, если информация от одного аллеля не выражена, когда присутствует доминантный аллель того же гена, это рецессивный аллель.Особенность рецессивного аллеля гена состоит в том, что он может присутствовать в геноме и передаваться в течение нескольких поколений без его экспрессии в фенотипе его носителей.Если доминантного аллеля нет, две копии гена имеют один и тот же рецессивный аллель (гомозиготный рецессивный), тогда рецессивный характер выражен.Используя семейное древо, можно определить экспрессию гена в семье.
Программа должна быть в состоянии сделать следующее:
- создать упрощенную версию, на которую опирается23 хромосомы и позволяют пользователю размещать гены в хромосомах, а затем моделировать репликацию, митоз, мейоз и слияние хромосом и отображать расположение генов на полученных клетках.
- позволяет рисовать генеалогические деревья и выводить вероятности (или определенность) в отношении экспрессии генов в генеалогическом древе человека.
Пока все хорошо, я создал класс Gene и класс Chromosome.Затем я подумал о создании класса «Родитель», например, и создании в нем 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 +"]";
}
}
Chromosome.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 + "]";
}
}
Моя проблема в том, чтобы сделать ген рецессивным или доминантным.Например, когда хромосомы мужского пола с генами голубых глаз совпадают с хромосомами женского пола с коричневыми, если мужские гены доминируют, у ребенка будут голубые глаза вместо коричневых, но у этого ребенка все еще будет рецессивный ген «карие глаза»где-то внутри него.
Я также хочу знать, правильно ли решаются мои классы.Я также думаю о создании класса "Pair_of_chromosome", например, содержащего две переменные хромосомы, и создании класса "Parent", содержащего таблицу из 23 "Pair_of_chromosome".Я не знаю, правильный ли это путь.