यूएमएल संरचनात्मक आरेख में सी/सी ++ फ़ंक्शन पॉइंटर (एफपी) का सबसे अच्छा प्रतिनिधित्व क्या होगा?सी/सी ++ फ़ंक्शन पॉइंटर्स के लिए यूएमएल प्रतिनिधित्व
मैं एक इंटरफ़ेस तत्व का उपयोग करने के बारे में सोच रहा हूं, यहां तक कि अगर एक ही ऑपरेशन घोषित होने की बाधा के साथ 'degenerate' हो सकता है।
मुझे इस दस्तावेज़ में कुछ प्रस्ताव मिला: C and UML Synchronization User Guide, Section 5.7.4। लेकिन यह काफी बोझिल लगता है और अभ्यास में बहुत उपयोगी नहीं है। भले ही अर्थपूर्ण दृश्य के बहुत कम स्तर से सही हो। यहाँ संक्षेप में उनकी अवधारणा दिखा एक चित्र है: C और C++ समारोह संकेत में
IMHO एक अंतरफलक जो केवल एक ही समारोह प्रदान करता है की इस तरह के एक संकुचित दृश्य के रूप में उपयोग किया जाता है और यह हस्ताक्षर है। सी एफपी में फ़ंक्शन पॉइंटर्स के सेट वाले स्ट्रक्चर की घोषणा करने वाले अधिक जटिल इंटरफेस को लागू करने के लिए भी उपयोग किया जाएगा।
मुझे लगता है कि मैं सही कोड उत्पन्न करने के लिए अपना विशेष यूएमएल टूल (एंटरप्राइज़ आर्किटेक्ट) प्राप्त करने का प्रबंधन भी कर सकता हूं, और नुकसान के बिना कोड परिवर्तनों के साथ सिंक्रनाइज़ कर सकता हूं।
मेरे प्रश्न हैं:
- चाहेंगे fp की की घोषणा यूएमएल में इंटरफ़ेस तत्वों के हिस्से के रूप में एक सही अर्थ दृश्य proivde?
- एकल एफपी घोषणा के लिए किस प्रकार का स्टीरियोटाइप इस्तेमाल किया जाना चाहिए? कम से कम मुझे कोड
कोड में टाइपिफ़ प्रदान करना होगा, इसलिए यह मेरी पसंद का विकल्प होगा।(मुझे पता चला कि यह स्टीरियोटाइप एंटरप्राइज़ आर्किटेक्ट के लिए स्वामित्व है) और मुझे कोड जनरेशन अनुकूलित करने के लिए उचित स्टीरियोटाइप परिभाषित करने की आवश्यकता है। असल में मैंने स्टीरियोटाइप नाम 'प्रतिनिधि' चुना है, क्या इसका कोई प्रभाव या अर्थपूर्ण टकराव है? - सी ++ के लिए, क्लास सदस्य फ़ंक्शन पॉइंटर को सही तरीके से व्यक्त करने के लिए पर्याप्त कक्षा तत्व में 'प्रतिनिधि' स्टेरोटाइप इंटरफ़ेस को घोंसला कर रहा होगा?
struct Interface1; typedef int (*CallbackFunc)(struct Interface1*); typedef struct Interface1 { typedef void (*func1Ptr)(struct Interface1*, int, char*); typedef int (*func2Ptr)(struct Interface1*, char*); typedef int (*func3Ptr)(struct Interface1*, CallbackFunc); func1Ptr func1; func2Ptr func2; func3Ptr func3; void* instance; }; /* The following extern declarations are only dummies to satisfy code * reverse engineering, and never should be called. */ extern void func1(struct Interface1* self, int p1, char* p2) = 0; extern int func2(struct Interface1* self, char*) = 0; extern int func3(struct Interface1* self, CallbackFunc p1) = 0;
संपादित करें:
इस सी कोड है कि ऊपर मॉडल से उत्पन्न किया जाना चाहिए:
यहाँ सी भाषा प्रतिनिधित्व के लिए मेरे विचारों का एक नमूना आरेख है पूरी समस्या उबलती है कि यूएमएल उपकरण और उसके विशिष्ट कोड इंजीनियरिंग क्षमताओं के साथ सबसे अच्छा तरीका क्या होगा। इस प्रकार मैंने enterprise-architect टैग जोड़ा है।
@garzanti यदि आपका प्रश्न गंभीर है तो एक प्राचीन डेटाटाइप, मैंने इसका उल्लेख किया है (लिंक किए गए दस्तावेज़ का पालन करें)। –
मैं बहुत गंभीर था, लेकिन वास्तव में उदारवादी और आप या किसी और का मजाक नहीं बना। मुझे बस विश्वास है कि कभी-कभी हमें मूल बातें वापस लौटना पड़ता है। – garzanti
@garzanti कम से कम मैं यहां जर्मन पढ़ने में उलझन में था। लेकिन वैसे भी, मैं देखता हूं कि एक उम का उपयोग करके: डेटाटाइप मेरे प्रस्ताव के समान दिखाई देगा, दुर्भाग्यवश मैं अपने यूएमएल उपकरण (जो कि उचित रूप से सही है) के साथ कक्षाओं के भीतर डेटाटाइप को घोंसला नहीं दे सकता है और अतिरिक्त टाइपिफ़ी की आवश्यकता होगी, जिससे चित्र कम स्पष्ट हो जाता है इसका इरादा है –