2013-05-13 6 views
11

मुझे जावा एप्लिकेशन से कुछ कक्षाओं को यूएमएल 2 क्लास आरेख में इंजीनियर करना होगा। अब तक बहुत अच्छा है, मैंने पाया है कि जॉन स्कीट द्वारा प्रस्तावित पूरे वर्ग के लिए क्लास टेम्पलेट्स का प्रतिनिधित्व कैसे करें: What is the correct way to represent template classes with UML?यूएमएल विधि में जेनेरिक पैरामीटर का प्रतिनिधित्व कैसे करें?

public class Foo<T> { 
    //class fields and methods... 
} 

अब मैं एक दुविधा एक वर्ग है जो केवल एक विधि एक सामान्य पैरामीटर शामिल इंजीनियर को बदलने की कोशिश कर रहा है: इस जानकारी के साथ, मैं रिवर्स इस तरह एक वर्ग इंजीनियर है

public class OtherFoo { 
    public <T extends Comparable<T>> boolean bar(T x, T y) { 
     //fancy code goes here... 
    } 
} 

क्या तुम जानते हो किसी भी यूएमएल 2 उपकरण पर ध्यान दिए बिना कैसे प्राप्त करें? मैं सिर्फ अवधारणा को समझना चाहता हूं।

+0

+1, अच्छा सवाल !!!!! – NINCOMPOOP

उत्तर

9

मुझे नहीं पता कि यह आपके पसंद के उपकरण में कैसे करें, लेकिन मॉडल स्तर पर, यह कक्षाओं के लिए बिल्कुल काम करता है। आप अपने हस्ताक्षर के साथ एक टेम्पलेट ऑपरेशन बनाते हैं।

टेम्पलेट मापदंडों और टेम्पलेट पैरामीटर एक टेम्पलेट आपरेशन के बंधन आपरेशन के नाम के बीच में दो सूचियों और ऑपरेशन के मापदंडों हैं:

UML2 superstructure के अध्याय 17.4.14 अंकन के लिए इस निर्दिष्ट करता है ।
* < दृश्यता> < नाम> '<' < टेम्पलेट पैरामीटर-सूची> '>' '< <' < बाध्यकारी अभिव्यक्ति-सूची> '>>' '(' < पैरामीटर> [ ',' < पैरामीटर >] ** ')' [ ':' < संपत्ति-स्ट्रिंग>]

आपके मामले में, के पहले के सरल मामले देखते हैं

public <T> boolean bar(T x, T y) 
(: टी, वाई: टी एक्स):

यह करने के लिए

+ बार < टी> अनुरूप होगा बूलियन

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

+ बार < टी> तुलनीय < T1-> टी >> देता है (एक्स: टी, वाई: टी): बूलियन


नोट: ( से आगे की गहराई से जुड़ाव) यूएमएल (और कुछ डिग्री सी ++) द्वारा निर्दिष्ट टेम्पलेट्स जावा में जेनरिक से बहुत अलग जानवर हैं। वे समान या कम दिखते हैं, लेकिन कभी-कभी सूक्ष्म-अंतर उनके अर्थशास्त्र में भिन्न होते हैं जो दोनों से मेल खाना मुश्किल बना सकते हैं।यूएमएल में सबसे महत्वपूर्ण यह है:

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

इसका मतलब है कि यूएमएल में, अन्यफू को भी एक टेम्पलेट होना चाहिए - यानी एक टेम्पलेट हस्ताक्षर (0 पैरामीटर के साथ)। टेम्पलेट स्कोप के बाहर ऑपरेशन टेम्पलेट का सही ढंग से उपयोग करने के लिए - यानी इसे किसी गतिविधि या समान में कॉल करें - आपको पहले इसे कंक्रीट ऑपरेशन में बांधना होगा, जिसका उपयोग इसके बजाए किया जाता है। आपके उदाहरण के मामले में, इसका अर्थ है:

  1. बाध्यकारी अन्य फ़ू टेम्पलेट एक (अज्ञात) बाध्य वर्ग में।
  2. बाध्यकारी कक्षा ऑपरेशन टेम्पलेट बाध्य वर्ग में एक ऑपरेशन के लिए।
+1

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

+0

अभिव्यक्ति "* + बार तुलनात्मक टी >> (एक्स: टी, वाई: टी): बूलियन *" मुझे अजीब लग रहा है। टी वास्तव में सही होने के बाद पहला बड़ा संकेत है? इसे "* -> *" नहीं होना चाहिए? – IARI

+0

नहीं, "->" टेम्पलेट पैरामीटर बाध्यकारी को इंगित करता है, जबकि ">" टेम्पलेट पैरामीटर पर एक प्रकार की बाधा दर्शाता है। तो इस मामले में, इसका मतलब यह नहीं है कि "तुलना करने योग्य टी को तुलना करें", लेकिन "तुलनात्मक के उपप्रकारों को प्रतिबंधित करें"। विवरण के लिए यूएमएल सुपरस्टक्चर सेक्शन "क्लासिफायर टेम्पलेट"/"नोटेशन" (यूएमएल 2.5 के लिए सेक्शन 9.3.4) देखें। – Carsten

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