यूएमएल आरेखों का उपयोग करना अनुचित क्यों है यह योजना बनाने के लिए कि आपका कोड कैसे व्यवस्थित किया जाएगा?


9

तो, हाँ, आरेख कई बार अनुचित हो सकते हैं। वे कब अनुचित हैं? जब आप उन्हें मान्य करने के लिए कोड के बिना बनाते हैं, और फिर उनका अनुसरण करने का इरादा रखते हैं। एक विचार का पता लगाने के लिए आरेख खींचने में कुछ भी गलत नहीं है।

फुर्तीली सॉफ्टवेयर विकास: सिद्धांत, पैटर्न और व्यवहार - रॉबर्ट सी। मार्टिन

इसका वास्तव में क्या मतलब है? क्या यूएमएल को "डाइविंग" से पहले अपने कोड की संरचना करने की योजना बनाने में मदद करने के लिए डिज़ाइन नहीं किया गया है ? यदि आप अपने साथ आए आरेखों का पालन नहीं करते हैं तो इसका उपयोग करने का क्या मतलब है?

संदर्भ: इस अध्याय में, अंकल बॉब एक ​​बॉलिंग गेम के स्कोर कीपर के लिए एक यूएमएल आरेख बनाते हैं। फिर वह यूएमएल आरेख के परामर्श के बिना, परीक्षण संचालित तरीके से कार्यक्रम को विकसित करने के लिए आगे बढ़ता है। परिणामस्वरूप कार्यक्रम यूएमएल आरेख की तरह कुछ भी नहीं है, और अंकल बॉब ऊपर उद्धृत निष्कर्ष पर आते हैं।


4
अंकल बॉब का कहना है कि आर्किटेक्चर जो टेस्ट-ड्रिवेन डेवलपमेंट से निकलता है, वह यूएमएल आरेख से मौलिक रूप से भिन्न हो सकता है।
रॉबर्ट हार्वे

1
यह भी पढ़ें डिज़ाइन मर चुका है? इस विषय और संतुलित आंदोलन की संतुलित चर्चा के लिए मार्टिन फाउलर द्वारा
एलिएजर स्टीनबॉक

4
मतदान में @RobertHarvey एट अल की ओर से खराब निर्णय के जवाब में इस सवाल को समझना एक महत्वपूर्ण और उपयोगी प्रश्न है।
डेविड अरनो

3
@DavidArno यदि आपके पास इस बारे में मजबूत राय है कि क्या बंद होना चाहिए या नहीं होना चाहिए, तो मैं आपको हमारी मेटा साइट पर चर्चा में शामिल होने के लिए दृढ़ता से प्रोत्साहित करूंगा। हर कोई जो वर्तमान में वहां (मेरे सहित) पोस्ट करता है, शायद कुछ SE कर्मचारियों को छोड़कर "@RobertHarvey et al" के अंतर्गत आता है, और हम चिंतित हैं कि एक और दृष्टिकोण का प्रतिनिधित्व नहीं हो रहा है, लेकिन इस प्रकार अब तक किसी ने भी इसका प्रतिनिधित्व करने के लिए नहीं दिखाया है। ।
Ixrec

1
@Ixrec, मैंने खुद को पहले कभी मेटा चर्चाओं के साथ शामिल नहीं किया है, अन्य की तुलना में एक बार जांचने के लिए कि क्या मैं जवाब में अपने स्वयं के ओपन सोर्स पुस्तकालयों का उल्लेख कर सकता हूं (इसका जवाब यह था कि मैं कर सकता था)। शायद मुझे आपकी सलाह लेनी चाहिए और अधिक शामिल होना चाहिए। सलाह के लिये धन्यवाद।
डेविड अरनो

जवाबों:


19

इसे ठीक से समझाने के लिए, हमें एक छोटे इतिहास के पाठ की आवश्यकता है। सॉफ्टवेयर इंजीनियरिंग के शुरुआती दिनों में, अक्सर इस्तेमाल की जाने वाली उपमा एक घर का निर्माण कर रही थी। एक वास्तुकार और संरचनात्मक इंजीनियर एक ग्राहक के साथ योजनाओं पर चर्चा करते हैं और एक डिजाइन के साथ आते हैं। बिल्डर्स तब वास्तविक घर बनाने के लिए उस डिज़ाइन का पालन करते हैं। वास्तविक घर बनाने के लिए राइटिंग कोड को बराबर के रूप में देखा गया था। इस प्रकार, इससे पहले कि निर्माण हो सकता है सामने डिजाइन की आवश्यकता थी। विभिन्न ग्राफिकल डिज़ाइन टूल बनाए गए, जिनमें से यूएमएल उनमें से एक है।

मूल रूप से यूएमएल के साथ विचार यह था कि कोई पूरी तरह से यूएमएल के साथ एक प्रणाली डिजाइन करेगा, फिर कोडर्स को उस डिजाइन को कोड में अनुवाद करने के लिए सौंप देगा। वास्तव में, यह सिर्फ काम नहीं करता है, और "डिज़ाइनर" के बजाय "कार्यान्वयनकर्ता" के रूप में देखे जाने वाले प्रोग्रामर के वर्षों के लिए नेतृत्व किया गया, परियोजनाओं को देर हो रही है, डिजाइनों को लगातार बदलने के बाद वे पूर्ण होने वाले थे आदि।

