(यह पोस्ट उस पर आधारित है जिसे मैंने कुछ महीने पहले अपनी सूची में भेजा था। इसे हर हफ्ते और अधिक पढ़ने के लिए, यहां शामिल हों!)
अपने प्रोग्रामिंग प्रवाह को बचाने के लिए एक छोटी सी सुविधा का उपयोग करने में, मैंने इस बारे में बात की कि कैसे सरल अमूर्त आपके कोडबेस को काम करने के लिए और अधिक मजेदार बना सकते हैं।
लेकिन जब आपके पास खराब . हो तो क्या करें अमूर्त?
आप एपीआई संदर्भ को हर बार खोदते हैं यह समझने के लिए कि वह कौन सी विधि है जो स्पष्ट रूप से नाम दिया जाना चाहिए था leaderboard
वास्तव में कहा जाता है। आप इसके चारों ओर रिफैक्टर करने का प्रयास करते हैं, लेकिन कोड का एक हिस्सा आपको संरचित डेटा देता है और दूसरा भाग आपको टेक्स्ट की कच्ची लाइनें देता है। और हर बार जब आप कोड को छूते हैं, तो कुछ टूट जाता है, और आप अपना शेष दिन इसे डीबग करने की कोशिश में उड़ा देते हैं। क्योंकि आपने position
में बदलाव किया है , लेकिन अपडेट नहीं किया score
उसी समय।
तो आप बुरे से दूर रहते हुए अच्छे एब्स्ट्रैक्शन कैसे बनाते हैं?
स्पष्ट कोड लिखने के लिए अच्छे रूपकों का उपयोग करना
अच्छे अमूर्तन अच्छे रूपकों से आते हैं।
एक रूपक आपके सिस्टम में किसी चीज़ को उस अवधारणा से जोड़कर उसका वर्णन करता है जो पहले से ही आपके दिमाग में है। उदाहरण के लिए:
-
कई कमांड लाइन पाइप . के रूपक का उपयोग करती हैं ।
आप पाइप के एक छोर में डेटा डालते हैं, और यह दूसरे छोर से बाहर आता है। कल्पना करने में आसान और उपयोग में आसान।
-
समवर्ती प्रोग्रामिंग में, एक लॉक एक अच्छा रूपक है।
आंतरिक रूप से ताले कैसे काम करते हैं, इसके बारे में कुछ भी जाने बिना, आप जानते हैं कि जब कोई संसाधन लॉक हो जाता है, तो आप उसका उपयोग नहीं कर सकते। आपको इसके अनलॉक होने तक प्रतीक्षा करनी होगी।
-
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, मैसेज पासिंग एक विशिष्ट मानसिक छवि को ट्रिगर करता है:एक वस्तु दूसरी वस्तु को एक संदेश भेजती है। दूसरी वस्तु संदेश के साथ कुछ कर सकती है या किसी और को भेज सकती है।
विचार प्राप्त करने के लिए आपको कार्यान्वयन के बारे में कुछ भी जानने की आवश्यकता नहीं है (और यह प्रॉक्सी पैटर्न जैसी चीजों को समझने में बहुत आसान बनाता है)।
एक अच्छा रूपक महत्वपूर्ण है। यदि आप एक अच्छे रूपक पर आधारित सार तत्व देखते हैं, तो आपको कोड को समझने के लिए शायद ही कभी दस्तावेज़ों को पढ़ना होगा या सोर्स डाइविंग पर जाना होगा। आप जितने बेहतर रूपक लेकर आएंगे, किसी और को अपने सिस्टम का वर्णन करना उतना ही आसान होगा, और बाद में आपके सिस्टम पर काम करना उतना ही आसान होगा।
आप अच्छे रूपकों के साथ कैसे आते हैं?
एक अच्छा रूपक विशिष्ट, स्व-निहित होता है, और जिस चीज़ का वर्णन करता है उसकी एक विशद मानसिक छवि बनाता है। यह गलतफहमी के लिए जगह नहीं छोड़ता है, और यह जितना संभव हो सके कोड के व्यवहार से मेल खाता है। यदि कोई व्यक्ति रूपक की अपनी समझ के आधार पर कोड के बारे में धारणा बनाता है, तो वे धारणाएं मान्य होनी चाहिए।
अच्छे रूपकों के साथ आना कठिन है। इससे पहले कि आप सही खोज सकें, आप अक्सर कुछ लीक रूपकों से गुज़रेंगे, और यह ठीक है! अभ्यास से यह आसान हो जाएगा। लेकिन यहाँ एक प्रक्रिया है जिससे मुझे मदद मिली है:
इस बारे में सोचें कि क्या थोड़ा सा कोड कैसे . के बारे में सोचे बिना करता है यह करता है। आपके दिमाग में कौन सी छवि आती है? अन्य कोड इसका उपयोग कैसे करता है? यदि आपको इसका वर्णन एक या दो शब्दों में करना हो, तो आप किन शब्दों का प्रयोग करेंगे? इसे लिख लें।
फिर, उस छवि के बारे में सोचें। क्या यह फिट है कि वह कोड कैसे काम करता है? क्या ऐसे किनारे के मामले हैं जो रूपक के माध्यम से लीक होते हैं? क्या के अलावा कुछ भी है कोड का उपयोग करने से पहले एक नए योगदानकर्ता को रूपक को समझना होगा? जब आप अपने रूपक के बारे में सोचते हैं, तो क्या आपके दिमाग में एक स्पष्ट तस्वीर आती है, या यह अस्पष्ट है?
ये संकेतक हैं कि आपका रूपक आपके कोड से पर्याप्त रूप से मेल नहीं खाता है। लेकिन आप एक अच्छे रूपक के जितने करीब होंगे, वहां पहुंचने के लिए आपको उतनी ही कम छलांग लगानी पड़ेगी।
अंत में, इसे एक वाक्य में प्रयोग करें। "यह कोड एक है (कुछ), क्योंकि…” क्या आप बिना किसी तकनीकी पृष्ठभूमि के किसी को अपने रूपक की व्याख्या कर सकते हैं, और क्या वे समझ सकते हैं कि यह क्या करता है? किसी को रूपक को समझने के लिए जितनी कम पृष्ठभूमि की आवश्यकता होगी, आपका रूपक उतना ही अधिक सहायक होगा।
यदि आप करीब हैं, लेकिन काफी नहीं हैं, तो थिसॉरस में एक नज़र डालें। समान शब्दों के बीच सूक्ष्म अंतर का अर्थ ओके रूपक और आदर्श रूपक के बीच का अंतर हो सकता है।
रूपक और OOP
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग मूल रूप से रूपक पर आधारित है। वहीं से इसकी शक्ति प्राप्त होती है! अच्छी तरह से डिज़ाइन की गई कक्षाएं न केवल अपने कार्यान्वयन को अन्य वर्गों से छिपाती हैं, वे अपने कार्यान्वयन को आप से छिपाती हैं ।
एक महान रूपक के साथ, आपको कक्षा के नाम से ही यह बताने में सक्षम होना चाहिए कि अपनी वस्तुओं का उपयोग कैसे करें। यदि आपकी कक्षाओं का नाम अच्छी तरह से रखा गया है, और वे आपके दिमाग में सही छवियों को प्रकट करते हैं, तो आपको उन्हें समझने के लिए उनके कार्यान्वयन में गोता लगाने की आवश्यकता नहीं है।
तो अब, मैं चाहता हूं कि आप आखिरी कोड में उन कक्षाओं के बारे में सोचें जिनके साथ आपने काम किया था। क्या आप किसी ऐसे व्यक्ति के बारे में सोच सकते हैं जिसके विशेष रूप से स्पष्ट रूपक हों? आपको लगता है कि आप किन वर्गों के खिलाफ काम करने के बजाय काम करते हैं? आप उनका उपयोग कैसे करें, यह जानने के लिए आप कितनी बार उनमें खुदाई करते हैं?
मुझे यह सुनना अच्छा लगेगा कि आपको क्या पता चला। एक टिप्पणी छोड़ें, और मुझे बताएं।
जल्दी से एक महान सॉफ्टवेयर डेवलपर बनने के लिए, आपको सचेत रूप से उस कोड के बारे में सोचना होगा जो आप लिख रहे हैं और आप जिन प्रक्रियाओं का पालन कर रहे हैं। और मैं आपकी मदद कर सकता हूं।
प्रैक्टिसिंग रेल्स . का मेरा 32 पेज का निःशुल्क नमूना डाउनलोड करें , और बिना अभिभूत हुए, इस तरह के विचारों को छोटे पैमाने पर आज़माना सीखें।