Heute möchte ich Ihnen eine Frage zu den Fähigkeiten von C ++ stellen, eine bestimmte Softwarearchitektur zu realisieren.
Natürlich habe ich die Suche verwendet, aber keine direkt verknüpfte Antwort gefunden.
Grundsätzlich ist es mein Ziel, ein Programm zu erstellen, mit dem der Benutzer beliebig zusammengesetzte physikalische Systeme, z. B. ein fahrendes Auto, modellieren und simulieren kann. Ich gehe davon aus, eine Bibliothek physikalischer Modelle (Funktionen innerhalb von Klassen) zu haben. Jede Funktion kann abhängig von der zugrunde liegenden physikalischen Beschreibung einige Eingaben haben und einige Ausgaben zurückgeben, z. B. ein Verbrennungsmotormodell, ein Luftwiderstandsmodell, ein Radmodell usw.
Die Idee ist nun, dem Benutzer ein Framework bereitzustellen, mit dem er alle Funktionen gemäß seinen Anforderungen zusammenstellen kann, dh jedes physische Verhalten abbilden kann. Das Framework sollte Funktionen zum Verbinden der Ausgänge und Eingänge verschiedener Funktionen bereitstellen. Daher stellt das Framework eine Containerklasse bereit. Ich nenne es KOMPONENTE, die ein oder mehrere Modellobjekte aufnehmen kann (FUNCTION). Diese Container können auch andere Komponenten (vgl. Composite Pattern) sowie die Verbindungen (CONNECTOR) zwischen den Funktionsparametern enthalten. Darüber hinaus bietet die Komponentenklasse einige allgemeine numerische Funktionen wie den mathematischen Löser usw.
Die Zusammensetzung der Funktionen sollte zur Laufzeit erfolgen. In erster Linie sollte der Benutzer in der Lage sein, eine Komposition durch Importieren einer XML-Datei einzurichten, die die Kompositionsstruktur definiert. Später könnte man sich vorstellen, eine GUI hinzuzufügen.
Zum besseren Verständnis hier ein sehr vereinfachtes Beispiel:
<COMPONENT name="Main">
<COMPONENT name="A">
<FUNCTION name="A1" path="lib/functionA1" />
</COMPONENT>
<COMPONENT name="B">
<FUNCTION name="B1" path="lib/functionB1" />
<FUNCTION name="B2" path="lib/functionB2" />
</COMPONENT>
<CONNECTIONS>
<CONNECTOR source="A1" target="B1" />
<CONNECTOR source="B1" target="B2" />
</CONNECTIONS>
</COMPONENT>
Es ist nicht notwendig, tiefer in die Fähigkeiten des Frameworks einzutauchen, da mein Problem viel allgemeiner ist. Wenn der Framework-Code / das Framework-Programm kompiliert wird, sind die Beschreibung des physischen Problems sowie die benutzerdefinierten Funktionen nicht bekannt. Wenn der Benutzer (über XML oder später über eine GUI) eine Funktion auswählt, sollte das Framework die Funktionsinformationen lesen, dh die Informationen der Eingabe- und Ausgabeparameter abrufen, um dem Benutzer die Möglichkeit zu bieten, die Funktionen miteinander zu verbinden.
Ich kenne die Prinzipien der Reflexion und bin mir bewusst, dass C ++ diese Funktion nicht bietet. Ich bin mir jedoch sicher, dass das Konzept "Objekte zur Laufzeit erstellen" sehr häufig erforderlich ist. Wie soll ich meine Softwarearchitektur in C ++ einrichten, um mein Ziel zu erreichen? Ist C ++ die richtige Sprache? Was übersehen ich?
Danke im Voraus!
Prost, Oliver