Перша спокуса при моделюванні цього полягає у використанні структури даних у стилі чотирьох дерев. Кожен атом вуглецю має чотири з'єднання, кожен кисень два та кожен водень. Я не думаю, що це правильне рішення.
Я думаю, що правильне рішення вже винайдено. Структура даних, яку слід використовувати, - це рядок.
Подумайте над цим. Хіміки вже досить давно моделюють органічні сполуки. Якщо ви покажете хіміка СН4, вони негайно визнають це метаном. Покажіть їм CH3CH2OH, і вони визнають це етанолом. Вони визнають це через те, що вони ідентифікують комбінацію CH3CH2 як сполуку "et" (мається на увазі два атоми вуглецю), а ОН - як "анольну" або алкогольну групу.
Також у нас є існуюча методологія пошуку та ідентифікації підрядків - регулярні вирази.
Отже, щоб програмно представляти органічну сполуку, я б визначив сполуку як такий, що містить рядок, який представляє його хімічну формулу та рядок, що визначає його хімічну назву. У ньому можуть бути методи, які визначили, які «особливі» властивості мала сполука.
Приклад класу в 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);
}
}
Очевидно, вам потрібно буде написати клас nameCalculator, який обчислює ім'я, виходячи з формули. Вам потрібно створити регулярний вираз, який визначає бензинове кільце. Визначте додаткові регулярні вирази для кожної групи, яку ви хочете шукати.
Перевага моделювання сполук таким чином полягає в тому, що мова перебуває саме в діловій галузі кінцевого споживача. Все, що ви, як розробник, має знати, - це рядки для пошуку, які можна легко надати або підручником, або хіміком.
Якщо потрібні структурні представлення цих хімічних речовин, я пропоную розглянути можливість збереження представлень SMILES формули.
Представлення хімічної формули SMILES