2013-02-28 9 views
16

यूएमएल उपयोग केस आरेखों को दिखाने के लिए दो समान रूप से समकक्ष तरीकों की अनुमति दें कि use case extensions के विपरीत use case generalizations नामक उपयोग के मामले को एक अलग उपयोग के मामले में महसूस किया जा सकता है। मैंने निम्नलिखित मूल रूप से उदाहरण को समान आवृत्ति वाले दृष्टिकोण का उपयोग करके मॉडलिंग किया है, कभी-कभी एक स्रोत के भीतर।केस सामान्यीकरण बनाम विस्तार

Use case generalisation image

Use case extension image

मेरे मन के लिए एक विस्तार के आधार मामले के लिए विशेष उपयोग के मामले का एक सीधा प्रतिस्थापन सामान्यीकरण में संभव होना चाहिए के रूप में सामान्यीकरण की तुलना में एक कमजोर संबंध लेकिन जरूरी नहीं कि एक्सटेंशन में है।

ऐसा लगता है कि सामान्यीकरण का अर्थ है कि पॉलिमॉर्फिक कार्यान्वयन वांछित है, जबकि विस्तार से संकेत मिलता है कि कुछ ब्रांचिंग संरचना का उपयोग किया जाना है।

void makePayment(const PaymentDetails* pd) 
{ 
    pd->pay(); 
} 

रूप

void makePayment(const PaymentDetails* pd) 
{ 
    switch(pd->type) 
    { 
     case EFT: 
       payViaEFT(pd); 
       break; 
     case PAYPAL: 
       payViaPayPal(pd); 
       break; 
     case CREDITCARD: 
       payViaCreditCard(pd); 
       break; 
    } 
} 

करने का विरोध प्रयोग करें प्रकरण चरण अभी तक भी इस तरह के कार्यान्वयन विशिष्ट चिंताओं के लिए जल्दी तैयार किया जा करने के लिए नहीं है? इसके लिए बहुत अधिक उपयुक्त यूएमएल आरेख हैं। क्या दोनों का उपयोग करने के बारे में एक कठिन और तेज़ नियम है और यदि ऐसा है तो क्या है?

+1

दोनों कार्यान्वयन एक ही समस्या का मॉडल करते हैं। वे एक यूसी आरेख या किसी अन्य से जुड़े नहीं हैं। Polymorphic एक और अधिक वांछनीय है, क्योंकि यह आसान, आसान करने के लिए आसान है और मानव त्रुटि के अधीन कम है। –

उत्तर

11

मेरे मन के लिए एक विस्तार के आधार मामले के लिए विशेष उपयोग के मामले का एक सीधा प्रतिस्थापन सामान्यीकरण में संभव होना चाहिए लेकिन जरूरी नहीं कि एक्सटेंशन में के रूप में सामान्यीकरण की तुलना में एक कमजोर रिश्ता है।

यह सच है।

यह मेरे लिए है कि सामान्यीकरण लगता है निकलता है, जबकि एक्सटेंशन कुछ शाखाओं में संरचना में इस्तेमाल किया जा रहा है का तात्पर्य एक बहुरूपी कार्यान्वयन वांछित है।

चित्र किसी भी कार्यान्वयन को निर्देशित नहीं करता है। हालांकि, आप स्वयं के लिए आरेख से एक संकेत की व्याख्या कर सकते हैं। यूएमएल भाषा और समाधान से स्वतंत्र रहता है।

इस तरह के कार्यान्वयन के लिए उपयोग केस चरण बहुत जल्दी नहीं है विशिष्ट चिंताओं को मॉडल करने के लिए?

ठीक है, ऊपर बताए अनुसार, यूएमएल किसी विशिष्ट प्रकार के कार्यान्वयन को लागू नहीं करता है। हालांकि, आप यहां कुछ महत्वपूर्ण कार्यात्मक आवश्यकताओं को एकत्रित कर रहे हैं जो आपके समय सारिणी और वर्कलोड को बहुत प्रभावित कर सकते हैं। ("क्रेडिट कार्ड के साथ भुगतान करें" बैंक हस्तांतरण द्वारा अग्रिम भुगतान "की तुलना में संभालने के लिए और अधिक जटिल है)। तो आप इसे पकड़ने का प्रयास करेंगे लेकिन विभिन्न समाधान दृष्टिकोणों के लिए खुले रहेंगे।

इसके लिए अधिक उपयुक्त UML आरेख हैं।

आप वास्तव में समानांतर में उनका उपयोग कर सकते हैं :) क्योंकि वे एक ही विषय पर अलग-अलग विचार हैं।

क्या दोनों के उपयोग के लिए एक कठिन और तेज़ नियम है और यदि ऐसा है तो क्या है?

मैं इस मामले में सामान्यीकरण पसंद करता हूं क्योंकि वास्तव में एक्सटेंशन गलत तरीके से सुझाव देते हैं कि तीन नामित विकल्पों में से किसी का उपयोग किए बिना भुगतान करने का एक तरीका हो सकता है। जैसा कि आपने स्वयं को इंगित किया है।

7

