projet en programmation java

cel78
projet en programmation java

Bonjour,
j'ai un projet à réaliser, et j'ai beaucoup de mal à le faire.
Je suis stressée parce que le temps passe et je ne sais pas comment faire ma programmation. Je suis vraiment très nulle.

voici mon sujet:
Dans une boite de culture in vitro vivent, se reproduisent et meurent des cellules normales. La règle de base
est que ces cellules ne se divisent pas lorsqu'elles se trouvent au contact les unes des autres.
Toutes ces cellules sont sujettes à des mutations. Certaines de ces mutations sont inoffensives car silencieuses,
d'autres mutations, plus rares, sont potentiellement dangereuses. En effet, elles font perdre la propriété
d'inhibition de contact à la cellule, qui peut alors empiéter sur le territoire d'une cellule voisine. La cellule ainsi
mutée devient maligne et peut se diviser et donner une cellule maligne fille.
Un agent antimitotique est une substance qui tue toute cellule qui entre en division. Comme les cellules
tumorales sont plus souvent en division que les cellules normales, l'agent anti mitotique peut freiner
notablement la prolifération des cellules malignes. Mais il n'est pas sans effet sur les cellules normales.
Simuler qualitativement l'évolution de cette population par des petits dessins symbolisant les cellules normales
et malignes et quantitativement par des courbes traçant l'effet de l'introduction de l'agent antimitotique à
différents temps dans la culture.

est ce que quelqu'un peut m'aider

merci

Niroken
Re: projet en programmation java

Hello,

On peut modéliser ton problème de la facon suivante :

On considère qu une culture contient des cellules.
Ces cellules peuvent être soit normales soit malignes.

Une cellule entre en division tous les X temps.
Pour matérialiser l'inhibition, on dira que sur une population de cellules on ne divisera qu un pourcentage de cette population, ce pourcentage sera à 100 pour les cellules malignes.
Ce paramétrage n'est pas très réaliste mais c'est une idée de départ.

On considère un agent mutagèe qui toutes les demi heures peut faire entrer des cellules en mutation parmi la population de cellules normales.

J'ai implémenté tout ceci de la facon suivante :

Cellule

package bean;

public abstract class Cellule {
	
	protected int mTempEcouleDepuisLastDivision;
	
	public abstract Cellule diviseCellule();

}

CelluleNormale

package bean;

public class CelluleNormale extends Cellule {

	private static int sTempEntreDivisions = 7200;
	public static int sPourcentageDivision = 10;
	
	public Cellule diviseCellule() {
		if (mTempEcouleDepuisLastDivision > sTempEntreDivisions) {
			mTempEcouleDepuisLastDivision = 0;
			if (Math.random() * 100 <= sPourcentageDivision) {
				return new CelluleNormale();
			}
		} else {
			mTempEcouleDepuisLastDivision++;
		}		
		
		return null;
	}

}

CelluleMaligne

package bean;

public class CelluleMaligne extends Cellule {

	private static int sTempEntreDivisions = 3600;
	public static int sPourcentageDivision = 100;
	
	public Cellule diviseCellule() {
		if (mTempEcouleDepuisLastDivision > sTempEntreDivisions) {
			mTempEcouleDepuisLastDivision = 0;
			if (Math.random() * 100 <= sPourcentageDivision) {
				return new CelluleMaligne();
			}
		} else {
			mTempEcouleDepuisLastDivision++;
		}
				
		return null;
	}

}

AgentMutagene

package bean;

public class AgentMutagene {
	
	private int mTempEcouleDepuisLastAction;
	
	private	static int sTempEntreActions = 1800;
	private static double sPourcentageMutationMaligne = 0.1;
	
	public Cellule muteCellule(Cellule pCellule) {
		if (pCellule instanceof CelluleNormale) {
			if (Math.random() * 100 <= sPourcentageMutationMaligne) {
				return new CelluleMaligne();
			}
		}
		
		return pCellule;
	}
	
	public boolean fireAction() {
		if (mTempEcouleDepuisLastAction > sTempEntreActions) {
			mTempEcouleDepuisLastAction = 0;
			return true;
		} else {
			mTempEcouleDepuisLastAction++;
			return false;
		}
	}
	
}

Culture

package job;

import java.util.ArrayList;
import java.util.List;

import bean.AgentMutagene;
import bean.Cellule;
import bean.CelluleMaligne;
import bean.CelluleNormale;

public class Culture {
	
	private int mTempEcoule;
	private AgentMutagene mAgentMutagene;
	private List<Cellule> mCellules;
	
	public Culture(int pNombreCellules) {
		mAgentMutagene = new AgentMutagene();
		mCellules = new ArrayList<Cellule>();
		
		for (int i = 0; i < pNombreCellules; i++) {
			mCellules.add(new CelluleNormale());
		}
	}
	
	private void diviseCellules() {
		for (int i = 0; i < mCellules.size(); i++) {
			Cellule vCelluleTmp = mCellules.get(i).diviseCellule();
			
			if (vCelluleTmp != null) {
				mCellules.add(vCelluleTmp);
			}			
		}
	}
	
	private void fireAgentMutageneAction() {
		if (mAgentMutagene.fireAction()) {
			for (int i = 0; i < mCellules.size(); i++) {
				mCellules.set(i, mAgentMutagene.muteCellule(mCellules.get(i)));
			}
		}
	}
	
	private int getCountCellulesNormales() {
		int vResult = 0;
		
		for (int i = 0; i < mCellules.size(); i++) {
			if (mCellules.get(i) instanceof CelluleNormale) {
				vResult++;
			}
		}
		
		return vResult;
	}
	
	private int getCountCellulesMalignes() {
		int vResult = 0;
		
		for (int i = 0; i < mCellules.size(); i++) {
			if (mCellules.get(i) instanceof CelluleMaligne) {
				vResult++;
			}
		}
		
		return vResult;
	}
	
	private void displayCellulesStatus() {
		System.out.println(
				"Seconde : " + mTempEcoule +
				" Population de Cellules : " + mCellules.size() + 
				" Cellules Normales : " + getCountCellulesNormales() + 
				" Cellules Malignes : " + getCountCellulesMalignes());
	}
	
	public void simuleCultureLife() {
		for (int i = 0; i < 100000; i++) {
			fireAgentMutageneAction();
			diviseCellules();
			displayCellulesStatus();
			mTempEcoule++;
		}
	}
	
}

Program

import job.Culture;


public class Program {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Culture(100).simuleCultureLife();
	}

}

Il y a moyen d'améliorer, mais c'est un départ.

Bonne chance,
Niroken