परिचय
मुझे लगता है कि सभी ने कहावत सुनी है "दो बार मापें, एक बार काटें"। प्रोग्रामिंग में यह सही सलाह है। इससे पहले कि आप इसे करने में कोई समय व्यतीत करें, कार्यान्वयन के बारे में सोचना हमेशा बेहतर होता है। कार्यान्वयन के दौरान, आपको अक्सर कक्षाएं बनाने और यह सोचने की आवश्यकता होती है कि वे कैसे इंटरैक्ट करेंगे। इसका एक दृश्य प्रतिनिधित्व अक्सर आपको सबसे सही समाधान के साथ आने में मदद कर सकता है। यहीं पर यूएमएल क्लास डायग्राम हमारी सहायता के लिए आता है।यूएमएल क्या है?
यदि आप खोज इंजनों में प्रासंगिक छवियों को देखते हैं, तो आप देखेंगे कि UML का आरेखों, तीरों और वर्गों से कुछ लेना-देना है। आपको यह जानने की जरूरत है कि यूएमएल यूनिफाइड मॉडलिंग लैंग्वेज के लिए है। एकीकृत यहाँ महत्वपूर्ण शब्द है। इसका मतलब यह है कि हमारी छवियां न केवल हमारे द्वारा समझी जाएंगी, बल्कि यूएमएल को जानने वाले किसी भी अन्य व्यक्ति द्वारा भी समझी जाएंगी। यह रेखाचित्र बनाने की लोकभाषा है।विकिपीडिया के अनुसार,
"यूएमएल सॉफ्टवेयर इंजीनियरिंग के क्षेत्र में एक सामान्य-उद्देश्य, विकासात्मक, मॉडलिंग भाषा है जिसका उद्देश्य सिस्टम के डिजाइन की कल्पना करने के लिए एक मानक तरीका प्रदान करना है।"सबसे दिलचस्प बात यह है कि हर कोई अनुमान नहीं लगाएगा कि यूएमएल के विनिर्देश हैं। और यहाँ तक कि एक UML 2 विशिष्टता भी है। विशिष्टता पर अधिक जानकारी वस्तु प्रबंधन समूह की वेबसाइट पर उपलब्ध है। वास्तव में, यह समूह यूएमएल विनिर्देशों को विकसित करता है। यह भी दिलचस्प है कि यूएमएल कक्षाओं की संरचना का वर्णन करने तक ही सीमित नहीं है। यूएमएल डायग्राम कई प्रकार के होते हैं। विकिपीडिया में विभिन्न प्रकार के यूएमएल आरेखों का संक्षिप्त विवरण है: यूएमएल आरेख । यूएमएल वर्ग आरेखों पर लौटते हुए, यह "हेड फर्स्ट डिज़ाइन पैटर्न" पुस्तक का उल्लेख करने योग्य है , डिजाइन पैटर्न को चित्रित करने के लिए यूएमएल आरेखों का उपयोग करता है। लब्बोलुआब यह है कि यूएमएल वास्तव में प्रयोग किया जाता है। और यह पता चला है कि इसे जानना और उपयोग करना समझना काफी उपयोगी है।
आवेदन
आइए जानें कि हम आईडीई में यूएमएल के साथ काम कर सकते हैं। हम अपने IDE के रूप में IntelliJ IDEA का उपयोग करेंगे। यदि आप IntelliJ IDEA अल्टीमेट का उपयोग कर रहे हैं, तो हमारे पास "आउट ऑफ द बॉक्स" "UML सपोर्ट" प्लगइन स्थापित होगा। यह आपको स्वचालित रूप से सुंदर वर्ग आरेख उत्पन्न करने देता है। उदाहरण के लिए, ArrayList क्लास में जाने के लिए Ctrl+N या "नेविगेट" -> "क्लास" मेनू आइटम का उपयोग करें। अब कक्षा के नाम के संदर्भ मेनू में, "आरेख" चुनें -> "आरेख पॉपअप दिखाएं"। नतीजतन, हमें एक सुंदर आरेख मिलता है।

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
आईडिया में परिणाम देखने के लिए, "व्यू" -> "टूल विंडोज" -> "प्लांटयूएमएल" चुनें। हमें केवल दो वर्ग मिलते हैं जो वर्गों का प्रतिनिधित्व करते हैं। हम जानते हैं कि ये दोनों वर्ग सूची इंटरफ़ेस को लागू करते हैं। इस वर्ग संबंध को बोध कहा जाता है। इस संबंध को एक बिंदीदार रेखा के साथ एक तीर का उपयोग करके दर्शाया गया है। आइए इसे ड्रा करें:
interface List
List <|.. ArrayList
List <|.. LinkedList
सूची संग्रह वर्ग के बच्चों में से एक है । यानी, यह संग्रह प्राप्त करता है । इस संबंध को सामान्यीकरण कहा जाता है। यह एक साधारण निरंतर रेखा वाले तीर की तरह दिखता है। आइए इसे ड्रा करें:
interface Collection
Collection <|-- List
अगले प्रकार के संबंध के लिए, ArrayList वर्ग विवरण में तत्वों के पैकेज निजी सरणी के बारे में एक प्रविष्टि जोड़ें:
~Object[] elementData
अब हम दिखाना चाहते हैं कि ArrayList में कुछ ऑब्जेक्ट हैं। इस मामले में, एक एकत्रीकरण संबंध होगा। सारणी सूचीएक समुच्चय है, क्योंकि इसमें अन्य वस्तुएँ हैं। हम कहते हैं एकत्रीकरण क्योंकि सूची की वस्तुएं सूची के बिना मौजूद हो सकती हैं: वे सूची के अभिन्न अंग नहीं हैं। उनका जीवनकाल सूची के जीवनकाल से बंधा नहीं है। शब्द "एग्रीगेट" लैटिन से हमारे पास आता है और "इकट्ठे" के रूप में अनुवाद करता है, जो कि कुछ से बना है। उदाहरण के लिए, जीवन में, हमारे पास एक पंप असेंबली (एग्रीगेट) होती है, जिसमें एक पंप और एक मोटर होती है। असेंबली को स्वयं अलग किया जा सकता है, और हम इसके कुछ घटकों को अकेला छोड़ सकते हैं। उदाहरण के लिए, बेचने के लिए या किसी अन्य विधानसभा में डालने के लिए। यह एक सूची में उसी तरह है। यह समग्र और एक सतत रेखा पर एक खाली रोम्बस के साथ व्यक्त किया गया है। हम इसका प्रतिनिधित्व इस प्रकार करेंगे:
class Object{
}
ArrayList o- Object
अब हम यह दिखाना चाहते हैं कि ArrayList के विपरीत , LinkedList वर्ग में नोड s - कंटेनर होते हैं जो संग्रहीत डेटा को संदर्भित करते हैं। इस मामले में, नोड लिंक्डलिस्ट का हिस्सा हैं और उनका स्वतंत्र अस्तित्व नहीं है। एक नोड सामग्री ही नहीं है। इसमें केवल सामग्री का संदर्भ होता है। उदाहरण के लिए, जब हम LinkedList में एक स्ट्रिंग जोड़ते हैं , तो हम एक नया नोड जोड़ रहे होते हैं जिसमें स्ट्रिंग का संदर्भ होता है, साथ ही पिछले और अगले नोड का लिंक भी होता है।. इस संबंध को रचना कहा जाता है। यह समग्र (घटक भागों से बना कुछ) पर भरे हुए रोम्बस के साथ एक सतत रेखा खींचकर दर्शाया गया है। अब हम संबंध को पाठ के रूप में प्रस्तुत करेंगे:
class Node{
}
LinkedList *-- Node
और अब आपको यह सीखने की जरूरत है कि दूसरे महत्वपूर्ण प्रकार के रिश्ते को कैसे चित्रित किया जाए: निर्भरता। इसका उपयोग तब किया जाता है जब एक वर्ग दूसरे का उपयोग करता है, लेकिन वर्ग में प्रयुक्त वर्ग शामिल नहीं होता है और न ही इसका उत्तराधिकारी होता है। उदाहरण के लिए, LinkedList और ArrayList जानते हैं कि ListIterator कैसे बनाया जाता है । हम इसे बिंदीदार रेखा वाले तीरों के रूप में दर्शाते हैं:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
यह सब करने के बाद, हमें मिलता है: 
स्वचालन
प्लांटयूएमएल आरेखों को स्वचालित रूप से उत्पन्न करने के विभिन्न तरीके हैं। उदाहरण के लिए, आईडिया में SketchIT प्लगइन है, लेकिन यह आरेखों को पूरी तरह से सही ढंग से नहीं बनाता है। मान लीजिए कि इंटरफेस का कार्यान्वयन गलत तरीके से तैयार किया गया है (इसे विरासत के रूप में प्रदर्शित किया गया है)। इंटरनेट के उदाहरण हैं कि इसे आपकी परियोजना की निर्माण प्रक्रिया में कैसे एकीकृत किया जाए। उदाहरण के लिए, आप मावेन के साथ यूएमएल-जावा-डॉकलेट का उपयोग करने का तरीका जान सकते हैं। प्रदर्शित करने के लिए, हम जल्दी से मावेन परियोजना बनाने के लिए मावेन आर्केटाइप का उपयोग करेंगे। दौड़ना
mvn archetype:generate
कोई संख्या चुनें या फ़िल्टर लागू करें के जवाब में, डिफ़ॉल्ट छोड़ दें — बस Enter दबाएं. यह हमेशा "मावेन-आर्कटाइप-क्विकस्टार्ट" होगा। नवीनतम संस्करण का चयन करें। इसके बाद, हम कुछ सवालों के जवाब देंगे और प्रोजेक्ट बनाना समाप्त करेंगे: 
mvn clean install
और
mvn javadoc: javadoc
यदि अब हम जनरेट किए गए दस्तावेज़ (एक्सप्लोरर टारगेट\साइट\apidocs\index.html) खोलते हैं, तो हम यूएमएल डायग्राम देखेंगे। वैसे, कार्यान्वयन संबंध अब सही ढंग से प्रदर्शित होता है :)
GO TO FULL VERSION