💡 नोट: सभी डायग्राम्स को प्लांटयूएमएल प्रारूप में दिए गए हैं। आप उन्हें तुरंत उपयोग कर सकते हैंविजुअल पैराडाइम डायग्राम को कोड के रूप में.
🔹 UML का परिचय
UML क्या है?
“एक एकीकृत मॉडलिंग भाषा (UML) एक सामान्य उद्देश्य वाली दृश्य मॉडलिंग भाषा है जिसका उपयोग सॉफ्टवेयर प्रणाली के कलाकृतियों को निर्दिष्ट करने, दृश्य बनाने, निर्माण करने और दस्तावेजीकरण के लिए किया जाता है।” — रुम्बॉऊ, एल एल, 1999
मुख्य विशेषताएँ:
-
🎨 दृश्य निर्देशांक: प्रणाली मॉडलिंग के लिए आलेखी वाक्य रचना
-
📐 मानकीकृत: 1997 से OMG द्वारा अपनाई गई मानक
-
🔧 एक भाषा, विधि नहीं: निर्देशांक को परिभाषित करती है, प्रक्रिया नहीं
-
🌐 व्यापक दायरा: व्यापार प्रक्रियाओं, प्रणाली कार्यों, कोड संरचनाओं और डेटाबेस स्कीमा के मॉडल बनाता है
UML क्या नहीं है
| गलत धारणा | वास्तविकता |
|---|---|
| एक विकास विधि | बस एक मॉडलिंग निर्देशांक |
| एक प्रोग्रामिंग भाषा | एब्स्ट्रैक्ट विवरण भाषा |
| केवल ओओ प्रोग्रामिंग के लिए | डेटाबेस, व्यापार मॉडलिंग आदि के लिए लागू |
| सभी पहलुओं में सटीक रूप से परिभाषित | प्रारंभिक संस्करणों में कुछ अर्थग्राही अस्पष्टताएं बनी रहती हैं |
🔹 इतिहास और मानकीकरण
विकास समयरेखा

1965-1970: सिमुला-67 (पहली ओओ भाषा)
↓
1970 के दशक-1980 के दशक: एक्सेरॉक्स पार्क में स्मॉलटॉक
↓
1984: ब्जर्ने स्ट्रौस्ट्रप द्वारा C++ का परिचय
↓
1988-1992: ओओ विधियों का फैलाव (बूच, ओएमटी, ओओएसई आदि)
↓
1994: रुम्बॉघ रेशनल में बूच के साथ शामिल होते हैं → संघनन शुरू होता है
↓
1995: UML 0.8 ड्राफ्ट जारी किया गया
↓
1996: OMG ने मानक मॉडलिंग भाषा के लिए RFP जारी की
↓
1997: UML 1.1 OMG द्वारा अपनाई गई (नवंबर 14)
↓
2000: UML 1.3 औपचारिक रूप से प्रकाशित
↓
2003: UML 1.5 प्रकाशित; UML 2.0 सुपरस्ट्रक्चर स्वीकृत
यूएमएल ने “विधियों के युद्ध” को क्यों जीता
-
50 से अधिक प्रतिस्पर्धी ओओ विधियों को एक मानक में संगठित किया
-
प्रमुख उद्योग खिलाड़ियों (आईबीएम, माइक्रोसॉफ्ट, ओरेकल, एचपी) द्वारा समर्थित
-
अनुकूलन के लिए विस्तार तंत्र प्रदान किए
-
ओओ मॉडलिंग के लिए वास्तविक मानक बन गया
⚠️ आलोचनात्मक दृष्टिकोण: कुछ लोग कहते हैं कि यूएमएल एक “कमेटी द्वारा डिज़ाइन की गई भयानक भाषा” है जिसका प्रारंभिक संस्करण में अस्पष्ट अर्थ है।
🔹 क्लासेज और विशेषताएं
क्लास संरचना
एक यूएमएल क्लास को तीन तक विभाजनों वाले आयत के रूप में दर्शाया जाता है।

