C ++ स्रोत से UML वर्ग आरेख बनाने के लिए doxygen का उपयोग कैसे करें


90

मैं कुछ ऐसी सामग्री की खोज कर रहा हूं, जो यह बताती है कि डॉक्सीजन के साथ सरल वर्ग आरेख कैसे उत्पन्न होते हैं, लेकिन एक नहीं मिल सका। क्या कोई मदद कर सकता है?

मुझे C ++ फ़ाइलों के एक सेट से नीचे दिखाए गए चित्र बनाने की आवश्यकता है। वैकल्पिक शब्द

यदि इस आसान को प्राप्त करने के लिए बेहतर उपकरण हैं, तो कृपया मुझे बताएं।


क्या आपने विशेषता और विधि प्रकारों के बारे में जानकारी सहित आरेख प्राप्त किए हैं?
इज़्ज़ी

जवाबों:


50

Doxygen इनहेरिटेंस आरेख बनाता है लेकिन मुझे नहीं लगता कि यह एक पूरी श्रेणी की श्रेणी बनाएगा। यह आपको ग्राफविज़ टूल का उपयोग करने की अनुमति देता है। यदि आप Doxygen GUI फ्रंटएंड टूल का उपयोग करते हैं तो आपको संबंधित विकल्प मिलेंगे Step2: -> Wizard tab -> Diagrams। डीओटी संबंध विकल्प विशेषज्ञ टैब के तहत हैं।


6
आप पूरे पदानुक्रम को नेविगेट करने में सक्षम होंगे, सीमाएं एक आरेख पर प्रदर्शित होती हैं। ऐसे कुछ पैरामीटर हैं जो ग्राफ़ के दायरे को सीमित करते हैं। DOT_GRAPH_NODES एक पृष्ठ पर प्रविष्टियों की संख्या को सीमित करता है और MAX_DOT_GRAPH_DEPTH प्रतिबंधित करता है कि यह कितना गहरा है। इन्हें बड़े मूल्यों पर सेट करने से बड़ी परियोजना के लिए बहुत समय लगता है।
दान्स

धन्यवाद। इसने मेरे लिए काम किया। मैंने
एक्सपर्ट

46

इस पोस्ट से उद्धरण (यह खुद डॉक्स ऑक्सीजन के लेखक द्वारा लिखा गया है):

run doxygen -g and change the following options of the generated Doxyfile:

    EXTRACT_ALL            = YES
    HAVE_DOT               = YES
    UML_LOOK               = YES

run doxygen again

11
यह एक पूर्ण वर्ग आरेख (जैसे, कक्षा ए और वर्ग बी के बीच कई-से-एक संबंध) उत्पन्न नहीं करेगा; केवल एक वंश आरेख, यानी, सुपरक्लास / उपवर्ग रिश्तों को दिखा रहा है।
स्टेपथोम

39

हम्म, यह एक पुराने सवाल का एक सा प्रतीत होता है, लेकिन जब से मैं पिछले कुछ दिनों से Doxygen कॉन्फ़िगरेशन के साथ खिलवाड़ कर रहा हूं, जबकि मेरे सिर की वर्तमान जानकारी से भरा है चलो इस पर एक छुरा है -

मुझे लगता है कि पिछले उत्तरों में लगभग यह है:

लापता विकल्प COLLABORATION_GRAPH = YESDoxyfile में जोड़ना है। मुझे लगता है कि आप doxywizard GUI में कहीं न कहीं बराबर काम कर सकते हैं (मैं doxywizard का उपयोग नहीं करते हैं)।

इसलिए, एक अधिक पूर्ण उदाहरण के रूप में, विशिष्ट "Doxyfile" विकल्प जो कि यूएमएल आउटपुट से संबंधित हैं जिनका मैं उपयोग करता हूं:

