Jestem nowy w programowaniu i próbuję rozwiązać swój pierwszy duży problem i napisać swój pierwszy duży program. Szukałem przykładów kodu open source do nauki, ale jak dotąd znalazłem tylko kod w językach, których nie do końca rozumiem lub które zawierają pokrewne, ale wciąż zbyt odległe rzeczy, aby naprawdę się uczyć. Mam problem z wykonaniem kilku kroków koncepcyjnych.
Chcę stworzyć prosty program do tworzenia, modyfikowania, a później reprezentowania małych cząsteczek organicznych. Jest to głównie ćwiczenie edukacyjne. Użytkownik poda ciąg SMILES lub wybierze podstawowy zestaw cząsteczek startowych, a następnie będzie mógł budować tę cząsteczkę graficznie lub za pomocą składni wprowadzania tekstu. Jednak nie jestem jeszcze w tym momencie złożoności. Nie potrafię nawet w pełni zrozumieć, jak tworzyć klasy / obiekty do przechowywania cząsteczek. Zatem moje zwięzłe pytanie: w jaki sposób wykorzystuję klasy / obiekty do budowy molekuł przy zachowaniu wszystkich poziomów informacji i jakich struktur danych powinienem użyć jako atrybutów, które obiekty? I czy obiekty mogą być atrybutami innych obiektów?
Oto mój dotychczasowy tok myślenia: zastanawiałem się nad klasą „Molekuła”, potem klasą / podklasą „Atom” i podklasą „Bond”, a może także podklasą „FunctionalGroup”. To wydaje się dobre miejsce na rozpoczęcie, ale może nie rozumiem OOP i to jest złe. Ale wtedy mój problem jest naprawdę zagmatwany (dla mnie). Mimo że mam wszystkie te koncepcje / pomysły / klasy, nie do końca rozumiem, jakie struktury danych są potrzebne do reprezentowania cząsteczki. Dobrze byłoby mieć listę atomów. Czy ta lista może być listą obiektów Atom? Potrzebowałbym również sposobu na przechowywanie połączeń. Matryca 2D wydaje się dobrym pomysłem, z kolejnością wiązań jako liczbami całkowitymi w pozycjach matrycy.
W tym momencie zaczynam się przytłaczać zadaniem. Czy wszystko, co do tej pory robię, ma sens? Dołączenie do tego aspektu wyświetlania / rysowania może oznaczać, że muszę przepisać / przerobić wiele z tych rzeczy, ale po prostu próbuję dojść do punktu, w którym mogę przynajmniej przechowywać cząsteczki z odpowiednimi danymi, a następnie uzyskać dostęp te dane do sprawdzenia / modyfikacji. Myślałem o zrobieniu tego w Pythonie, więc kod / klasy mogłyby wyglądać mniej więcej tak: http://pastebin.com/uUi1BMzr
Być może są to naprawdę pytania programowe dla StackOverflow, ale myślałem, że było wystarczająco szczegółowe, aby przejść tutaj. Każda pomoc byłaby bardzo mile widziana, nawet jeśli tylko wskazałeś, gdzie popełniłem błędy koncepcyjne. Z góry dziękuję.