This commit is contained in:
2025-12-10 00:14:53 +01:00
parent df9520821a
commit 41df0a89b9
31 changed files with 579 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,4 @@
// juste un type énuméré pour nommer les bases
public enum Base {
A,C,G,T
}

Binary file not shown.

View File

@@ -0,0 +1,35 @@
// Fichier Exemple pour le dernier exercice sur l'ADN (Iterable)
public class Exemple{
public static void main(String[] args) {
// codon GCT code l'analine https://en.wikipedia.org/wiki/DNA_codon_table
// stop codon TAG, voir https://en.wikipedia.org/wiki/Stop_codon
System.out.println("construction du brin GCTTAG");
MonMaillon l = new MonMaillon(Base.G);
l = new MonMaillon(Base.A,l);
l = new MonMaillon(Base.T,l);
l = new MonMaillon(Base.T,l);
l = new MonMaillon(Base.C,l);
l = new MonMaillon(Base.G,l);
MonBrin m = new MonBrin(l);
System.out.println("l'affichage par défaut du brin ne va pas vous plaire");
System.out.println(m.toString());
System.out.println("On peut afficher en itérant avec forEach (une méthode proposée par Iterable, regardez la doc)");
m.forEach(b -> System.out.println(b));
System.out.println("On a découplé la navigation de la structuration en implémentant iterable plutôt que iterator. On peut maintenant naviguer 2 fois facilement, c'est vraiment trop fort.");
m.forEach(b -> System.out.println(b));
System.out.println("On peut même utiliser les boucles avancées de Java 8 et notre code en devient presque pythonesque");
for(Base b: m){
System.out.println(b);
}
}
}

Binary file not shown.

View File

@@ -0,0 +1,40 @@
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
MonBrin code un brin d'ADN sous forme de liste simplement chaînée.
Plusieurs instances de MonMaillon reliées convenablement forment une structure de liste simplement chaînée contenant pour chaque maillon le nom de la base.
On n'utilise pas java.util et on recode tout.
Cette version est correcte : la structuration et la navigation sont dans 2 classes séparées.
La classe MonBrin implémente Iterable au sens où elle peut générer à la demande un objet Iterator.
NB : Notez que j'implémente Iterable<Base> plutôt que Iterable qui n'était pas tout à fait propre
c'est un peu technique et c'est lié aux types génériques.
Il y a des détails ici
https://stackoverflow.com/questions/20790770/why-cant-i-assign-a-raw-type-to-a-parameterized-type-java?rq=1
*/
public class MonBrin implements Iterable<Base> {
// premier maillon du brin
private MonMaillon debut;
// Le constructeur fabrique un brin à partir du premier maillon p;
public MonBrin(MonMaillon p){
this.debut = p;
}
public MonMaillon getDebut(){
return this.debut;
}
/** Pour naviguer?
On implémente l'interface iterator de java.util ici
L'avantage c'est que c'est standard et tout le monde comprendra sans trop de mal comment la navigation fonctionne.
**/
@Override
public Iterator<Base> iterator() {
return new MonBrinIterator(this.debut);
}
}

Binary file not shown.

View File

@@ -0,0 +1,32 @@
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
MonBrinIterator
gère la navigation dans un Brin d'ADN
*/
public class MonBrinIterator implements Iterator<Base> {
// maillon courant de la navigation
private MonMaillon courant;
public MonBrinIterator(MonMaillon m){
this.courant = m;
}
@Override
public boolean hasNext(){
return this.courant != null;
}
@Override
public Base next() {
if (this.courant == null) {
throw new NoSuchElementException("Plus de base dans ce brin");
}
Base valeur = this.courant.getBase();
this.courant = this.courant.getSuiteMaillon();
return valeur;
}
}

Binary file not shown.

View File

@@ -0,0 +1,37 @@
/**
MonMaillon code un maillon d'un brin d'ADN.
plusieurs instances reliées convenablement forment une structure de liste simplement chaînée contenant pour chaque maillon le nom de la base.
On n'utilise pas java.util et on recode tout.
*/
public class MonMaillon {
// la base stockée dans ce maillon
private Base base;
// le maillon suivant dans la chaîne (null si fin)
private MonMaillon suite;
// Le constructeur de base retourne un brin à une base;
public MonMaillon(Base b){
this.base = b;
this.suite = null;
}
// Le constructeur évolué ajoute une base à un brin.
public MonMaillon(Base b, MonMaillon l){
this.base = b;
this.suite = l;
}
public Base getBase(){
return this.base;
}
public MonMaillon getSuiteMaillon(){
return this.suite;
}
}