EXTRACT_ALL          = YES
CLASS_DIAGRAMS      = YES
HIDE_UNDOC_RELATIONS = NO
HAVE_DOT             = YES
CLASS_GRAPH          = YES
COLLABORATION_GRAPH  = YES
UML_LOOK             = YES
UML_LIMIT_NUM_FIELDS = 50
TEMPLATE_RELATIONS   = YES
DOT_GRAPH_MAX_NODES  = 100
MAX_DOT_GRAPH_DEPTH  = 0
DOT_TRANSPARENT      = YES

ये सेटिंग्स "विरासत" ( CLASS_GRAPH=YES) और "सहयोग" ( COLLABORATION_GRAPH=YES) आरेख दोनों उत्पन्न करेंगे ।

Doxygen आउटपुट के "परिनियोजन" के लिए आपके लक्ष्य के आधार पर, सेटिंग DOT_IMAGE_FORMAT = svgभी उपयोग की हो सकती है। Svg आउटपुट के साथ आरेख बिटमैप प्रारूप जैसे .png के निश्चित रिज़ॉल्यूशन के बजाय "स्केलेबल" होते हैं। जाहिर है, अगर IE के अलावा अन्य ब्राउज़रों में आउटपुट को देखते हुए, वहाँ भी है INTERACTIVE_SVG = YESजो उत्पन्न svg आरेखों के "इंटरेक्टिव ज़ूमिंग और पैनिंग" की अनुमति देगा। मैंने कुछ समय पहले यह कोशिश की थी, और svg आउटपुट बहुत नेत्रहीन आकर्षक था, लेकिन उस समय, svg के लिए ब्राउज़र समर्थन अभी भी थोड़ा असंगत था, इसलिए उम्मीद है कि स्थिति में हाल ही में सुधार हुआ होगा।

जैसा कि अन्य टिप्पणियों ने उल्लेख किया है, इनमें से कुछ सेटिंग्स ( DOT_GRAPH_MAX_NODESविशेष रूप से) में संभावित प्रदर्शन प्रभाव हैं, इसलिए वाईएमएमवी।

मुझे "RTFM" शैली के उत्तरों से नफरत है, इसलिए इस वाक्य के लिए क्षमा चाहते हैं, लेकिन इस मामले में Doxygen दस्तावेज़ीकरण वास्तव में आपका मित्र है, इसलिए उपरोक्त सेटिंग्स पर Doxygen डॉक्स देखें- पिछली बार जब मैंने देखा था तो आप विवरण पा सकते हैं http://www.doxygen.nl/manual/config.html


अच्छा उत्तर। आपके उत्तर में आपने "CLASS_GRAGH" के बजाय "CLASS_DIAGRAMS" लिखा।
डेविड जूल 13'16

हम्म, वास्तव में, अब आप इसे लाते हैं, मैं देखता हूं कि मेरे पास CLASS_DIAGRAMS = YES और CLASS_GRAPH = YES दोनों हैं। डॉक्सिज़न 1.8.9.1 के लिए डॉक्स की जाँच करने के बाद मैंने पाया कि वास्तव में CLASS_GRAPH = YES CLASS_DIAGRAMS = YES को ओवरराइड करेगा, इसलिए दो विकल्प इंटरलेक्ट करते हैं, CLASS_GRAPH = YES पूर्ववर्ती के साथ। तो, वास्तव में, मूल प्रश्न के प्रयोजनों के लिए मेरे पास क्या काम होगा, फिर भी अच्छी पकड़ है!
user6092647

आप OUTPUT_DIRECTORY को भी बदल सकते हैं और RECURSIVE खोज की अनुमति दे सकते हैं
किंग्स जस्टर

आपको RECURSIVEयस में दर्ज किए गए बदलाव को भी बदलने की आवश्यकता हो सकती है
प्रागैस्टोरिक

6

एंटरप्राइज आर्किटेक्ट आयातित स्रोत कोड से एक यूएमएल आरेख का निर्माण करेगा।


इस सवाल का जवाब देने के लिए भी तैयार है "यदि इस आसान को प्राप्त करने के लिए बेहतर उपकरण हैं, तो कृपया मुझे बताएं।"
kaveish

