митоз клетки человека - PullRequest
       14

митоз клетки человека

7 голосов
/ 19 марта 2011

Я программирую генетические процессы в Java для своего проекта и хочу симулировать митоз человеческой клетки. Клетка человека содержит 23 пары хромосом. Митоз - это в основном деление или размножение клеток, при котором клетка дает начало двум генетически идентичным дочерним клеткам. Вы можете найти картинку об этом здесь (прокрутите немного вниз по странице):

Митоз

Я думаю, что этот митоз был бы похож на Java-метод в классе "Cell", например. Поэтому я создал класс Chromosome с его собственными методами для представления одной хромосомы и создал класс «Cell», содержащий 23 пары хромосом. Я планирую поместить метод mitosis в класс Cell, но проблема в том, что этот метод должен возвращать 2 идентичные ячейки, и я думаю, что невозможно создать метод, который возвращает 2 ячейки в этом классе. Я думал о создании метода, который бы возвращал массив из 2 ячеек, он не работает. Любые предложения, как создать этот метод? Или, может быть, другой подход, чем тот, который я использую? Спасибо.

Ответы [ 4 ]

3 голосов
/ 19 марта 2011

На самом деле это то, что я даже использую для клонирования своих клеток. Но моя проблема не в клонировании клеток, а в том, что должен вернуть метод «митоз». Что касается митоза (биологически), то образуются две идентичные клетки.

Вы зацикливаетесь на попытке заставить Java вести себя как объект реального мира.

На чем вам следует сосредоточиться, так это на правильном количестве нужных клеток после митоза, а не на том, чтобы сигнатуры метода напрямую отражали события реального мира.

Митоз - это когда одна клетка разделяется на две. IMO, любые из следующих допустимых «моделей» в Java:

  • метод в этой ячейке, который возвращает другую:

    public Cell mitosis() {
        return this.clone();  // ... or equivalent
    }
    
  • метод в этой ячейке, который возвращает две ячейки:

    public Cell[] mitosis() {
        return new Cell[]{this, this.clone()};  // ... note - must return this as one 
                                                // of the objects
    }
    
  • статический метод, который возвращает две ячейки:

    public static Cell[] mitosis(Cell one) {
        return new Cell[]{one, one.clone()}; 
    }
    

Даже следующее может быть правильным ... если вызывающий позаботится об удалении всех ссылок на исходную ячейку.

    public static Cell[] mitosis(Cell original) {
        return new Cell[]{original.clone(), original.clone()}; 
    }

Но я хочу сказать, что на самом деле не имеет значения, какие подписи. Важно то, что после того, как метод (и вызывающая сторона) сделали что-то, новая модель имеет правильные объекты Cell в правильных отношениях.

1 голос
/ 19 марта 2011

В качестве альтернативы Cloneable рассмотрим конструктор копирования или фабрику копирования , статический аналог фабрики конструктора копирования.

1 голос
/ 19 марта 2011

Я бы предложил Cell implements Cloneable и использовать конструктор копирования идиома в методе clone().

В doMitosis() методе в Cell вы в основном делаете что-то вроде этого:

public Cell[] doMitosis() {
    Cell[] cells = new Cell[]{this.clone(), this.clone()};
    return cells;
}

PS. Код - это грубый набросок, а не фактическая реализация. Кроме того, в этом коде учитывается, что родительская ячейка должна быть уничтожена (и подвергнута сборке мусора), чтобы 2 идентичные ячейки могли иметь преимущество.

0 голосов
/ 19 марта 2011

Это оказывается чем-то, что вам нужно делать в реальных программах на Java - проверьте интерфейс Cloneable .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...