hari ini, saya ingin mengajukan pertanyaan kepada Anda tentang kemampuan C ++ untuk mewujudkan arsitektur perangkat lunak tertentu.
Tentu saja, saya telah menggunakan pencarian tetapi belum menemukan jawaban yang terhubung langsung.
Pada dasarnya, tujuan saya adalah untuk membangun sebuah program yang memungkinkan pengguna untuk pemodelan dan simulasi sistem fisik yang disusun secara sewenang-wenang, misalnya mobil pengendara. Saya berasumsi memiliki perpustakaan model fisik (fungsi dalam kelas). Setiap fungsi dapat memiliki beberapa input dan mengembalikan beberapa output tergantung pada deskripsi fisik yang mendasarinya, misalnya model mesin pembakaran, model drag aerodinamis, model roda, dll.
Sekarang, idenya adalah untuk memberikan pengguna kerangka kerja yang memungkinkan dia untuk menyusun fungsi sesuai dengan kebutuhannya, yaitu untuk memetakan setiap perilaku fisik. Kerangka kerja harus menyediakan fungsionalitas untuk menghubungkan output dan input dari berbagai fungsi. Oleh karena itu, kerangka kerja menyediakan kelas wadah. Saya menyebutnya KOMPONEN, yang dapat menampung satu atau banyak objek model (FUNGSI). Wadah ini juga dapat menampung komponen lainnya (lih. Pola komposit) serta koneksi (KONEKTOR) antara parameter fungsi. Selain itu, kelas komponen menyediakan beberapa fungsi numerik umum seperti pemecah matematika dan sebagainya.
Komposisi fungsi harus dilakukan selama runtime. Pada contoh pertama, pengguna harus dapat mengatur komposisi dengan mengimpor XML yang mendefinisikan struktur komposisi. Kemudian, orang bisa berpikir untuk menambahkan GUI.
Untuk memberi Anda pemahaman yang lebih baik di sini adalah contoh yang sangat sederhana:
<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>
Tidak perlu menyelami lebih dalam kemampuan kerangka kerja karena masalah saya jauh lebih umum. Ketika kode / program kerangka dikompilasi, deskripsi masalah fisik, serta fungsi yang ditentukan pengguna, tidak diketahui. Ketika pengguna memilih (melalui XML atau lebih baru melalui GUI) suatu fungsi, kerangka kerja harus membaca informasi fungsi, yaitu harus mendapatkan informasi parameter input dan output, untuk menawarkan kepada pengguna opsi untuk menghubungkan fungsi-fungsi tersebut.
Saya tahu prinsip-prinsip refleksi dan saya sadar bahwa C ++ tidak menyediakan fitur ini. Namun, saya yakin bahwa konsep "membangun objek selama runtime" sangat sering diperlukan. Bagaimana saya harus mengatur arsitektur perangkat lunak saya di C ++ untuk mencapai tujuan saya? Apakah C ++ bahasa yang tepat? Apa yang saya abaikan?
Terima kasih sebelumnya!
Cheers, Oliver