de_DEen_USes_ESfa_IRhi_INid_IDpt_PT

प्रस्तावना

यूनिफाइड मॉडलिंग लैंग्वेज (UML) क्लास डायग्राम सॉफ्टवेयर आर्किटेक्चर के लिए ब्लूप्रिंट का कार्य करते हैं, जो अमूर्त आवश्यकताओं और ठोस कोड कार्यान्वयन के बीच की खाई को पाटते हैं। किसी सिस्टम की संरचना—उसके क्लास, गुण, ऑपरेशन और उनके बीच के संबंधों—को दृश्य रूप देने से डेवलपर एक लाइन कोड लिखने से पहले ही मजबूत डिजाइन सुनिश्चित कर सकते हैं।

यह गाइड एक व्यापक चिट्सशीट का उपयोग करके UML क्लास डायग्राम की आवश्यक सिंटैक्स को विस्तार से समझाती है और इन अवधारणाओं को एक वास्तविक दुनिया के परिदृश्य पर लागू करती है: यूनिफाइड फूड डिलीवरी प्लेटफॉर्म. इस लेख के अंत तक, आप विरासत (inheritance), इंटरफेस, संरचना (composition) और समूहीकरण (aggregation) वाले जटिल सिस्टमों को मॉडल करने का तरीका समझ जाएंगे।


UML क्लास आरेख चिट-शीट

भाग 1: निर्माण ब्लॉक (सिंटैक्स और संकेत)

केस स्टडी में उतरने से पहले, हमें UML डायग्रामों में उपयोग किए जाने वाले शब्दों का ज्ञान स्थापित करना होगा।

1. क्लास संरचना और दृश्यता

एक क्लास को तीन भागों में विभाजित एक आयत द्वारा दर्शाया जाता है:

  • ऊपरी: क्लास का नाम (उदाहरण के लिए, FlightBooking).

  • मध्य: गुण/विशेषताएं (उदाहरण के लिए, + nameProperty: String).

  • निचला: विधियां/ऑपरेशन (उदाहरण के लिए, + isActive(): boolean).

दृश्यता संशोधक:

  • + सार्वजनिक: किसी भी अन्य क्लास द्वारा पहुंच योग्य।

  • - निजी: केवल क्लास के भीतर पहुंच योग्य।

  • # सुरक्षित: वर्ग और उसके उप-वर्गों के भीतर सुलभ।

  • ~ पैकेज: केवल उसी पैकेज के भीतर सुलभ।

2. विशेष वर्ग प्रकार

  • इंटरफ़ेस (<<इंटरफ़ेस>>): विधि को बिना कार्यान्वयन के परिभाषित करने वाले अनुबंध। एक हरे बॉक्स (इस चिपकते नोट में) या मानक संकेतन द्वारा दर्शाया गया।

    • उदाहरण: UserRepo के साथ + विधि(): void.

  • अमूर्त वर्ग (<<अमूर्त>>): आधार वर्ग जिन्हें सीधे संस्थापित नहीं किया जा सकता। इनमें अमूर्त विधियाँ हो सकती हैं।

    • उदाहरण: Component के साथ + render(): void // अमूर्त.

  • संख्याएँ: नामक स्थिरांकों का समुच्चय।

    • उदाहरण: JobStatus.

ऑर्डर सिस्टम वर्ग आरेख उदाहरण

 

@startuml
skinparam classAttributeIconSize 0
skinparam shadowing false

‘ — इंटरफ़ेस —
interface PaymentGateway {
+ process(amount: double): boolean
}

‘ — अमूर्त वर्ग —
abstract class Order {
# orderId: String
# totalAmount: double
+ {abstract} calculateTax(): double
+ getSummary(): String
}

‘ — वर्ग —
class PhysicalOrder {
– shippingWeight: double
+ calculateTax(): double
}

class DigitalOrder {
– downloadLink: String
+ calculateTax(): double
}

class OrderItem {
– productName: String
– price: double
– quantity: int
}

class PayPalGateway {
+ process(amount: double): boolean
}

‘ — संबंध —’
आदेश <|– भौतिक आदेश
आदेश <|– डिजिटल आदेश

आदेश *– “1..*” आदेश वस्तु : शामिल करता है
आदेश ..> पेमेंट गेटवे : उपयोग करता है

पेमेंट गेटवे <|.. पेपल गेटवे

@enduml


भाग 2: संबंध और बहुलता

वर्गों को जोड़ने वाली रेखाएं परिभाषित करती हैं कि वे कैसे परस्पर क्रिया करते हैं।

