Die erste Versuchung bei der Modellierung besteht darin, eine Datenstruktur im Quad-Tree-Stil zu verwenden. Jedes Kohlenstoffatom hat vier Verbindungen, jeder Sauerstoff zwei und jeder Wasserstoff eins. Ich denke jedoch nicht, dass dies die richtige Lösung ist.
Ich denke, dass die richtige Lösung bereits erfunden wurde. Die zu verwendende Datenstruktur ist eine Zeichenfolge.
Denk darüber nach. Chemiker modellieren seit geraumer Zeit organische Verbindungen. Wenn Sie einen Chemiker CH4 zeigen, wird dieser sofort als Methan erkannt. Zeigen Sie ihnen CH3CH2OH und sie werden das als Ethanol erkennen. Sie erkennen dies, weil sie die CH3CH2-Kombination als "eth" -Verbindung (dh zwei Kohlenstoffatome) und das OH als "Anol" - oder Alkoholgruppe identifizieren.
Wir haben auch eine bereits vorhandene Methode zum Suchen und Identifizieren von Teilzeichenfolgen - reguläre Ausdrücke.
Um eine organische Verbindung programmatisch darzustellen, würde ich eine Verbindung so definieren, dass sie eine Zeichenfolge enthält, die ihre chemische Formel darstellt, und eine Zeichenfolge, die ihren chemischen Namen definiert. Es könnte Methoden geben, die identifizieren, welche "besonderen" Eigenschaften die Verbindung hatte.
Eine Beispielklasse in 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);
}
}
Natürlich müssten Sie die Klasse nameCalculator schreiben, die den Namen basierend auf der Formel berechnet. Sie müssten den regulären Ausdruck erstellen, der einen Benzinring definiert. Definieren Sie zusätzliche reguläre Ausdrücke für jede der Gruppen, nach denen Sie suchen möchten.
Der Vorteil der Modellierung der Verbindungen auf diese Weise liegt in der Sprache, die genau im Geschäftsbereich des Endbenutzers liegt. Alles, was Sie als Entwickler wissen müssen, sind die zu suchenden Zeichenfolgen, die entweder von einem Lehrbuch oder einem Chemiker bereitgestellt werden können.
Wenn strukturelle Darstellungen dieser Chemikalien erforderlich sind, empfehle ich, die SMILES-Darstellungen der Formel beizubehalten.
SMILES Darstellung der chemischen Formel