Sự cám dỗ đầu tiên với việc mô hình hóa điều này là sử dụng cấu trúc dữ liệu kiểu bốn cây. Mỗi nguyên tử carbon có bốn kết nối, mỗi oxy hai và mỗi hydro một. Tôi không nghĩ rằng đây là giải pháp thích hợp.
Tôi nghĩ rằng giải pháp thích hợp đã được phát minh. Cấu trúc dữ liệu để sử dụng là một chuỗi.
Nghĩ về điều này. Các nhà hóa học đã mô hình hóa các hợp chất hữu cơ trong một thời gian dài bây giờ. Nếu bạn chỉ ra một nhà hóa học CH4, họ sẽ nhận ra ngay đó là metan. Chỉ cho họ CH3CH2OH và họ sẽ nhận ra đó là ethanol. Họ nhận ra điều này bởi vì họ xác định tổ hợp CH3CH2 là hợp chất "eth" (có nghĩa là hai nguyên tử carbon) và OH là một nhóm "anol" hoặc rượu.
Chúng tôi cũng có một phương pháp có sẵn để tìm kiếm và xác định các chuỗi con - biểu thức chính quy.
Vì vậy, để biểu diễn một cách hợp lý một hợp chất hữu cơ, tôi sẽ định nghĩa một hợp chất có chứa một chuỗi đại diện cho công thức hóa học của nó và một chuỗi xác định tên hóa học của nó. Nó có thể có các phương pháp xác định tính chất "đặc biệt" nào mà hợp chất có.
Một lớp ví dụ trong 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);
}
}
Rõ ràng bạn sẽ cần phải viết lớp nameCalculator, tính toán tên dựa trên công thức. Bạn sẽ cần tạo regex xác định vòng benzen. Xác định các biểu thức bổ sung cho từng nhóm bạn muốn tìm kiếm.
Ưu điểm của việc mô hình hóa các hợp chất theo cách này là ngôn ngữ chính xác trong lĩnh vực kinh doanh của người dùng cuối. Tất cả những gì bạn là nhà phát triển cần biết là các chuỗi để tìm kiếm, có thể dễ dàng được cung cấp bởi một cuốn sách văn bản hoặc một nhà hóa học.
Nếu các biểu diễn cấu trúc của các hóa chất này là bắt buộc, tôi khuyên bạn nên xem xét việc duy trì các biểu diễn SMILES của công thức.
Đại diện công thức hóa học SMILES