![]() |
OOP - Atome, Moleküle, ...
Hi,
wie würdet ihr am besten Atome als Objekte darstellen, wenn man davon ausgeht, daß die Elementeigenschaften nicht notwendig sind, da die Ordnungszahl reicht? Ich will Moleküle sowohl graphisch darstellen (Struktur) als auch laden und speichern können. Außerdem soll es noch für funktionelle Gruppen eine eigene ID (ala Ordnungzahl für Elemente - nur eben für Gruppen) geben - das ist aber theoretisch kein Problem. Es geht auch nicht darum wie ich es darstelle oder lade/speichere, sondern vielmehr darum, wie ich ein Atom und ein aus Atomen zusammengesetztes Molekül clever abstrahiere. Gruß, Oliver |
Re: OOP - Atome, Moleküle, ...
naja, bei den Atomeigenschaften kannste viele mit bisserl Wissen aus Chemie aus der Ordnungszahl ableiten. Von der organisation der Daten würde ich (wie ich das immer tue :) ) zu den guten alten arrays und records greifen, denn warum sollte jedes atom eigene prozeduren haben? (irgendwann bekehrt mich vielleicht noch wer zu OOP)
Datentypen: Atom: Eigenschaften (was halt im Periodensystem steht) Molekül: Eigenschaften + Aufbau den Aufbau würde ich wie folgt speichern: ein array mit positionen, bei jedem element in diesem array gibt es neben der Ordnungszahl, Ladung etc. noch eine Info, mit wem es verbunden ist Damit sollte man das Zeug halbwegs verwalten können. Eine andere Alternative wäre das Molekül als Baumstruktur zu speichern, was bei kompexverbindungen sicher sinnvoll wäre... MathiasH |
Re: OOP - Atome, Moleküle, ...
Du könntest ein Molekül als Array of Array of CAtom (Deine Klasse), darstellen. Damit könntest du die Position aller Atome speichern. Ausserdem solltest du alle Atome nummerieren (von links nach rechts, von oben nach unten ...) und dann noch eine Liste erstellen in der die Bindungsart (einfach, doppelBinung) gespeichert ist.
Falls du auf die unterschiedlichen Atomradien achten willst, kannst du ja für größere atome mehrere Elemente im Array² belegen. |
Re: OOP - Atome, Moleküle, ...
Zitat:
Zitat:
Zitat:
Zitat:
Also definitiv gibt es folgendes
Delphi-Quellcode:
Wie weiter?
TAtom = class
FOrdnungszahl:Integer; end; Die Valenzen müßten doch irgendwie so kodiert werden können, daß die Position des Atoms im Molekül eindeutig bestimmbar ist, wenn ich das Anfangsatom kenne (ein beliebiges an dem es nicht weiter geht)! Oliver |
Re: OOP - Atome, Moleküle, ...
Zitat:
H1(1/0) (rechts daneben) H2(0/1) (oben drüber) |
Re: OOP - Atome, Moleküle, ...
Aber es gibt doch Stoffe mit mehr als 4 Valenzen, korrekt? Wie bringe ich denn die dann im Raster unter? Theoretisch ist ja nur Nord/Süd/Ost/West frei in einem 2D-Raster.
Oliver |
Re: OOP - Atome, Moleküle, ...
moin,
wie willst du bitte ein Molekül als Strukturformel darstellen, wenn du die Bindungswinkel ignoriert? Irgendwie musst du doch die Beziehungen zwischen den Molekülen darstellen/einbeziehen?! |
Re: OOP - Atome, Moleküle, ...
also von einem solchen raster würde ich dir abraten, das stößt viel zu schnell an seine grenzen, wenn es daran geht Moleküle darzustellen die ein klein wenig komplizierter sind als H20
ka, wie man das am besten OOP macht, aber im Prinzip muss es ja recht ähnlich aussehen als mit arrays und records: atom: Ordungszahl econfig: Elektronenkonfiguration (schon mal sowas gesehen : 1s² 2s² 2p³ ?) mit einem solchen muster müsste man das recht gut speichern können. Ladung ist da ja bereits inmpliziert weitere Eigenschaften z.B. radius, Farbe, Schmelzpunkt. Diese könnte man allerdings auch aus einer externen Tabelle/Array/Datenbank laden molekül: array of molek_childs; molek_childs: atom: TAtom; x, y(, z) für Position (relativ oder absolut) connections: array of DWord (zu welchen atomen hat es verbindungen (id im array); So nuj ist aber mal selberdenken angesagt, findest du nicht? MathiasH |
Re: OOP - Atome, Moleküle, ...
Dann nimm ein Array of RAtom;
Delphi-Quellcode:
Dieses Array kannst du dann ganz lässig abspeichern, aufrufen und mit ner Procedure zeichnen lassen.
Type RAtom = record
x,y: integer; // Koordinaten stoff: integer; // Atomsorte Platz: integer; // Platz in der Bindungsliste ...end; €dit: Und wieder hatte Mathias eine ähnliche Idee und hat schneller geschrieben :wall: |
Re: OOP - Atome, Moleküle, ...
Prinzipiel würde ich als Datenstruktur einen Baum preferieren:
Delphi-Quellcode:
wenn tAtom.Bindungen = nil, dann ist es ein einzelnes Atom, andernfalls ein Molekül
tAtom = class;
tbindung = class Art: integer;// einfach-, doppel-, dreifach-Bindung PartnerAtom: tAtom; // Winkel // Länge end; tAtom = class Symbol: string; Ordnungszahl: integer; // etc. Bindungen: array of tBindung; end; (allerdings dürfte diese Art von Datenstruktur nicht alle Anforderungen der OOP-Kapselung erfüllen :?) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz