आज, मैं आपको एक विशिष्ट सॉफ्टवेयर आर्किटेक्चर का एहसास करने के लिए C ++ की क्षमताओं के बारे में एक प्रश्न पूछना चाहता हूं।
बेशक, मैंने खोज का उपयोग किया है, लेकिन कोई सीधा जुड़ा हुआ उत्तर नहीं मिला है।
मूल रूप से, मेरा लक्ष्य एक ऐसे कार्यक्रम का निर्माण करना है जो उपयोगकर्ता को मॉडलिंग और मनमाने ढंग से बनाए गए भौतिक सिस्टम के अनुकरण की अनुमति देता है, जैसे ड्राइविंग कार। मुझे लगता है कि भौतिक मॉडल (कक्षाओं के भीतर कार्य) का एक पुस्तकालय है। प्रत्येक फ़ंक्शन में कुछ इनपुट हो सकते हैं और अंतर्निहित शारीरिक विवरण के आधार पर कुछ आउटपुट लौटा सकते हैं, जैसे एक दहन इंजन मॉडल, एक वायुगतिकीय ड्रैग मॉडल, एक पहिया मॉडल, आदि।
अब, विचार उपयोगकर्ता को एक ढांचा प्रदान करना है जो उसे अपनी आवश्यकताओं के अनुसार किसी भी कार्य को करने की अनुमति देता है, अर्थात किसी भी भौतिक व्यवहार को मैप करने के लिए। फ्रेमवर्क को विभिन्न कार्यों के आउटपुट और इनपुट को जोड़ने के लिए कार्यक्षमता प्रदान करनी चाहिए। इसलिए, फ्रेमवर्क एक कंटेनर क्लास प्रदान करता है। मैं इसे घटक कहता हूं, जो एक या कई मॉडल ऑब्जेक्ट (FUNCTION) को धारण करने में सक्षम है। ये कंटेनर अन्य घटकों (cf. मिश्रित पैटर्न) के साथ-साथ फ़ंक्शन पैरामीटर के बीच कनेक्शन (कनेक्टर) भी पकड़ सकते हैं। इसके अतिरिक्त, घटक वर्ग कुछ सामान्य संख्यात्मक कार्यक्षमताएं प्रदान करता है जैसे कि गणित सॉल्वर और इसी तरह।
कार्यों की संरचना रनटाइम के दौरान की जानी चाहिए। पहले उदाहरण में, उपयोगकर्ता को एक 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 ++ सही भाषा है? मैं क्या अनदेखी करता हूं?
अग्रिम में धन्यवाद!
चीयर्स, ओलिवर