hoje, eu gostaria de fazer uma pergunta sobre os recursos do C ++ para realizar uma arquitetura de software específica.
Obviamente, usei a pesquisa, mas não encontrei nenhuma resposta diretamente vinculada.
Basicamente, meu objetivo é criar um programa que permita ao usuário modelar e simular sistemas físicos compostos arbitrariamente, por exemplo, um carro. Suponho que tenha uma biblioteca de modelos físicos (funções dentro de classes). Cada função pode ter algumas entradas e retornar algumas saídas, dependendo da descrição física subjacente, por exemplo, um modelo de motor de combustão, um modelo de arrasto aerodinâmico, um modelo de roda, etc.
Agora, a idéia é fornecer ao usuário uma estrutura que lhe permita compor quaisquer funções de acordo com suas necessidades, ou seja, mapear qualquer comportamento físico. A estrutura deve fornecer funcionalidades para conectar as saídas e entradas de diferentes funções. Portanto, a estrutura fornece uma classe de contêiner. Eu o chamo de COMPONENTE, capaz de armazenar um ou vários objetos de modelo (FUNCTION). Esses contêineres também podem conter outros componentes (cf. padrão composto), bem como as conexões (CONNECTOR) entre os parâmetros de função. Além disso, a classe de componente fornece algumas funcionalidades numéricas gerais, como o solucionador de matemática e assim por diante.
A composição das funções deve ser feita durante o tempo de execução. Na primeira instância, o usuário deve poder configurar uma composição importando um XML que define a estrutura da composição. Mais tarde, pode-se pensar em adicionar uma GUI.
Para oferecer uma melhor compreensão aqui, é um exemplo muito 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>
Não é necessário aprofundar os recursos da estrutura, porque meu problema é muito mais geral. Quando o código / programa da estrutura é compilado, a descrição do problema físico, bem como as funções definidas pelo usuário, não são conhecidas. Quando o usuário seleciona (via XML ou mais tarde por meio de uma GUI) uma função, a estrutura deve ler as informações da função, ou seja, deve obter as informações dos parâmetros de entrada e saída, a fim de oferecer ao usuário a opção de interconectar as funções.
Conheço os princípios da reflexão e sei que o C ++ não fornece esse recurso. No entanto, tenho certeza de que o conceito de "construção de objetos durante o tempo de execução" é muitas vezes necessário. Como devo configurar minha arquitetura de software em C ++ para alcançar meu objetivo? C ++ é o idioma certo? O que eu negligencio?
Desde já, obrigado!
Cheers, Oliver