La première tentation de la modélisation consiste à utiliser une structure de données de style à quatre arbres. Chaque atome de carbone a quatre connexions, chaque oxygène deux et chaque hydrogène. Je ne pense pas que ce soit la bonne solution.
Je pense que la bonne solution a déjà été inventée. La structure de données à utiliser est une chaîne.
Penses-y. Les chimistes modélisent les composés organiques depuis assez longtemps maintenant. Si vous montrez un chimiste CH4, il le reconnaîtra immédiatement comme du méthane. Montrez-leur CH3CH2OH et ils le reconnaîtront comme de l'éthanol. Ils le reconnaissent parce qu'ils identifient la combinaison CH3CH2 comme un composé "eth" (signifiant deux atomes de carbone) et l'OH comme un groupe "anol" ou alcool.
Nous avons également une méthodologie préexistante pour rechercher et identifier les sous-chaînes - expressions régulières.
Donc, pour représenter par programme un composé organique, je définirais un composé comme contenant une chaîne qui représente sa formule chimique et une chaîne définissant son nom chimique. Il pourrait avoir des méthodes permettant d'identifier les propriétés "spéciales" du composé.
Un exemple de classe en C #:
public class OrganicCompound
{
private Regex benzineRingRegex;
public OrganicCompound(string formula, NameCalculator nameCalculator, Regex benzineRingRegex)
{
this.Formula = formula;
this.Name = nameCalculator.CalculateName(formula);
this.benzineRingRegex = benzineRingRegex
}
public string Formula { get; private set; }
public string Name { get; private set; }
public bool HasBenzeneRing()
{
return Regex.IsMatch(this.Formula, benzineRingRegex);
}
}
De toute évidence, vous devez écrire la classe nameCalculator, qui calcule le nom en fonction de la formule. Vous auriez besoin de créer l'expression régulière qui définit un cycle de benzine. Définissez des expressions rationnelles supplémentaires pour chacun des groupes que vous souhaitez rechercher.
L'avantage de modéliser les composés de cette façon est que c'est dans le langage qui appartient exactement au domaine d'activité de l'utilisateur final. Tout ce que vous, le développeur, devez savoir, ce sont les chaînes à rechercher, qui peuvent facilement être fournies par un manuel ou un chimiste.
Si des représentations structurelles de ces produits chimiques sont nécessaires, je suggère de chercher à conserver les représentations SMILES de la formule.
Représentation de la formule chimique de SMILES