अभी भी दुनिया में ऐसे लोग हैं जो "सामान्य कोडिंग" में जेव जेनरिक का उपयोग नहीं करते हैं। मैं इसे सी ++ टेम्पलेट्स के साथ विश्वास कर सकता हूं, लेकिन जेनरिक? वे सीखने / उपयोग करने में भी कठिन नहीं हैं। गंभीर रूप से जावा और सी ++ की सर्वश्रेष्ठ विशेषताएं क्रमशः जेनरिक और टेम्प्लेट हैं।
चीजों को लोगों को समझाने का सबसे अच्छा तरीका एक सम्मोहक तर्क देना, गैर-धमकी देना और सही होना है।
जब तक आप अपनी प्रोग्रामिंग भाषा के रूप में टेम्प्लेट का उपयोग करने जैसा कुछ नहीं कर रहे हैं, पैरामीट्रिक पॉलीमॉर्फिज्म (जेनरिक / टेम्प्लेट) लगभग निश्चित रूप से अच्छा है।
1. कोड दोहराव से बचा जाता है।
यह स्पष्ट है, लेकिन बहुरूपी कोड सामान्य कोड है। इसीलिए इसे जेनरिक कहा जाता है।
2. बेहतर स्थैतिक जाँच का समर्थन करता है।
पैरामीट्रिक बहुरूपता के बिना आप उन चीजों को लिखना पसंद करते हैं जो public Object clone()
या public boolean equals(object b)
जो केवल घृणित नहीं हैं, उनके पास ऐसे प्रकार हैं जो वे क्या करते हैं इसके बारे में कोई जानकारी नहीं देते हैं, और हमेशा के लिए सभी जगह अपवादों को फेंक देते हैं। पैरामीट्रिक बहुरूपता का विकल्प सभी जगह डाली जाती है
3. गैर पैरामीट्रिक बहुरूपता OOP कोड मूल रूप से "बाइनरी तरीकों" को सही तरीके से संभालने में असमर्थ है।
आप अक्सर इनका उपयोग करते हैं।
4. यह सबसे अच्छा अभ्यास है
जावा में, जेनेरिक का उपयोग सबसे अच्छा अभ्यास माना जाता है (जोश बलोच द्वारा प्रभावी जावा देखें)। सटर और अलेक्जेंड्रेस्कु जैसे प्रमुख सी ++ विचारक विभिन्न प्रकार की समस्याओं को हल करने के लिए टेम्पलेट्स के उपयोग को प्रोत्साहित करते हैं।
5. यह OO प्रतिमान पर फिट बैठता है।
लोग अक्सर इस पर ध्यान नहीं देते हैं, लेकिन उप-टाइपिंग और जेनरिक का संयोजन एक सिस्टम को अधिक शक्तिशाली अभिव्यंजक बनाता है, और उनमें से सिर्फ एक के साथ किसी भी प्रणाली की तुलना में ऑब्जेक्ट उन्मुख होता है।
स्काला के मिश्रणों पर विचार करें। ये एक अच्छी सुविधा है जो आपको घटक भागों से अपनी वस्तुओं को एक साथ खींचने की सुविधा देती है। जेनरिक और टेम्प्लेट इनमें से कुछ लाभों का अनुकरण कर सकते हैं। उदाहरण के लिए, मान लें कि आपकी कोई ऑब्जेक्ट डेटाबेस का उपयोग करती है। अच्छा डिजाइन आप एक अलग वर्ग में डेटाबेस का उपयोग बाहर अमूर्त होगा। यदि सही किया जाता है तो यह न केवल आपके डेटा-स्टोर (परीक्षण की कुंजी) का मज़ाक उड़ाता है, इसका अर्थ यह भी है कि आप उस नए नो-एसक्यूएल डेटाबेस की तरह वैकल्पिक कार्यान्वयन जोड़ सकते हैं। हालांकि, आपको एक समस्या हो सकती है, जिससे आप जिस कार्यान्वयन का उपयोग करते हैं, वह आपके व्यावसायिक ऑब्जेक्ट की विभिन्न क्षमताओं को प्राप्त करेगा।
बचाव के लिए जेनरिक!
public class Business<S extends Datastore>{
private S store; ...
}
अब आप Business
डेटाबेस विशिष्ट सुविधाओं का उपयोग करने की क्षमता के आधार पर अपनी वस्तुओं को अलग-अलग करना शुरू कर सकते हैं । आपको अभी भी कुछ रनटाइम चेक और कास्टिंग की आवश्यकता है, लेकिन आप बेहतर कोड का निर्माण शुरू कर सकते हैं।
तथा
6. सामान्य कोड मौजूद नहीं है।
प्रोग्रामिंग ब्रह्मांड में केवल तीन चीजें हैं:
- पुस्तकालयों,
- विन्यास, और
- बुरा कोड।
यदि आप अपने कोड के बारे में नहीं सोचते हैं जैसे कि यह एक पुस्तकालय है तो आप गंभीर संकट में हैं जब आपके प्रोजेक्ट में बदलाव की आवश्यकताएं हैं। वास्तुकला (यकीनन) अच्छा एपीआई डिजाइन करने की कला है।
मुझे यह रवैया आश्चर्यजनक लगता है। जब आप पैराट्राइज्ड प्रकारों के साथ प्रोग्रामिंग करने के लिए अभ्यस्त हो जाते हैं, तो उनका उपयोग नहीं करने से सब कुछ दर्द होता है। और, जावा और सी ++ में खुरदरे धब्बों का एक समूह होता है, जिसकी वे मदद करते हैं।