वजह साफ है। कोडिंग डिजाइन है । घर सादृश्य के साथ, कोड वास्तुकार के चित्र है। कंपाइलर बिल्डर है जो उन डिज़ाइनों को लेता है और उनसे एक प्रोग्राम बनाता है। इस अहसास ने तब चुस्त तकनीक, टीडीडी आदि को जन्म दिया: उपकरण उस कोड डिजाइन की गुणवत्ता में सुधार करने में मदद करते हैं।

जिस तरह एक वास्तुकार उसकी और उसकी टीम की समग्र डिजाइन की कल्पना करने में मदद करने के लिए प्रारंभिक रेखाचित्रों का उत्पादन कर सकता है, इसलिए एक डेवलपर को आवश्यक डिजाइन की कल्पना करने में मदद करने के लिए यूएमएल या अन्य उपकरणों का उपयोग कर सकता है। जैसे उन रेखाचित्रों का नेत्रहीन पालन नहीं किया जाता है, वैसे ही यूएमएल का भी नेत्रहीन पालन नहीं किया जाना चाहिए। कोड डिजाइन फुर्तीली पुनरावृत्तियों से बाहर निकलना चाहिए और टीडीडी का उपयोग करना चाहिए। LIkewise, जिस तरह एक वास्तुकार घर के एक मॉडल का निर्माण कर सकता है, उसकी मदद करने के लिए और उसकी टीम चित्र बना सकती है, इसलिए UML का उपयोग कोड संरचना की कल्पना करने में मदद के लिए किया जा सकता है।

जैसा कि अंकल बॉब कहते हैं, आप UML को मान्य नहीं कर सकते, आप केवल कोड को मान्य कर सकते हैं। इसलिए कोड प्राइम डिज़ाइन डॉक्यूमेंटेशन है और यूएमएल, यदि उपयोग किया जाता है, तो केवल माध्यमिक डॉक्यूमेंटेशन है।


7
मेरे पास मेरे घर की छत का एक भाग इस साल की शुरुआत में उठा था और यह काफी शैक्षिक था। वास्तुकार ने वास्तव में ऐसा नहीं किया था कि अंत उत्पाद कैसा दिखना चाहिए था। उन्होंने एक बिल्डिंग इंजीनियर को कठिन गणना और संरचनात्मक डिजाइन सौंपा। तब बिल्डरों को घर की वास्तविकता के लिए सैद्धांतिक डिजाइनों का मिलान करना पड़ता था (एक बार जब प्लास्टरबोर्ड बंद हो जाता था, तो बीम थोड़े अलग स्थानों पर पाए जाते थे) इसलिए हर कदम पर डिजाइन बन रहा था।
Jaydee

1
यह एक उपयोगी उत्तर है, फिर भी यह कुछ पहलुओं की निगरानी करता है। UML "उच्च स्तर की डिजाइन संकेतन" के रूप में अच्छी तरह से काम नहीं करने के मुख्य कारणों में से एक है IMHO उनके आविष्कारक डेटा प्रवाह आरेख को जोड़ने के लिए बहुत जिद्दी थे। यह एकमात्र प्रकार का नोटेशन है जो मुझे पता है कि टॉप-टाउन डिज़ाइन के लिए कौन सा सूट करता है, घटकों के लिए अमूर्तता व्यक्त करने और विभिन्न पैमाने के बीच इंटरफेस की अनुमति देता है, और कोड के लिए एक अच्छी तरह से परिभाषित मानचित्रण भी हो सकता है। इसके बजाय, यूएमएल में बहुत सारी बकवास है जो किसी को वास्तव में ज़रूरत नहीं है।
डॉक ब्राउन

3

मुझे लगता है कि हर प्रोग्रामिंग मुहावरा (या डिज़ाइन, या कोड) यूएमएल में फिट नहीं होता है (जो मैं मानता हूं कि मुझे अच्छी तरह से नहीं पता है कि इस पर कुछ किताबें पढ़ें-, मैंने कभी इसका इस्तेमाल नहीं किया, और मैं शायद इसे नापसंद करता हूं)।

प्लेन सी कोड (जैसे लिनक्स कर्नेल का स्रोत कोड) यूएमएल द्वारा बिल्कुल तैयार नहीं किया जा सकता है

Ocaml कोड (इसके मॉड्यूल और फंक्शनलर्स के साथ) या यहां तक ​​कि C ++ 11 कोड (लैम्ब्डा और टेम्प्लेट के साथ) यूएमएल में फिट नहीं हो सकता है।

मल्टीस्टेज प्रोग्रामिंग आ ला मेटाओक्स्ल शायद यूएमएल में फिट नहीं होता है।

प्रोलॉग कोड या कॉमन लिस्प कोड शायद यूएमएल में फिट नहीं होता है।

यह उत्तर और मेरा यह प्रश्न भी देखें ।

स्कॉट की प्रोग्रामिंग लैंग्वेज प्रैग्मेटिक्स और वैन रॉय की कॉन्सेप्ट, तकनीक और कंप्यूटर प्रोग्रामिंग की मॉडल्स को पढ़ें , फिर खुद से पूछें कि क्या वहां का हर प्रोग्रामिंग मॉडल यूएमएल में फिट है।

मार्टिन फाउलर के डिजाइन डेड को भी देखें ब्लॉग।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.