本日は、特定のソフトウェアアーキテクチャを実現するためのC ++の機能についてお伺いします。
もちろん、私は検索を使用しましたが、直接リンクされた回答は見つかりませんでした。
基本的に、私の目標は、ユーザーが任意に構成された物理システム(運転中の自動車など)のモデリングとシミュレーションを行えるプログラムを構築することです。私は、物理モデル(クラス内の関数)のライブラリがあると想定しています。各関数は、基礎となる物理的記述に応じて、いくつかの入力を持ち、いくつかの出力を返す場合があります。たとえば、燃焼エンジンモデル、空力抵抗モデル、ホイールモデルなどです。
ここでのアイデアは、ユーザーが自分のニーズに応じて任意の機能を構成できるようにするフレームワークをユーザーに提供することです。つまり、物理的な動作をマップすることです。フレームワークは、さまざまな機能の出力と入力を接続する機能を提供する必要があります。したがって、フレームワークはコンテナークラスを提供します。これをCOMPONENTと呼び、1つまたは複数のモデルオブジェクト(FUNCTION)を保持できます。これらのコンテナーは、他のコンポーネント(複合パターンを参照)や、関数パラメーター間の接続(CONNECTOR)も保持できます。さらに、コンポーネントクラスは、数学ソルバーなどのいくつかの一般的な数値機能を提供します。
関数の構成は実行時に行う必要があります。最初の例では、ユーザーは、コンポジション構造を定義するXMLをインポートすることでコンポジションをセットアップできる必要があります。その後、GUIを追加することを考えることができます。
ここで理解を深めるために、非常に単純化した例を示します。
<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>
私の問題ははるかに一般的であるため、フレームワークの機能について詳しく説明する必要はありません。フレームワークのコード/プログラムがコンパイルされたとき、物理的な問題の説明とユーザー定義関数は不明です。ユーザーが(XMLまたは後でGUIを介して)関数を選択すると、フレームワークは関数情報を読み取る必要があります。つまり、ユーザーに関数を相互接続するオプションを提供するために、入力パラメーターと出力パラメーターの情報を取得する必要があります。
私はリフレクションの原理を知っており、C ++がこの機能を提供していないことを知っています。ただし、「実行時にオブジェクトを構築する」という概念は非常に頻繁に必要になると思います。目標を達成するには、C ++でソフトウェアアーキテクチャをどのように設定すればよいですか?C ++は正しい言語ですか?私は何を見落としていますか?
前もって感謝します!
乾杯、オリバー