dzisiaj chciałbym zadać ci pytanie dotyczące możliwości C ++ do realizacji określonej architektury oprogramowania.
Oczywiście skorzystałem z wyszukiwania, ale nie znalazłem żadnej bezpośrednio powiązanej odpowiedzi.
Zasadniczo moim celem jest zbudowanie programu, który pozwala użytkownikowi modelować i symulować dowolnie złożone układy fizyczne, np. Samochód. Zakładam, że mam bibliotekę modeli fizycznych (funkcje w ramach klas). Każda funkcja może mieć pewne dane wejściowe i zwracać niektóre dane wyjściowe w zależności od opisu fizycznego, np. Model silnika spalinowego, model aerodynamiczny, model koła itp.
Teraz chodzi o to, aby zapewnić użytkownikowi strukturę, która pozwala mu komponować dowolne funkcje zgodnie z jego potrzebami, tj. Mapować wszelkie zachowania fizyczne. Ramy powinny zapewniać funkcje łączenia wyjść i wejść różnych funkcji. Dlatego środowisko udostępnia klasę kontenera. Nazywam to COMPONENT, który może pomieścić jeden lub wiele obiektów modelu (FUNKCJA). Kontenery te mogą również pomieścić inne komponenty (patrz wzór złożony), a także połączenia (ZŁĄCZE) między parametrami funkcji. Dodatkowo klasa komponentów zapewnia pewne ogólne funkcje numeryczne, takie jak solver matematyczny i tak dalej.
Składanie funkcji powinno odbywać się w czasie wykonywania. W pierwszej kolejności użytkownik powinien mieć możliwość skonfigurowania kompozycji poprzez zaimportowanie pliku XML, który definiuje strukturę kompozycji. Później można pomyśleć o dodaniu GUI.
Dla lepszego zrozumienia tutaj jest bardzo uproszczony przykład:
<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>
Nie jest konieczne zagłębianie się w możliwości frameworka, ponieważ mój problem jest znacznie bardziej ogólny. Podczas kompilowania kodu / programu frameworkowego opis problemu fizycznego, a także funkcje zdefiniowane przez użytkownika, nie są znane. Gdy użytkownik wybiera (za pomocą XML lub później za pomocą GUI) funkcję, środowisko powinno odczytać informacje o funkcji, tj. Powinno uzyskać informacje o parametrach wejściowych i wyjściowych, aby zaoferować użytkownikowi możliwość połączenia funkcji.
Znam zasady refleksji i jestem świadomy, że C ++ nie zapewnia tej funkcji. Jestem jednak pewien, że bardzo często wymagana jest koncepcja „budowania obiektów podczas działania”. Jak skonfigurować architekturę oprogramowania w C ++, aby osiągnąć cel? Czy C ++ jest właściwym językiem? Co przeoczyłem?
Z góry dziękuję!
Na zdrowie, Oliver