
1:31:53
OOP 6 | Generics, Custom ArrayList, Lambda Expressions, Exception Handling, Object Cloning
Kunal Kushwaha
Overview
यह वीडियो ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) के महत्वपूर्ण कॉन्सेप्ट्स जैसे जेनेरिक, कस्टम ArrayList, लैम्ब्डा एक्सप्रेशंस, एक्सेप्शन हैंडलिंग और ऑब्जेक्ट क्लोनिंग को कवर करता है। यह सिखाता है कि कैसे कस्टम डेटा स्ट्रक्चर्स बनाए जाते हैं, टाइप सेफ्टी कैसे सुनिश्चित की जाती है, और कोड को अधिक एफिशिएंट और एरर-फ्री कैसे बनाया जाता है। वीडियो इन कॉन्सेप्ट्स को उदाहरणों के साथ समझाता है ताकि लर्नर्स को इन्हें समझने और लागू करने में मदद मिल सके।
How was this?
Save this permanently with flashcards, quizzes, and AI chat
Chapters
- Java की ArrayList इंटरनली एक ऐरे का उपयोग करती है और जब ऐरे भर जाता है तो उसका साइज़ डबल कर देती है।
- यह साइज़ डबलिंग प्रोसेस हर बार एलिमेंट्स को कॉपी करने के कारण टाइम कॉम्प्लेक्सिटी को प्रभावित कर सकता है, खासकर बड़े डेटासेट्स के लिए।
- कस्टम ArrayList बनाने से हमें इंटरनल वर्किंग को समझने और साइज़ मैनेजमेंट को कंट्रोल करने में मदद मिलती है।
- ArrayList के साइज़ को इनिशियली डिफाइन किया जा सकता है और ज़रूरत पड़ने पर इसे बढ़ाया जा सकता है।
कस्टम ArrayList को समझना हमें डेटा स्ट्रक्चर्स के इंटरनल कामकाज को समझने में मदद करता है, जिससे हम परफॉरमेंस को बेहतर बना सकते हैं और अधिक एफिशिएंट कोड लिख सकते हैं।
एक कस्टम ArrayList क्लास बनाना जिसमें `resize()` मेथड हो जो ऐरे का साइज़ डबल कर दे जब वह फुल हो जाए, और एलिमेंट्स को नए ऐरे में कॉपी कर दे।
- जेनेरिक हमें टाइप-सेफ कोड लिखने की अनुमति देते हैं, जिससे कंपाइल-टाइम पर टाइप एरर पकड़े जाते हैं।
- जेनेरिक के बिना, हमें टाइप कास्टिंग का उपयोग करना पड़ता है, जो रनटाइम एरर का कारण बन सकता है।
- जेनेरिक पैरामीटराइज्ड टाइप्स होते हैं जो क्लास या मेथड को किसी भी टाइप के ऑब्जेक्ट के साथ काम करने की सुविधा देते हैं।
- कस्टम ArrayList को जेनेरिक बनाकर, हम यह सुनिश्चित कर सकते हैं कि वह केवल एक स्पेसिफिक टाइप के एलिमेंट्स को ही स्टोर करे।
जेनेरिक कोड की रिलायबिलिटी बढ़ाते हैं और टाइप कास्टिंग की ज़रूरत को खत्म करके कोड को क्लीनर बनाते हैं, जिससे डेवलपमेंट आसान हो जाता है।
एक `CustomArrayList<T>` क्लास बनाना जहाँ `T` एक टाइप पैरामीटर है, जो इसे किसी भी टाइप (जैसे Integer, String) के लिए इस्तेमाल करने की अनुमति देता है।
- वाइल्डकार्ड्स (`?`) जेनेरिक टाइप्स के साथ अधिक फ्लेक्सिबिलिटी प्रदान करते हैं, जैसे `List<? extends Number>`।
- वाइल्डकार्ड्स का उपयोग करते समय, हम केवल डेटा को पढ़ सकते हैं (get), लेकिन उसमें डेटा जोड़ नहीं सकते (add)।
- ऑब्जेक्ट्स को सॉर्ट करने के लिए, क्लास को `Comparable` इंटरफ़ेस इम्प्लीमेंट करना चाहिए।
- `Comparable` इंटरफ़ेस का `compareTo()` मेथड ऑब्जेक्ट्स की तुलना करने का स्टैंडर्ड तरीका प्रदान करता है।
ये कॉन्सेप्ट्स हमें जेनेरिक के साथ अधिक कॉम्प्लेक्स और फ्लेक्सिबल कोड लिखने में मदद करते हैं, खासकर जब विभिन्न टाइप्स के कलेक्शन के साथ काम कर रहे हों।
एक `Student` क्लास बनाना जो `Comparable` इम्प्लीमेंट करे ताकि स्टूडेंट्स को उनके मार्क्स के आधार पर सॉर्ट किया जा सके, और फिर `List<Student>` को सॉर्ट करना।
- लैम्ब्डा एक्सप्रेशंस फंक्शनल इंटरफ़ेस (जिनमें एक सिंगल एब्सट्रैक्ट मेथड हो) के लिए शॉर्टहैंड सिंटैक्स प्रदान करते हैं।
- ये कोड को अधिक कॉम्पैक्ट और रीडेबल बनाते हैं, खासकर जब हम मेथड को आर्गुमेंट के रूप में पास कर रहे हों।
- लैम्ब्डा एक्सप्रेशंस का उपयोग `forEach` लूप्स, स्ट्रीम API और इवेंट हैंडलिंग में किया जा सकता है।
- लैम्ब्डा एक्सप्रेशंस एक इनपुट लेते हैं और एक आउटपुट देते हैं, या साइड इफेक्ट्स के लिए उपयोग किए जा सकते हैं।
लैम्ब्डा एक्सप्रेशंस कोड को छोटा और अधिक एक्सप्रेसिव बनाते हैं, जिससे फंक्शनल प्रोग्रामिंग स्टाइल को अपनाना आसान हो जाता है।
एक `ArrayList` के सभी एलिमेंट्स को प्रिंट करने के लिए `forEach` मेथड के साथ लैम्ब्डा एक्सप्रेशन का उपयोग करना: `list.forEach(item -> System.out.println(item));`
- एक्सेप्शन हैंडलिंग प्रोग्राम को क्रैश होने से बचाने के लिए एरर को मैनेज करने का एक तरीका है।
- `try-catch-finally` ब्लॉक का उपयोग एक्सेप्शन को हैंडल करने के लिए किया जाता है।
- `try` ब्लॉक में वह कोड होता है जिसमें एरर आ सकता है, `catch` ब्लॉक एरर को हैंडल करता है, और `finally` ब्लॉक हमेशा एग्जीक्यूट होता है।
- Checked exceptions (जैसे `IOException`) कंपाइल-टाइम पर चेक किए जाते हैं, जबकि Unchecked exceptions (जैसे `ArithmeticException`) रनटाइम पर होते हैं।
- हम अपने कस्टम एक्सेप्शन क्लास भी बना सकते हैं।
मजबूत एक्सेप्शन हैंडलिंग यह सुनिश्चित करती है कि आपका एप्लिकेशन अप्रत्याशित एरर को gracefully हैंडल कर सके, जिससे यूजर एक्सपीरियंस बेहतर होता है।
एक `try-catch` ब्लॉक का उपयोग करके `division by zero` एरर को हैंडल करना, जहाँ `ArithmeticException` को कैच किया जाता है।
- ऑब्जेक्ट क्लोनिंग एक ऑब्जेक्ट की एक कॉपी बनाने की प्रोसेस है।
- Java में ऑब्जेक्ट क्लोन करने के लिए `Cloneable` इंटरफ़ेस और `clone()` मेथड का उपयोग किया जाता है।
- शैलो कॉपी (Shallow Copy) में, ऑब्जेक्ट की कॉपी बनती है, लेकिन यदि ऑब्जेक्ट में रेफरेंस टाइप्स (जैसे ऐरे या अन्य ऑब्जेक्ट्स) हैं, तो वे रेफरेंस कॉपी होते हैं, न कि नए ऑब्जेक्ट।
- डीप कॉपी (Deep Copy) में, ऑब्जेक्ट और उसके अंदर के सभी रेफरेंस ऑब्जेक्ट्स की भी नई कॉपी बनाई जाती है।
- कस्टम ऑब्जेक्ट्स के लिए डीप कॉपी इम्प्लीमेंट करना अधिक कॉम्प्लेक्स हो सकता है।
ऑब्जेक्ट क्लोनिंग डेटा की डुप्लिकेट कॉपी बनाने के लिए उपयोगी है, लेकिन शैलो और डीप कॉपी के बीच अंतर को समझना महत्वपूर्ण है ताकि डेटा इंटीग्रिटी बनी रहे।
एक क्लास बनाना जो `Cloneable` इम्प्लीमेंट करे और `clone()` मेथड को ओवरराइड करे ताकि ऑब्जेक्ट की शैलो कॉपी बनाई जा सके।
Key takeaways
- Java में डेटा स्ट्रक्चर्स को एफिशिएंट बनाने के लिए कस्टम ArrayLists को समझना महत्वपूर्ण है।
- जेनेरिक का उपयोग टाइप-सेफ्टी सुनिश्चित करता है और कोड को अधिक रियूजेबल बनाता है।
- लैम्ब्डा एक्सप्रेशंस कोड को छोटा और अधिक एक्सप्रेसिव बनाते हैं, खासकर फंक्शनल इंटरफ़ेस के साथ।
- प्रभावी एक्सेप्शन हैंडलिंग प्रोग्राम को क्रैश होने से बचाती है और एरर मैनेजमेंट को बेहतर बनाती है।
- ऑब्जेक्ट क्लोनिंग डेटा की कॉपी बनाने का एक तरीका है, लेकिन शैलो और डीप कॉपी के बीच के अंतर को समझना ज़रूरी है।
- Comparable इंटरफ़ेस ऑब्जेक्ट्स को सॉर्ट करने के लिए स्टैंडर्ड तरीका प्रदान करता है।
Key terms
GenericsCustom ArrayListLambda ExpressionsException HandlingObject CloningShallow CopyDeep CopyComparable InterfaceWildcardstry-catch-finallyChecked ExceptionsUnchecked Exceptions
Test your understanding
- जेनेरिक का उपयोग करने से टाइप कास्टिंग की आवश्यकता क्यों कम हो जाती है?
- लैम्ब्डा एक्सप्रेशन का उपयोग करके आप किसी लिस्ट के सभी एलिमेंट्स को कैसे प्रिंट करेंगे?
- एक्सेप्शन हैंडलिंग में `try`, `catch`, और `finally` ब्लॉक का क्या उद्देश्य है?
- शैलो कॉपी और डीप कॉपी के बीच मुख्य अंतर क्या है, और यह ऑब्जेक्ट क्लोनिंग को कैसे प्रभावित करता है?
- किसी क्लास को `Comparable` इंटरफ़ेस इम्प्लीमेंट करने की आवश्यकता क्यों पड़ती है?