hoy, me gustaría hacerle una pregunta sobre las capacidades de C ++ para realizar una arquitectura de software específica.
Por supuesto, he usado la búsqueda pero no he encontrado ninguna respuesta directamente vinculada.
Básicamente, mi objetivo es construir un programa que permita al usuario modelar y simular sistemas físicos compuestos arbitrariamente, por ejemplo, un automóvil que conduce. Supongo que tengo una biblioteca de modelos físicos (funciones dentro de las clases). Cada función puede tener algunas entradas y devolver algunas salidas dependiendo de la descripción física subyacente, por ejemplo, un modelo de motor de combustión, un modelo de resistencia aerodinámica, un modelo de rueda, etc.
Ahora, la idea es proporcionar al usuario un marco que le permita componer cualquier función de acuerdo con sus necesidades, es decir, mapear cualquier comportamiento físico. El marco debe proporcionar funcionalidades para conectar las salidas y entradas de diferentes funciones. Por lo tanto, el marco proporciona una clase de contenedor. Lo llamo COMPONENTE, que puede contener uno o varios objetos modelo (FUNCIÓN). Estos contenedores también pueden contener otros componentes (cf. patrón compuesto), así como las conexiones (CONECTOR) entre los parámetros de la función. Además, la clase de componente proporciona algunas funcionalidades numéricas generales, como el solucionador matemático, etc.
La composición de las funciones debe hacerse durante el tiempo de ejecución. En primera instancia, el usuario debe poder configurar una composición mediante la importación de un XML que define la estructura de la composición. Más tarde, uno podría pensar en agregar una GUI.
Para darle una mejor comprensión, aquí hay un ejemplo muy simplificado:
<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>
No es necesario profundizar en las capacidades del marco porque mi problema es mucho más general. Cuando se compila el código / programa marco, no se conocen la descripción del problema físico ni las funciones definidas por el usuario. Cuando el usuario selecciona (a través de XML o posterior a través de una GUI) una función, el marco debe leer la información de la función, es decir, debe obtener la información de los parámetros de entrada y salida, para ofrecer al usuario la opción de interconectar las funciones.
Conozco los principios de la reflexión y soy consciente de que C ++ no proporciona esta función. Sin embargo, estoy seguro de que con frecuencia se requiere el concepto de "construir objetos durante el tiempo de ejecución". ¿Cómo debo configurar mi arquitectura de software en C ++ para lograr mi objetivo? ¿Es C ++ el lenguaje correcto? ¿Qué paso por alto?
¡Gracias por adelantado!
Saludos, Oliver