Описание молекулы как молекулярного графа
© Захаров С.В.
Говоря математическим языком, структурная химическая формула является ненаправленным раскрашенным мультиграфом. Термин "ненаправленный" означает отсутствие у рёбер молекулярного графа (т.е. у химических связей) какого либо определённого направления; термин "раскрашенный" - существование у вершин графа дополнительных характеристик, таких, как символ химического элемента и др., упомянутые выше; и, наконец, приставка "мульти-" означает, что между две вершины могут быть инцидентны сразу нескольким рёбрам (т.е. два атома могут быть связаны кратной связью).
Поэтому ясно, что, описывая на каком-либо объектно-ориентированном языке, типа C++ или Object Pascal (Delphi), молекулярный граф, мы должны действовать примерно таким образом: сначала создать базовый класс "Граф", затем, на основе класса "Граф", создать класс "МультиГраф", а уже затем, на основе класса "МультиГраф", создать класс "Молекулярный Граф", хотя, разумеется, предлагаемая иерархия классов не является единственно возможной.
Например, в качестве альтернативы предложенной выше схемы, для языка C++ (но не для Delphi) можно предложить вариант с использованием множественного наследования и виртуального базового класса "Граф": и класс "МультиГраф", и класс "Раскрашенный Граф", независимо наследуются от класса "Граф", используя последний в качестве виртуального базового класса (не путать с абстрактным классом !!!). Затем класс "Молекулярный Граф", синоним раскрашенного мультиграфа, создаётся на базе сразу двух классов - класса "МультиГраф" и класса "Раскрашенный граф". Одно из преимуществ такого подхода было бы в том, что, затрачивая примерно столько же времени и труда, что и в первом случае, мы получили бы дополнительный класс "Раскрашенный Граф" (но не мультиграф), который мы пропускаем в первом варианте решения (а вдруг бы пригодился когда-нибудь).
Далее последовательно рассматриваются стадии предложенного выше (первого варианта) решения. Поскольку для программистов не составит труда написать реализацию классов "Граф", "МультиГраф" и "Молекулярный Граф", я, как правило, привожу лишь объявления этих классов, чтобы можно было понять фрагменты программ, реализующих более интересные алгоритмы с использованием этих классов, которые я буду публиковать. Используется язык C++:
Описание класса "Граф"
Описание класса "МультиГраф"
Описание класса "Молекулярный Граф"
Для использования с другими языками программирования разрабатывается набор COM-интерфейсов и основанный на работе с ними графический редактор молекул (Delphi, с исходниками).