@startuml
class Student {
firstName: String
lastName: String
email[0..1]: String
encryptedPW: String
+ totalPoints(): Integer
+ setPassword(pw: String)
+ checkPW(pw: String): Boolean
}
@enduml
विशेषता घोषणा सिंटैक्स
[दृश्यता] नाम[बहुलता]: प्रकार [= डिफ़ॉल्ट मान] {गुण}
प्लांटयूएमएल उदाहरण:

@startuml
class Student {
+ ProgramOfStudy[0..2]: String = "MIS"
- encryptedPW: String {frozen}
# internalID: Integer
~ packagePrivateData: String
}
@enduml
विशेषता परिसर
-
प्रतिनिधि परिसर (डिफ़ॉल्ट): प्रत्येक वस्तु का अपना मान होता है
-
वर्ग परिसर (स्थिर): सभी प्रतिनिधियों द्वारा साझा किया जाने वाला एकमात्र मान

@startuml
class Student {
name: String
{स्थिर} count: Integer
}
@enduml
UML में कीज़ ⚠️
महत्वपूर्ण सीमा: UML में कीज़ की कोई निर्मित अवधारणा नहीं है। कार्यान्वयन के लिए स्टेरियोटाइप या टैग किए गए मानों का उपयोग करें।

@startuml
class Student {
{पीके} id: Integer
{एएके1} email: String
- name: String
}
@enduml
🔹 संबंध और संबंधता
मूल संबंध और बहुलता
@startuml
class Exercise
class Chapter
Exercise "0..*" -- "1..1" Chapter : संबंधित है
@enduml
व्याख्या: प्रत्येक अभ्यास ठीक एक अध्याय से संबंधित है; एक अध्याय में शून्य या एक से अधिक अभ्यास हो सकते हैं।
भूमिका नाम
संबंध के नाम के स्थान पर (या उनके साथ), संबंध के अंत में भूमिका नाम का उपयोग करें:
@startuml
class Person
class Company
Person "0..*" --> "0..1" Company : कर्मचारी/नियोक्ता
@enduml
कार्यान्वयन: द व्यक्ति तालिका में एक विदेशी कुंजी होगी नियोक्ता संदर्भित करना कंपनी.
नैविगेबिलिटी
तीरों के साथ यात्रा की दिशा निर्दिष्ट करें:

@startuml
class Exercise
class Chapter
Exercise "0..*" --> "1" Chapter
@enduml
-
तीर प्रभावी यात्रा दिशा को इंगित करता है
-
OODBs में: केवल एक दिशा में संकेतक के रूप में कार्यान्वित करता है
-
RDBMS में: जोड़े दोनों दिशाओं में काम करते हैं, चाहे जो भी हो
संग्रह प्रकार के साथ {क्रमबद्ध}

@startuml
class Chapter
class Exercise
Chapter "1" -- "0..*" Exercise : {ordered}
@enduml
-
{क्रमबद्ध}: क्रम बनाए रखें (सूची का उपयोग करें, सेट का नहीं) -
RDBMS में कार्यान्वयन: क्रम संख्या विशेषता जोड़ें
EXERCISES (
id प्राथमिक कुंजी,
chapter_id CHAPTERS को संदर्भित करता है,
sort_no पूर्णांक,
अद्वितीय (chapter_id, sort_no)
)
गुणक
गुणक समान वस्तुओं को एक कुंजी-जैसे तंत्र का उपयोग करके विभाजित करते हैं:

@startuml
class अध्याय
class अभ्यास
अध्याय "1" --> "0..1" अभ्यास : <<गुणवत्ता>> क्रमांक: पूर्णांक
@enduml
अर्थ: एक अध्याय और एक अभ्यास संख्या दी गई हो, तो अधिकतम एक अभ्यास लौटाया जाता है।
संबंध वर्ग
जब एक संबंध में विशेषताएँ या संचालन हों:
@startuml
class छात्र
class अभ्यास
class समाधान {
तिथि: तारीख
अंक: पूर्णांक
}
छात्र "0..*" -- "0..*" अभ्यास : हल किया हुआ
समाधान .. छात्र
समाधान .. अभ्यास
@enduml
-
एक
समाधानवस्तु प्रति (छात्र, अभ्यास) युग्म -
प्रवर्धन करता है: एक ही छात्र एक ही अभ्यास के लिए दो समाधान जमा नहीं कर सकता
संघटन बनाम समूहन
| विशेषता | संघटन (*--) |
समूहन (o--) |
|---|---|---|
| प्रतीक | काला हीरा | सफेद हीरा |
| संबंध | पूर्ण-भाग, मजबूत स्वामित्व | पूर्ण-भाग, कमजोर संदर्भ |
| जीवन चक्र | पूर्ण के साथ हटाए गए भाग | भाग स्वतंत्र |
| बहुलता | पूर्ण ओर पर 1 या 0..1 | कोई भी |
| RDBMS मैपिंग | हटाने पर कैस्केड |
मानक विदेशी कुंजी |
@startuml
class अध्याय
class अभ्यास
अध्याय *-- "0..*" अभ्यास : संघटना
अध्याय o-- "0..*" अभ्यास : समावेशन
@enduml
🔹 संचालन और विधियाँ
संचालन घोषणा सिंटैक्स
@startuml
class कैलकुलेटर {
+ getTotal(छात्रID: पूर्णांक, शामिलअतिरिक्त: बूलियन = सत्य): फ्लोट {isQuery=सत्य}
+ {स्थिर} getInstance(): कैलकुलेटर
+ {निर्माता} कैलकुलेटर(प्रारंभिकमान: फ्लोट)
- recalculate(): निर्देश
}
@enduml
पैरामीटर विशिष्टता:
[दिशा] नाम: प्रकार [= डिफ़ॉल्टमान]
-
दिशाएँ:
प्रवेश(डिफ़ॉल्ट),निर्गम,प्रवेश-निर्गम -
डिफ़ॉल्ट मान वैकल्पिक पैरामीटरों को सक्षम बनाते हैं
विशेष संचालन स्टेरियोटाइप
| स्टीरियोटाइप | उद्देश्य |
|---|---|
{isQuery=true} |
कोई राज्य परिवर्तन नहीं करता है |
{constructor} |
नए उदाहरणों को बनाता है और प्रारंभ करता है |
{static} |
वर्ग स्तर की क्रिया, कोई अप्रत्यक्ष स्वयं |
डेटाबेस संदर्भ में संचालन
सांस्कृतिक टकराहट: ओओ एनकैप्सुलेशन पर जोर देता है; संबंधित प्रत्यक्ष डेटा प्रवेश पर जोर देता है।
कार्यान्वयन रणनीतियाँ:
| संचालन प्रकार | आरडीबीएमएस कार्यान्वयन |
|---|---|
| सरल विशेषता पहुँच | सीधा SELECT/UPDATE |
| व्युत्पन्न विशेषता (कोई पैरामीटर नहीं) | डेटाबेस व्यू |
| व्युत्पन्न विशेषता (पैरामीटर के साथ) | स्टोर्ड प्रोसीजर या एप्लिकेशन तर्क |
| जटिल सीमा लागू करना | ट्रिगर या एप्लिकेशन प्रक्रियाएँ |
🔹 सामान्यीकरण और विरासत
मूल सामान्यीकरण
@startuml
class व्यक्ति
class छात्र
class प्रोफेसर
व्यक्ति <|-- छात्र
व्यक्ति <|-- प्रोफेसर
@enduml
सारांश वर्ग और संचालन
@startuml
सारांश वर्ग खाता {
- शेष: फ्लोट
+ जमा राशि(राशि: फ्लोट): नहीं
+ {सारांश} निकास राशि(राशि: फ्लोट): नहीं
}
@enduml
सामान्यीकरण प्रतिबंध
@startuml
class व्यक्ति
class छात्र
class प्रोफेसर
class अन्य व्यक्ति
व्यक्ति <|-- छात्र : <<{असंगत, पूर्ण}>>
व्यक्ति <|-- प्रोफेसर : <<{असंगत, पूर्ण}>>
व्यक्ति <|-- अन्य व्यक्ति : <<{असंगत, पूर्ण}>>
@enduml
बहु-वर्गीकरण / विभेदक
@startuml
class कर्मचारी
class कर्मचारी स्टाफ
class शिक्षक मंडल
class एचएमओ
class गैर-एचएमओ
कर्मचारी <|-- कर्मचारी स्टाफ : <<प्रकार>>
कर्मचारी <|-- शिक्षक मंडल : <<प्रकार>>
कर्मचारी <|-- एचएमओ : <<बीमा>>
कर्मचारी <|-- गैर-एचएमओ : <<बीमा>>
@enduml
-
विभेदक एक दूसरे से असंगत विशेषीकरणों के समूह को समूहित करते हैं
-
वस्तुएं प्रत्येक विभेदक आयाम के लिए एक मान रख सकती हैं
🔹 विस्तार तंत्र
यूएमएल तीन विस्तार तंत्र प्रदान करता है:
1. स्टेरियोटाइप्स<< >>
मेटामॉडल तत्वों के नए “उपप्रकार” बनाकर यूएमएल अर्थशास्त्र का विस्तार करें।
@startuml
class ग्राहक <<एंटिटी>> {
- आईडी: पूर्णांक
- नाम: स्ट्रिंग
}
class गणित पुस्तकालय <<उपयोगिता>> {
+ sin(x: फ्लोट): फ्लोट
+ cos(x: फ्लोट): फ्लोट
}
@enduml
2. टैग किए गए मान{कुंजी=मान}
मॉडल तत्वों में कस्टम गुण जोड़ें।
@startuml
class Student {
{author=sb, version=1.0, persistence=persistent}
- id: Integer
}
@enduml
3. सीमाएँ {...}
मुक्त-फॉर्म पाठ, OCL, या पूर्वनिर्धारित संक्षिप्त रूपों का उपयोग करके अर्थपूर्ण सीमाएँ जोड़ें।
@startuml
class Exercise {
- no: Integer
- points: Integer {value >= 0}
{points <= maxPoints}
}
@enduml
🔹 डेटाबेस डिज़ाइन के लिए UML: मुख्य विचार
UML को संबंधात्मक स्कीमा में रूपांतरित करना
| UML निर्माण | संबंधात्मक कार्यान्वयन |
|---|---|
| वर्ग | तालिका |
| लक्षण | स्तंभ |
मुख्य कुंजी {pk} |
PRIMARY KEY सीमा |
| संबंध (1:*) | “बहुत” ओर पर विदेशी कुंजी |
| संबंध (:) | संयोजन/प्रतिच्छेदन तालिका |
| संयोजन | विदेशी कुंजी + हटाए जाने पर स्वचालित रूप से हटाएं |
| संबंध वर्ग | संयुक्त एफके और विशेषताओं वाली तालिका |
| सामान्यीकरण | अलग-अलग तालिकाएं (एफके के साथ) या प्रकार विभेदक के साथ एकल तालिका |
{क्रमबद्ध} संबंध |
क्रमानुक्रम स्तंभ जोड़ें + अद्वितीय सीमा |
| गुणक | संयुक्त कुंजी या सूचूकृत स्तंभ का हिस्सा |
महत्वपूर्ण अंतर: ओओ बनाम संबंधात्मक
| पहलू | वस्तु-उन्मुख | संबंधात्मक |
|---|---|---|
| पहचान | वस्तु संदर्भ (प्रतिस्थापन) | मुख्य कुंजी (व्यापार या प्रतिस्थापन) |
| संचालन | डिज़ाइन के केंद्र में, संवेष्टित | बाहरी (SQL, प्रक्रियाएं) |
| संवेष्टन | निजी विशेषताएं, सार्वजनिक इंटरफेस | डिफ़ॉल्ट रूप से सीधे तालिका पहुंच |
| विरासत | मूल भाषा समर्थन | जटिल मैपिंग रणनीतियां |
| संबंध | संकेतक/संदर्भ | विदेशी कुंजियां और जॉइन्स |
डीबी डिज़ाइनर्स के लिए व्यावहारिक सुझाव
-
कुंजियों को स्पष्ट रूप से मॉडल करें: उपयोग करें
{pk},{ak1}स्टेरियोटाइप्स क्योंकि UML में मूल रूप से की समर्थन नहीं है -
परिस्थिति को चिह्नित करें: उपयोग करें
{persistent}टैग्ड मान का उपयोग डेटाबेस क्लासेस को अस्थायी एप्लिकेशन क्लासेस से अलग करने के लिए -
ऑपरेशन को सरल बनाएं: क्वेरी ऑपरेशन को व्यू में मैप करें; जटिल ऑपरेशन को स्टोर्ड प्रोसीजर में मैप करें
-
विरासत को सावधानी से संभालें: क्वेरी पैटर्न के आधार पर मैपिंग रणनीति चुनें
-
प्रतिबंधों को दस्तावेज़ीकृत करें: व्यापार नियमों के लिए OCL या स्पष्ट पाठ प्रतिबंधों का उपयोग करें
-
संबंध क्लासेस का सावधानी से उपयोग करें: केवल तभी जब संबंध में महत्वपूर्ण विशेषताएं हों
🎯 त्वरित संदर्भ चेट शीट
PlantUML क्लास डायग्राम नोटेशन सारांश
@startuml
class <<स्टेरियोटाइप>> क्लासनाम {
{टैग्ड=मान}
[+/-/#/~] नाम[बहुलता]: प्रकार [= मान] {गुण}
[+/-/#/~] नाम(पैरामीटर): लौटाएं {गुण}
}
@enduml
संबंध नोटेशन
@startuml
क्लासए "बहुलताA" -- "बहुलताB" क्लासब : संबंधनाम
क्लासए *-- क्लासब ' संघटना
क्लासए o-- क्लासब ' समावेशन
क्लासए --> क्लासब ' नेविगेबल
@enduml
दृश्यता प्रतीक
-
+सार्वजनिक -
-निजी -
#सुरक्षित -
~पैकेज
सामान्य गुण एवं सीमाएँ
-
{स्थिर}/{प्रश्न_सत्य=true}/{अमूल्य} -
{मान >= 0}/{या-केवल}/{क्रमबद्ध}/{प्राथमिक_कुंजी}
💡 अंतिम विचार: यूएमएल वर्ग आरेख अवधारणात्मक मॉडलिंग के लिए शक्तिशाली हैं, लेकिन याद रखें कि इनका मुख्य रूप से सॉफ्टवेयर इंजीनियरिंग के लिए डिज़ाइन किया गया था। यूएमएल का डेटाबेस डिज़ाइन के लिए उपयोग करते समय, उनके ऑब्जेक्ट-ओरिएंटेड आधार के बाहर रहने वाली संबंधात्मक अवधारणाओं जैसे कीज़, नॉर्मलाइज़ेशन और विवरणात्मक सीमाओं को पकड़ने के लिए नोटेशन को विस्तारित करने के लिए तैयार रहें (स्टेरियोटाइप्स, टैग्ड मान, सीमाएँ के साथ)।
गाइड स्टेफन ब्रास के “भाग 6: यूएमएल वर्ग आरेख” से संकलित की गई है, हैले विश्वविद्यालय, 2003। सभी आरेख आधुनिक उपकरण संगतता के लिए प्लांटयूएमएल सिंटैक्स में प्रारूपित किए गए हैं।











