AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OOP - Atome, Moleküle, ...

Ein Thema von Blutiger Anfänger · begonnen am 15. Jul 2004 · letzter Beitrag vom 15. Aug 2004
Antwort Antwort
Seite 1 von 3  1 23      
Blutiger Anfänger
(Gast)

n/a Beiträge
 
#1

OOP - Atome, Moleküle, ...

  Alt 15. Jul 2004, 20:00
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
  Mit Zitat antworten Zitat
Benutzerbild von MathiasH
MathiasH

Registriert seit: 14. Jun 2002
Ort: Vachendorf (SO-Bayern)
41 Beiträge
 
Delphi 6 Professional
 
#2

Re: OOP - Atome, Moleküle, ...

  Alt 15. Jul 2004, 20:14
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
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#3

Re: OOP - Atome, Moleküle, ...

  Alt 15. Jul 2004, 20:17
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Blutiger Anfänger
(Gast)

n/a Beiträge
 
#4

Re: OOP - Atome, Moleküle, ...

  Alt 15. Jul 2004, 20:28
Zitat von Toxman:
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.
Nope, Atomradien spielen keine Rolle. Bindungswinkel auch nicht. Aber welche Eigenschaften bräuchte ich denn deiner Meinung nach um die 2D-Position eines Atoms im Molekül zu kodieren?

Zitat von MathiasH:
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)
Es soll und muß OOP sein. Das Programm wird in C++ verfaßt und soll u.a. auf Windows und Linux laufen.

Zitat von MathiasH:
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
Ja, aber welche Eigenschaften. Genau dahingehend such ich ja Vorschläge! Aus dem PSE brauche ich nur die Ordnungszahl - die kann als Index in das PSE dienen (wobei das PSE als Tabelle o.ä. abgespeichert sein kann).

Zitat von MathiasH:
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...
Wie stellst du dir das vor? Hatte auch über sowas nachgedacht, aber keine praktikable Lösung gefunden.

Also definitiv gibt es folgendes

Delphi-Quellcode:
TAtom = class
FOrdnungszahl:Integer;
end;
Wie weiter?

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
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#5

Re: OOP - Atome, Moleküle, ...

  Alt 15. Jul 2004, 20:38
Zitat:
Aber welche Eigenschaften bräuchte ich denn deiner Meinung nach um die 2D-Position eines Atoms im Molekül zu kodieren
Die Eigenschaften, die man fast immer benutzt um einen Punkt im R2 zu bezeichnen: Eine X- und eine Y-Koordinate. Also würde ich voschlagen, dass du beim erstellen ein Atom (c oder sowas) zum Chef-Atom ernennst und alle anderen Atome relativ dazu speicherst. Also H²O mit Chefatom:=0 würde dann so abgespeichert werden:
H1(1/0) (rechts daneben)
H2(0/1) (oben drüber)
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Blutiger Anfänger
(Gast)

n/a Beiträge
 
#6

Re: OOP - Atome, Moleküle, ...

  Alt 15. Jul 2004, 20:47
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
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#7

Re: OOP - Atome, Moleküle, ...

  Alt 15. Jul 2004, 20:52
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?!
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Benutzerbild von MathiasH
MathiasH

Registriert seit: 14. Jun 2002
Ort: Vachendorf (SO-Bayern)
41 Beiträge
 
Delphi 6 Professional
 
#8

Re: OOP - Atome, Moleküle, ...

  Alt 15. Jul 2004, 20:58
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
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#9

Re: OOP - Atome, Moleküle, ...

  Alt 15. Jul 2004, 21:00
Dann nimm ein Array of RAtom;
Delphi-Quellcode:
Type RAtom = record
x,y: integer; // Koordinaten
stoff: integer; // Atomsorte
Platz: integer; // Platz in der Bindungsliste
...end;
Dieses Array kannst du dann ganz lässig abspeichern, aufrufen und mit ner Procedure zeichnen lassen.

€dit: Und wieder hatte Mathias eine ähnliche Idee und hat schneller geschrieben
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#10

Re: OOP - Atome, Moleküle, ...

  Alt 15. Jul 2004, 21:06
Prinzipiel würde ich als Datenstruktur einen Baum preferieren:
Delphi-Quellcode:
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;
wenn tAtom.Bindungen = nil, dann ist es ein einzelnes Atom, andernfalls ein Molekül

(allerdings dürfte diese Art von Datenstruktur nicht alle Anforderungen der OOP-Kapselung erfüllen )
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz