सबसे पहले, यह समझें कि विशुद्ध रूप से अमूर्त वर्ग वास्तव में सिर्फ एक इंटरफ़ेस है जो कई उत्तराधिकार नहीं कर सकता है।
क्लास लिखें, एक्सट्रैक्ट इंटरफेस, एक ब्रेन डेड एक्टिविटी है। इतना कि हम इसके लिए एक refactoring है। जो एक दया है। इसके बाद "हर वर्ग को एक इंटरफ़ेस मिलता है" पैटर्न न केवल अव्यवस्था पैदा करता है यह पूरी तरह से बिंदु को याद करता है।
एक इंटरफ़ेस के बारे में नहीं सोचा जाना चाहिए कि जो कुछ भी वर्ग कर सकता है वह केवल एक औपचारिक प्रतिबंध है। एक इंटरफ़ेस को क्लाइंट कोड का उपयोग करके एक अनुबंध के रूप में सोचा जाना चाहिए, जो इसकी आवश्यकता है।
मुझे इंटरफ़ेस लिखने में कोई परेशानी नहीं है कि वर्तमान में केवल एक वर्ग इसे लागू कर रहा है। मैं वास्तव में परवाह नहीं है अगर कोई भी वर्ग अभी तक इसे लागू नहीं करता है। क्योंकि मैं सोच रहा हूं कि मेरे उपयोग करने वाले कोड की क्या जरूरत है। इंटरफ़ेस व्यक्त करता है कि उपयोग कोड क्या मांगता है। बाद में जो भी साथ आता है वह वही कर सकता है जो उसे तब तक पसंद है जब तक वह इन अपेक्षाओं को पूरा नहीं करता है।
अब मैं हर बार ऐसा नहीं करता कि एक वस्तु दूसरे का उपयोग करे। मैं एक सीमा पार करते समय ऐसा करता हूं। मैं ऐसा तब करता हूं जब मैं नहीं चाहता कि एक वस्तु को वास्तव में पता चले कि वह किस अन्य वस्तु से बात कर रहा है। यह एकमात्र तरीका है जिसमें बहुरूपता काम करेगी। मैं इसे तब करता हूं जब मुझे उम्मीद है कि मेरा क्लाइंट कोड बदलने की संभावना है। मैं निश्चित रूप से ऐसा नहीं करता जब मैं उपयोग कर रहा हूँ स्ट्रिंग वर्ग है। स्ट्रिंग क्लास अच्छी और स्थिर है और मुझे लगता है कि मेरे खिलाफ इसे बदलने के लिए कोई ज़रूरत नहीं है।
जब आप सीधे एक ठोस कार्यान्वयन के साथ बातचीत करने का निर्णय लेते हैं, तो एक अमूर्तता के माध्यम से आप यह अनुमान लगा रहे हैं कि कार्यान्वयन स्थिर है, जो विश्वास नहीं बदलने के लिए पर्याप्त है।
ठीक उसी तरह जिस तरह से मैं डिपेंडेंसी इन्वर्सेशन प्रिंसिपल को गुस्सा दिलाता हूं । आपको आंखें मूंदकर यह सब कुछ लागू नहीं करना चाहिए। जब आप एक अमूर्त जोड़ते हैं, तो आप वास्तव में कह रहे हैं कि आप परियोजना के जीवन पर स्थिर होने के लिए वर्ग को लागू करने के विकल्प पर भरोसा नहीं करते हैं।
यह सब मान लेते हैं कि आप ओपन बंद सिद्धांत का पालन करने की कोशिश कर रहे हैं । यह सिद्धांत तभी महत्वपूर्ण है जब स्थापित कोड में सीधे परिवर्तन करने से जुड़ी लागत महत्वपूर्ण हो। मुख्य कारणों में से एक यह है कि लोग इस बात पर असहमत हैं कि वस्तुओं को अलग करना कितना महत्वपूर्ण है क्योंकि प्रत्यक्ष परिवर्तन करते समय सभी को समान लागतों का अनुभव नहीं होता है। यदि आपके संपूर्ण कोड आधार को रिटायर करना, पुन: जमा करना और पुनर्वितरित करना आपके लिए तुच्छ है, तो प्रत्यक्ष संशोधन के साथ परिवर्तन की आवश्यकता को हल करना इस समस्या का एक बहुत ही सरल सरलीकरण है।
बस इस सवाल का कोई ब्रेन डेड जवाब नहीं है। एक इंटरफ़ेस या अमूर्त वर्ग कुछ ऐसा नहीं है जिसे आपको हर वर्ग के साथ जोड़ना चाहिए और आप केवल लागू करने वाली कक्षाओं की संख्या की गणना नहीं कर सकते हैं और यह तय कर सकते हैं कि इसकी आवश्यकता नहीं है। यह बदलाव से निपटने के बारे में है। जिसका मतलब है कि आप भविष्य का अनुमान लगा रहे हैं। अगर आपको यह गलत लगे तो हैरान मत होइए। इसे सरल रखें क्योंकि आप खुद को एक कोने में रखे बिना कर सकते हैं।
तो कृपया, हमें कोड पढ़ने में मदद करने के लिए केवल सार न लिखें। हमारे पास इसके लिए उपकरण हैं। क्या decoupling की जरूरत है यह समझने के लिए अमूर्त का उपयोग करें।