сьогодні я люблю задавати вам питання щодо можливостей C ++ для реалізації конкретної архітектури програмного забезпечення.
Звичайно, я використовував пошук, але не знайшов жодної прямо пов'язаної відповіді.
В основному, моя мета - створити програму, яка дозволяє користувачеві моделювати та моделювати довільно складені фізичні системи, наприклад водіння автомобіля. Я припускаю, що є бібліотека фізичних моделей (функцій в межах класів). Кожна функція може мати певні входи і повертати деякі виходи залежно від основного фізичного опису, наприклад, модель двигуна згоряння, модель аеродинамічного перетягування, модель колеса тощо.
Тепер ідея полягає у наданні користувачеві рамки, яка дозволяє йому складати будь-які функції відповідно до його потреб, тобто відображати будь-яку фізичну поведінку. Рамка повинна забезпечувати функціональні можливості підключення виходів і входів різних функцій. Тому рамка забезпечує клас контейнерів. Я називаю це КОМПОНЕНТ, який здатний вмістити один або багато модельних об'єктів (ФУНКЦІЯ). Ці контейнери можуть також містити інші компоненти (пор. Складений зразок), а також з'єднання (З'єднувач) між параметрами функції. Крім того, клас компонентів забезпечує деякі загальні числові функції, такі як математичний розв'язувач тощо.
Склад функцій повинен виконуватися під час виконання. У першу чергу, користувач повинен мати можливість створити композицію шляхом імпорту 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 ++? Що я не помічаю?
Спасибі заздалегідь!
Ура, Олівер