BioJava:CookBookItaliano:Alphabets:Component

Come posso dividere i Simboli di un CrossProductAlphabets i maniera tale da recuperare i Simboli che li compongo?

I CrossProductAlphabets sono utilizzati per rappresentare gruppi di Simboli come se fossero uno solo. Questo è molto utile per trattare oggeti come i codoni come se fossero singoli Simboli. A volte comunque è necessario riconvertire i Simboli nelle loro componenti originali. Mostriamo come questo può essere ottenuto.

I Simboli di un CrossProductAlphabet sono implementazioni della interfaccia AtomicSymbol. Il prefisso ‘Atomico’ suggerisce che i Simboli non possano essere divisi, perciò uno si può domandare:’come posso dividere qualcosa che è indivisibile?’. La definzione completa di AtomicSymbol ci dice precisamente che esso non può essere diviso in un Simbolo più semplice che fa parte dello stesso Alfabeto di cui fa parte l’AtomicSymbol.

Ciò va in contrasto con la definizione di BasisSymbol perchè: un BasisSymbol invece può essere diviso in simboli che fanno parte dello stesso Alfabeto. Per ciò i BasisSymbols si comportano diversamente. Per ulteriori chiarimenti sui BasisSymbol seguire questo link.

```java package biojava_in_anger;

import java.util.*; import org.biojava.bio.seq.*; import org.biojava.bio.symbol.*;

public class BreakingComponents {

 public static void main(String[] args) {
   //creo 'codon' alphabet a partire da una lista 
   List l = Collections.nCopies(3, DNATools.getDNA());
   Alphabet alpha = AlphabetManager.getCrossProductAlphabet(l);

   //prendo il primo elemento dell'alfabeto
   Iterator iter = ((FiniteAlphabet)alpha).iterator();
   AtomicSymbol codon = (AtomicSymbol)iter.next();
   System.out.print(codon.getName()+" is made of: ");

   //vediamo come è formato
   List symbols = codon.getSymbols();
   for(int i = 0; i < symbols.size(); i++){
     if(i != 0)
       System.out.print(", ");
     Symbol sym = (Symbol)symbols.get(i);
     System.out.print(sym.getName());
   }
 }

} ```