Godaan pertama dengan pemodelan ini adalah dengan menggunakan struktur data gaya quad-tree. Setiap atom karbon memiliki empat koneksi, masing-masing oksigen dua dan masing-masing satu hidrogen. Saya tidak berpikir bahwa ini adalah solusi yang tepat.
Saya pikir solusi yang tepat telah ditemukan. Struktur data yang digunakan adalah string.
Pikirkan tentang ini. Kimiawan telah memodelkan senyawa organik untuk waktu yang cukup lama sekarang. Jika Anda menunjukkan ahli kimia CH4, mereka akan segera mengenali itu sebagai metana. Tunjukkan pada mereka CH3CH2OH dan mereka akan mengenalinya sebagai etanol. Mereka mengenali ini karena mereka mengidentifikasi kombinasi CH3CH2 sebagai senyawa "et" (artinya dua atom karbon) dan OH sebagai "anol" atau kelompok alkohol.
Kami juga memiliki metodologi yang sudah ada sebelumnya untuk mencari dan mengidentifikasi substring - ekspresi reguler.
Jadi untuk mewakili secara pemrograman suatu senyawa organik, saya akan mendefinisikan suatu senyawa sebagai mengandung string yang mewakili formula kimianya dan string yang mendefinisikan nama kimianya. Itu dapat memiliki metode yang mengidentifikasi sifat "khusus" yang dimiliki senyawa.
Contoh kelas di 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);
}
}
Tentunya Anda perlu menulis kelas nameCalculator, yang menghitung nama berdasarkan rumus. Anda harus membuat regex yang mendefinisikan cincin benzine. Tetapkan regex tambahan untuk setiap grup yang ingin Anda cari.
Keuntungan dari memodelkan senyawa dengan cara ini adalah dalam bahasa yang persis berada dalam domain bisnis pengguna akhir. Yang perlu Anda ketahui sebagai pengembang adalah string yang harus dicari, yang dapat dengan mudah disediakan oleh buku teks atau ahli kimia.
Jika representasi struktural dari bahan kimia ini diperlukan, saya sarankan untuk menjaga representasi SMILES dari formula ini.
Representasi formula kimia SMILES