5

मुझे लगता है कि आपको doxys फ़ाइल को संपादित करने और GENERATE_UML (ऐसा कुछ) को सच करने के लिए सेट करना होगा। और आपको डॉट / ग्राफविज़ इंस्टॉल करना होगा।


12
क्या आप UML_LOOK विकल्प के बारे में बात कर रहे हैं?
डेविड डोरिया

@ दाविदोरिया होना चाहिए। लेकिन UML_LOOK कोई डेटा प्रकार नहीं दिखाएगा।
Ruud Verhoef

2

2 उच्चतम उत्तोलित उत्तर सही हैं। आज तक, केवल एक चीज जिसे मुझे बदलने की ज़रूरत थी (डिफ़ॉल्ट सेटिंग्स से) निर्मित जनरेटर के बजाय डॉट का उपयोग करके पीढ़ी को सक्षम करना था

कुछ महत्वपूर्ण नोट:

  • Doxygen परियोजना में सभी वर्गों का वास्तविक पूर्ण आरेख उत्पन्न नहीं करेगा । यह प्रत्येक पदानुक्रम के लिए एक अलग छवि उत्पन्न करेगा। यदि आपके पास कई, असंबंधित श्रेणी पदानुक्रम हैं, तो आपको कई छवियां मिलेंगी।
  • इन सभी आरेखों को html/inherits.html(या वेबसाइट नेविगेशन से) कक्षाओं में पाया जा सकता है => वर्ग पदानुक्रम => "पाठकीय श्रेणी पदानुक्रम पर जाएं"।
  • यह एक C ++ प्रश्न है, तो चलिए टेम्पलेट्स के बारे में बात करते हैं। खासकर अगर आपको विरासत में मिली है T
    • प्रत्येक टेम्पलेट तात्कालिकता को सही ढंग से Doxygen द्वारा एक अलग प्रकार माना जाएगा। विभिन्न प्रकारों से विरासत में मिलने वाले प्रकारों में आरेख पर अलग-अलग मूल वर्ग होंगे।
    • यदि कोई वर्ग टेम्पलेट से fooविरासत में मिला है Tऔर Tटेम्पलेट प्रकार के पैरामीटर में एक डिफ़ॉल्ट है, तो ऐसा डिफ़ॉल्ट माना जाएगा। यदि कोई प्रकार हैbar जो डिफ़ॉल्ट से भिन्न है, foo<U>जहां से विरासत में मिला है U, barतो foo<U>माता-पिता होंगे। foo<>और bar<U>एक आम अभिभावक नहीं होगा।
    • यदि कई क्लास टेम्प्लेट हैं जो उनके कम से कम एक टेम्प्लेट पैरामीटर से प्राप्त होते हैं, तो Doxygen इन क्लास टेम्प्लेट के लिए एक आम अभिभावक को मान लेगा जब तक कि टेम्प्लेट टाइप पैरामीटर कोड में समान नाम हैं। यह नामकरण में स्थिरता के लिए प्रोत्साहन देता है।
    • CRTP और रिवर्स CRTP सिर्फ काम करते हैं।
    • पुनरावर्ती टेम्पलेट वंशानुक्रम वृक्षों का विस्तार नहीं है। किसी भी variantतात्कालिकता को विरासत से प्रदर्शित किया जाएगा variant<Ts...>
    • बिना किसी तात्कालिकता वाले कक्षा के खाके खींचे जा रहे हैं। उनके पास <...>उनके नाम में एक स्ट्रिंग होगी जो प्रकार और गैर-प्रकार के मापदंडों का प्रतिनिधित्व करता है जिसमें चूक नहीं थी।
    • कक्षा का पूरा और आंशिक विशेषज्ञता भी तैयार किया जा रहा है। यदि विभिन्न प्रकार से विशेषज्ञता प्राप्त होती है, तो Doxygen सही ग्राफ बनाता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.