Bunu modellemenin ilk cazibesi dört ağaç tarzı bir veri yapısı kullanmaktır. Her karbon atomu, her biri iki oksijen ve her biri bir hidrojen olmak üzere dört bağlantıya sahiptir. Bunun doğru çözüm olduğunu düşünmüyorum.
Bence uygun çözüm zaten icat edildi. Kullanılacak veri yapısı bir dizedir.
Bunun hakkında düşün. Kimyacılar uzun süredir organik bileşikler modelliyorlar. Bir kimyager CH4'ü gösterirseniz, bunu hemen metan olarak tanıyacaklardır. Onlara CH3CH2OH gösterin ve bunu etanol olarak tanıyacaklar. Bunu fark ederler çünkü CH3CH2 kombinasyonunu bir "et" bileşiği (iki karbon atomu anlamına gelir) ve OH'yi bir "anol" veya alkol grubu olarak tanımlarlar.
Ayrıca alt dizeleri aramak ve tanımlamak için önceden var olan bir metodolojimiz var - normal ifadeler.
Dolayısıyla, organik olarak bir bileşiği programlı olarak temsil etmek için, bir bileşiği, kimyasal formülünü temsil eden bir ip ve kimyasal adını tanımlayan bir ip içerecek şekilde tanımlayacağım. Bileşiğin hangi "özel" özelliklerine sahip olduğunu belirleyen yöntemlere sahip olabilir.
C # 'da bir örnek sınıf:
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);
}
}
Açıkçası, formülü temel alan adı hesaplayan nameCalculator sınıfını yazmanız gerekir. Bir benzin halkasını tanımlayan regex'i oluşturmanız gerekir. Aramak istediğiniz grupların her biri için ek regex'ler tanımlayın.
Bileşikleri bu şekilde modellemenin avantajı, tam olarak son kullanıcının iş alanında olan dilde olmasıdır. Geliştiricinin bilmesi gereken tek şey, bir metin kitabı veya bir kimyager tarafından kolayca sağlanabilen, aranacak dizelerdir.
Bu kimyasalların yapısal temsili gerekirse, formülün SMILES temsillerini muhafaza etmeyi öneriyorum.
SMILES kimyasal formül gösterimi