1. संघ प्रकार

  • विरासत (सामान्यीकरण):खाली त्रिभुज के साथ ठोस रेखा। “एक है” संबंध।

    • उदाहरण: कार और मोटरसाइकिल से विरासत में लेते हैं वाहन.

  • कार्यान्वयन:खाली त्रिभुज के साथ बिंदुदार रेखा। एक वर्ग इंटरफेस अनुबंध को पूरा करता है।

    • उदाहरण: कार लागू करता है चलाया जा सकने वाला.

  • संरचना (मजबूत स्वामित्व):भरे हुए हीरे के साथ ठोस रेखाहीरा. ‘अंश’ ‘समग्र’ के बिना अस्तित्व में नहीं रह सकता।

    • उदाहरण: रेस्तरां (समग्र) स्वामित्व रखता है मेनू (अंश)। यदि रेस्तरां बंद हो जाता है, तो मेनू भी समाप्त हो जाता है।

  • समूहीकरण: एक ठोस रेखा जिसके साथ खाली हीरा. एक ‘है-ए’ संबंध जहाँ अंश स्वतंत्र रूप से अस्तित्व में रह सकते हैं।

    • उदाहरण: ऑर्डर समूहीकरण कर रहा है रेस्तरां (रेस्तरां मौजूद रहता है, भले ही ऑर्डर को हटा दिया गया हो)।

2. बहुलता की कुंजी

रेखाओं के अंत में संख्याएँ कार्डिनैलिटी को दर्शाती हैं:

  • 1: बिल्कुल एक।

  • 0..1: शून्य या एक (वैकल्पिक)।

  • 1..*: एक या अधिक (अनिवार्य सूची)।

  • *: अनेक (शून्य या अधिक)।

विरासत, कार्यान्वयन, संरचना और समूहीकरण की अवधारणाएँ उदाहरण

@startuml
‘ इंटरफेस और बेस क्लासेस
interface Drivable {
+ drive()
}
abstract class Vehicle {
+ startEngine()
}
‘ वर्ग
class Car {
}
class Motorcycle {
}
class Restaurant {
– name: String
}
class Menu {
}
class Order {
}
‘ संबंध
‘ 1. वंशावली (सामान्यीकरण)
Vehicle <|– Car
Vehicle <|– Motorcycle
‘ 2. कार्यान्वयन
Drivable <|.. Car
‘ 3. संरचना (मजबूत स्वामित्व)
Restaurant *– Menu : owns
‘ 4. समूहीकरण
Order o– Restaurant : involves
‘ बहुलता उदाहरण
‘ रेस्तरां में एक या कई मेनू होते हैं (1..*)
‘ ऑर्डर में शून्य या एक रेस्तरां शामिल होता है (0..1)
Restaurant “1” *– “1..*” Menu
ऑर्डर “1” o– “0..1” रेस्टोरेंट
@enduml

भाग 3: वास्तविक-विश्व केस स्टडी: एकीकृत फूड डिलीवरी प्लेटफॉर्म

यह अनुभाग चिटशीट के केंद्रीय आरेख का विश्लेषण करता है, जिसमें फूड डिलीवरी एप्लिकेशन की वास्तुकला को तोड़ा गया है।

1. उपयोगकर्ता हियरार्की (विरासत और संरचना)

सिस्टम एक सामान्य उपयोगकर्ता क्लास से शुरू होता है, जिसे अमूर्त. यह सुनिश्चित करता है कि कोई सामान्य “उपयोगकर्ता” वस्तुएं नहीं बनाई जातीं, केवल विशिष्ट प्रकार ही बनाए जाते हैं।

  • विरासत: ग्राहक और ड्राइवर विस्तारित करते हैं उपयोगकर्ता.

  • संरचना:

    • ग्राहक में एक शिपिंग पता (मजबूत स्वामित्व) है।

    • ड्राइवर में वाहन विवरण (मजबूत स्वामित्व) है।

2. रेस्टोरेंट और मेनू पारिस्थितिकी तंत्र

यह अनुभाग गहरे एम्बेडिंग और संग्रहों को प्रदर्शित करता है।

  • इंटरफेस कार्यान्वयन: रेस्टोरेंट लागू करता है <<इंटरफ़ेस>> स्थानिक, यह सुनिश्चित करते हुए कि हर रेस्तरां में स्थान डेटा हो।

  • संरचना श्रृंखला:

    • रेस्तरां (1) प्रबल रूप से स्वामित्व रखता है मेनू (1).

    • मेनू शामिल करता है मेनू श्रेणी (1..*).

    • मेनू श्रेणी शामिल करता है मेनू आइटम (*).

    • नोट: यह संरचना यह सुनिश्चित करती है कि एक मेनू आइटम बिना श्रेणी के अस्तित्व में नहीं हो सकता, जो बिना मेनू के अस्तित्व में नहीं हो सकता।

3. ऑर्डर प्रसंस्करण और भुगतान

  • ऑर्डर संरचना:

    • ऑर्डर का संबंध है रेस्तरां (समूहीकरण)।

    • ऑर्डर प्रबल रूप से स्वामित्व रखता है ऑर्डर लाइन आइटम (1..*).

    • ऑर्डर का है भुगतान (0..1), जिसका अर्थ है कि प्रारंभिक निर्माण चरण के दौरान भुगतान वैकल्पिक है।

  • भुगतान रणनीति (बहुरूपता):

    • सिस्टम एक इंटरफ़ेस का उपयोग करता है<<interface>> भुगतान प्रोसेसर.

    • वास्तविक वर्गStripeProcessor और PayPalProcessor इस इंटरफ़ेस को लागू करते हैं। इससे सिस्टम को कोर को बदले बिना भुगतान गेटवे बदलने की अनुमति मिलती हैऑर्डर तर्क।