एक विस्तारित संबंध के साथ मॉडलिंग करते समय, विस्तारित उपयोग केस (xxx के माध्यम से भुगतान) निष्पादित किया जाता है जब विस्तारित उपयोग केस (भुगतान करना) एक सटीक स्थान (एक्सटेंशन बिंदु, भुगतान प्रकार द्वारा दिया गया) पर होता है, यदि स्थिति इस तरह के विस्तार संबंध (उदाहरण के लिए "पेपैल के माध्यम से भुगतान" के लिए, स्थिति pay_type = पेपैल होगा)। इस मॉडल में, "पेपैल के माध्यम से भुगतान करें" केवल पेपैल के साथ भुगतान लेनदेन पूरा करने के विवरण से संबंधित है, जबकि "भुगतान करें" भुगतान विधि से स्वतंत्र सभी व्यवहार निर्दिष्ट करता है (जैसे कुल राशि की गणना करना, और बचत करना एक बार लेनदेन का नतीजा यह हुआ कि)।

दूसरी तरफ, सामान्यीकरण (जिसे न केवल उपयोग के मामलों के लिए परिभाषित किया जाता है, बल्कि किसी भी वर्गीकृत के लिए भी परिभाषित किया जाता है) एक व्यापक अवधारणा है, क्योंकि यह विवरण (आरेख स्तर पर) नहीं है कि विवरण कब और कैसे विशिष्ट है व्यवहार निष्पादित कर रहे हैं। यदि "पेपैल के माध्यम से भुगतान करें" "भुगतान करें" का एक विशेषज्ञ था, तो यह "भुगतान करें" के व्यवहार को फिर से परिभाषित करेगा, जो "क्रेडिट कार्ड के माध्यम से भुगतान" के व्यवहार से काफी भिन्न हो सकता है।

एक विस्तारित उपयोग मामले होने का मतलब यह नहीं है कि विकल्पों को हार्डकोड किया जाना चाहिए। दरअसल, आपका पहला उदाहरण विस्तारित संबंध का वैध कार्यान्वयन भी है, क्योंकि pd->pay(pd) चयनित भुगतान प्रकार के आधार पर विभिन्न व्यवहारों का आह्वान करेगा। असल में, केस आरेख मॉडल का उपयोग करें जो सिस्टम करना है, जबकि कम-स्तर कार्यान्वयन विवरण गतिविधि आरेखों में बेहतर निर्दिष्ट हैं।

3

एक एक्सटेंशन का एक उदाहरण "डिस्काउंट कोड दर्ज करें" केस का उपयोग करेगा। डिस्काउंट कोड दर्ज करना भुगतान करने के साथ करना है, लेकिन भुगतान करने के लिए आपको एक दर्ज करने की आवश्यकता नहीं है।

आप किस का उपयोग करने के निर्धारण के लिए "एक" संबंध देख सकते हैं। पेपैल द्वारा भुगतान "एक भुगतान करना है, भुगतान करने का एक विशिष्ट तरीका है। छूट कोड दर्ज करें नहीं है। भुगतान करने के दौरान आप कुछ अतिरिक्त कर सकते हैं।

+0

मैं देख रहा हूं कि आप क्या कह रहे हैं। भुगतान स्वयं ही पूरा नहीं होता है, इसलिए उपयोग करने के लिए सबसे प्राकृतिक संबंध सामान्यीकरण होगा (जो मैं वैसे भी पसंद करता हूं)। हालांकि सामान्यीकरण का उपयोग करना तब प्रतीत होता है कि एक ही समय में भुगतान के कई रूपों का उपयोग करना संभव नहीं है। [कुछ लोग] (http://www.uml-diagrams.org/use-case-include.html) कहते हैं कि इन स्थितियों से बचने के लिए संबंधों को शामिल करने की क्षमता को जोड़ने में मदद मिलेगी। तुम्हारे विचार? – DuncanACoulter

+0

मैंने आपके लिंक में लेखक द्वारा बताई गई समस्या को देखा है। एक आसान समाधान है। यदि आप इसके बारे में सोचते हैं, तो "ए" दो तरीकों से भुगतान वास्तव में दो भुगतान है। लेखक इस विचार पर लटका रहे हैं कि भुगतान भुगतान के मामले के माध्यम से कई भुगतान विधियों को एक ही पास होना होगा। आप प्रति भुगतान विधि एक पास कर सकते हैं। यदि आप एकाधिक भुगतान लेनदेन को एक लॉजिकल भुगतान में लिंक करना चाहते हैं, तो भुगतान करें उपयोग केस का विस्तार करें, "एकाधिक भुगतान विधियों को संसाधित करें" केस या कुछ ऐसे, जो भुगतान भुगतान के माध्यम से एकाधिक पास लिंक करते हैं। – BobRodes

+2

साथ ही, जब मैं संभवतः एकाधिक भुगतानों को संभालने के लिए विस्तारित करने के बारे में बिंदु देखता हूं, तब भी मुझे लगता है कि सामान्यीकरण मॉडल का उपयोग करना अधिक सटीक है। विस्तार का उपयोग एकल और एकाधिक भुगतान विधियों के बीच स्पष्ट रूप से अंतर नहीं करता है। – BobRodes

संबंधित मुद्दे