Java में SOLID सिद्धांत: सिद्धांत और व्यावहारिक गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java में SOLID सिद्धांत: सिद्धांत से अभ्यास तक

\n\n

SOLID पाँच मौलिक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग सिद्धांतों का एक संक्षिप्त नाम है, जिसे रॉबर्ट मार्टिन (अंकल बॉब) ने प्रतिपादित किया था। ये सिद्धांत लचीला, रखरखाव योग्य और स्केलेबल कोड बनाने में मदद करते हैं। इस लेख में, हम Java उदाहरणों के साथ प्रत्येक सिद्धांत को समझेंगे, दिखाएंगे कि उनका उल्लंघन कैसे होता है, और उन्हें सही तरीके से कैसे लागू किया जाए।

\n\n

SOLID सिद्धांत क्यों ज़रूरी हैं?

\n

SOLID के बिना, कोड जल्दी ही 'स्पेगेटी' में बदल जाता है। क्या आपने कभी ऐसी स्थिति का सामना किया है जहाँ एक क्लास में बदलाव करने से तीन अन्य क्लास टूट जाती हैं? या जब एक मेथड बहुत अधिक काम करता है? SOLID इन समस्याओं को हल करता है। प्रत्येक सिद्धांत एक नियम है जो कोड को बनाता है:

\n
    \n
  • परिवर्तनों के प्रति लचीला — नई आवश्यकताएँ पुरानी लॉजिक को नहीं तोड़तीं।
  • \n
  • समझने में आसान — प्रत्येक क्लास एक ही चीज़ के लिए जिम्मेदार है।
  • \n
  • परीक्षण योग्य — यूनिट टेस्ट लिखना आसान है।
  • \n
\n\n

1. Single Responsibility Principle (SRP) — एकल जिम्मेदारी का सिद्धांत

\n

सूत्रीकरण: "एक क्लास के बदलने का केवल एक ही कारण होना चाहिए।"

\n

सीधे शब्दों में: एक क्लास को केवल एक ही काम करना चाहिए। यदि किसी क्लास की एक से अधिक जिम्मेदारियाँ हैं, तो उसे बनाए रखना मुश्किल हो जाता है।

\n\n

SRP का उल्लंघन (खराब कोड)

\n
public class OrderService {\n    public void createOrder(Order order) {\n        // ऑर्डर बनाने की लॉजिक\n        saveToDatabase(order);\n        sendEmailConfirmation(order);\n    }\n\n    private void saveToDatabase(Order order) {\n        // डेटाबेस में सेव करना\n    }\n\n    private void sendEmailConfirmation(Order order) {\n        // ईमेल भेजना\n    }\n}
\n

समस्या: यह क्लास बिज़नेस लॉजिक, डेटाबेस संचालन और नोटिफिकेशन भेजने — सबके लिए जिम्मेदार है। ईमेल सेवा में बदलाव के लिए OrderService में बदलाव की आवश्यकता होगी।

\n\n

SRP की सही व्याख्या

\n
public class OrderService {\n    private final OrderRepository repository;\n    private final EmailService emailService;\n\n    public OrderService(OrderRepository repo, EmailService email) {\n        this.repository = repo;\n        this.emailService = email;\n    }\n\n    public void createOrder(Order order) {\n        repository.save(order);\n        emailService.sendConfirmation(order);\n    }\n}\n\npublic class OrderRepository {\n    public void save(Order order) { /* DB लॉजिक */ }\n}\n\npublic class EmailService {\n    public void sendConfirmation(Order order) { /* ईमेल लॉजिक */ }\n}
\n

अब प्रत्येक क्लास के बदलने का एक ही कारण है। OrderService केवल तभी बदलता है जब ऑर्डर बनाने की बिज़नेस प्रक्रिया बदलती है।

\n\n

2. Open/Closed Principle (OCP) — खुले/बंद का सिद्धांत

\n

सूत्रीकरण: "क्लासेज़ विस्तार के लिए खुली होनी चाहिए, लेकिन संशोधन के लिए बंद।"

\n

इसका मतलब है कि आपको नई कार्यक्षमता नए कोड के माध्यम से जोड़नी चाहिए, न कि मौजूदा कोड को बदलकर।

\n\n

OCP का उल्लंघन (खराब कोड)

\n
public class AreaCalculator {\n    public double calculateArea(Object shape) {\n        if (shape instanceof Rectangle) {\n            Rectangle r = (Rectangle) shape;\n            return r.width * r.height;\n        } else if (shape instanceof Circle) {\n            Circle c = (Circle) shape;\n            return Math.PI * c.radius * c.radius;\n        }\n        throw new IllegalArgumentException("अज्ञात आकार");\n    }\n}
\n

त्रिभुज जोड़ने के लिए, calculateArea मेथड को बदलना होगा — यह OCP का उल्लंघन है।

\n\n

OCP की सही व्याख्या

\n
public interface Shape {\n    double calculateArea();\n}\n\npublic class Rectangle implements Shape {\n    private double width, height;\n    public Rectangle(double w, double h) { this.width = w; this.height = h; }\n    @Override\n    public double calculateArea() { return width * height; }\n}\n\npublic class Circle implements Shape {\n    private double radius;\n                

ब्लॉग

पुस्तक अनुशंसाएँ