4. एबस्ट्रैक्ट क्लास बनाम इंटरफ़ेस (वाहन उदाहरण)

चिपट पत्र के ऊपरी दाहिने हिस्से में एक सामान्य भ्रम को स्पष्ट किया गया है:

  • एबस्ट्रैक्ट क्लास (वाहन): कार और मोटरसाइकिल से वंशानुगत हैंवाहन. इसका अर्थ है कि वे कोर डेटा/संरचना साझा करते हैं (उदाहरण के लिए,इंजन प्रकार, चक्र).

  • इंटरफ़ेस (चालनीय): कार लागू करता है चालनीय. इसका तात्पर्य है कार में विशिष्ट व्यवहार (drive()) है जो मोटरसाइकिल के पास नहीं हो सकता है (या अलग तरीके से लागू कर सकता है).


भाग 4: PlantUML के साथ दृश्यीकरण

नीचे ‘यूनिफाइड फूड डिलीवरी प्लेटफॉर्म’ के मूल संरचना को जनरेट करने के लिए PlantUML कोड दिया गया है, जिसे केस स्टडी में वर्णित किया गया है। आप आरेख देखने के लिए इसे किसी भी PlantUML एडिटर में कॉपी कर सकते हैं।

@startuml
' स्टाइलिंग के लिए Skinparams जो cheatsheet के माहौल से मेल खाते हैं
skinparam classAttributeIconSize 0
skinparam linetype ortho
skinparam shadowing false

' --- लीजेंड / स्टिरियोटाइप्स ---
interface "Drivable" as Drivable {
  + drive(): void
}

interface "Locatable" as Locatable {
  + getCoordinates(): Coordinate
}

interface "PaymentProcessor" as PaymentProcessor {
  + process(amount: double): boolean
}

abstract class "User" as User {
  # id: int
  # name: String
  # email: String
  + login(): void
}

abstract class "Vehicle" as Vehicle {
  # model: String
  # year: int
}

class "Car" as Car
class "Motorcycle" as Motorcycle
class "Customer" as Customer
class "Driver" as Driver
class "Restaurant" as Restaurant
class "Menu" as Menu
class "MenuCategory" as MenuCategory
class "MenuItem" as MenuItem
class "Order" as Order
class "OrderLineItem" as OrderLineItem
class "Payment" as Payment
class "StripeProcessor" as StripeProcessor
class "PayPalProcessor" as PayPalProcessor

' --- संबंध ---

' वाहन हियरार्की
Vehicle <|-- Car
Vehicle <|-- Motorcycle
Car ..|> Drivable : लागू करता है

' उपयोगकर्ता हियरार्की
User <|-- Customer
User <|-- Driver

' ग्राहक/ड्राइवर संरचनाएं
Customer *-- "1" ShippingAddress : मजबूत स्वामित्व
Driver *-- "1" VehicleDetails : मजबूत स्वामित्व

' रेस्तरां पारिस्थितिकी तंत्र
Restaurant ..|> Locatable : लागू करता है
Restaurant "1" *-- "1" Menu : संरचना
Menu "1" *-- "1..*" MenuCategory : संग्रह
MenuCategory "1" *-- "*" MenuItem : संग्रह

' ऑर्डर पारिस्थितिकी तंत्र
Order "1" o-- "1" Restaurant : एग्रीगेशन
Order "1" *-- "*" OrderLineItem : संरचना
Order "1" --> "0..1" Payment

' भुगतान प्रोसेसर
PaymentProcessor <|.. StripeProcessor
PaymentProcessor <|.. PayPalProcessor

' विशिष्ट संबंध (लीजेंड से स्व-संबंध उदाहरण)
class "Employee" as Employee
Employee --> "रिपोर्ट करता है" Employee

@enduml


निष्कर्ष

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

बहुलता (1, , 1..) और स्वामित्व (संघटन बनाम समुच्चय), टीमें वास्तुकला की गलतियों से बच सकती हैं, जैसे कि अकेले डेटा रिकॉर्ड या ऐसे कठोर डिज़ाइन जो विस्तार करने में कठिन होते हैं। चाहे आप एक साधारण लॉगिन सिस्टम बना रहे हों या एक बहु-विक्रेता बाज़ार, एक अच्छी तरह से तैयार किया गया UML आरेख अपनी दृष्टि को संचारित करने के लिए सबसे प्रभावी उपकरण बना हुआ है।

यह पोस्ट Deutsche, English, Español, فارسی, Bahasa Indonesia और Portuguese में भी उपलब्ध है।