Java के "Abstract" क्लासेस और मेथड्स का उपयोग कैसे करें
Abstraction
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में तीन मुख्य सिद्धांतों में से एक है- एनकैप्सुलेशन और इनहेरिटेंस के साथ।
एब्स्ट्रैक्शन आपके प्रोग्राम की जटिलता को कम करने और आपके कोड को पढ़ने में आसान बनाने का एक तरीका है। जावा में, एब्स्ट्रैक्शन आपको इसकी अनुमति देता है:
- एक वर्ग के केवल कुछ विवरण दिखाएं और
- उस वर्ग के अन्य सभी विवरण छुपाएं।
जावा में एब्स्ट्रैक्शन को क्लास और मेथड दोनों पर लागू किया जा सकता है।
यह ट्यूटोरियल जावा में अमूर्तता की मूल बातें, अमूर्त कक्षाओं का उपयोग कैसे करें, और अमूर्त विधियों का उपयोग कैसे करें, पर चर्चा करेगा। इस महत्वपूर्ण अवधारणा को बेहतर ढंग से समझने में आपकी सहायता करने के लिए हम कुछ उदाहरणों के माध्यम से भी चलेंगे।
जावा एब्स्ट्रैक्शन
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग एक प्रकार की प्रोग्रामिंग है जो डेटा और विधियों का प्रतिनिधित्व करने के लिए वस्तुओं और कक्षाओं का उपयोग करती है। वस्तुओं और कक्षाओं का उपयोग कोड में दोहराव को कम कर सकता है और कार्यक्रमों को अधिक कुशल बना सकता है।
जावा एक ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग लैंग्वेज है। जैसे, इसमें वस्तुओं और कक्षाओं के साथ काम करने के लिए उपयोग की जाने वाली कई सुविधाएँ शामिल हैं। अमूर्तता उन विशेषताओं में से एक है। एब्स्ट्रैक्शन आपको जावा में किसी वर्ग को केवल कुछ जानकारी दिखाने की अनुमति देता है।
ऐसे दो उदाहरण हैं जहां जावा में अमूर्तता का उपयोग किया जाता है:कक्षाओं में और विधियों में।
Java Abstract Classes
जावा में, एक अमूर्त वर्ग एक ऐसा वर्ग है जिससे आप कोई वस्तु नहीं बना सकते हैं। दूसरे शब्दों में, अमूर्त वर्गों को तत्काल नहीं किया जा सकता है।
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
जावा में एक अमूर्त वर्ग बनाने के लिए, आप अमूर्त कीवर्ड का उपयोग कर सकते हैं। यहाँ जावा में एक अमूर्त वर्ग का एक उदाहरण दिया गया है:
एब्स्ट्रैक्ट क्लास बैंकअकाउंट {// कोड यहां}
चूंकि यह एक अमूर्त वर्ग है, यदि हम इस वर्ग के साथ एक वस्तु बनाने का प्रयास करते हैं, तो हमारा कार्यक्रम एक त्रुटि लौटाएगा।
उदाहरण के लिए, मान लीजिए कि हम BankAccount नामक एक वर्ग का उदाहरण बनाने का प्रयास करते हैं। हम इस उदाहरण को lucyAccount कहना चाहते हैं, और हम चाहते हैं कि यह लुसी की बैंक जानकारी संग्रहीत करे। लुसी हमारे ग्राहकों में से एक है। इस उदाहरण को बनाने के लिए हम निम्नलिखित कोड का उपयोग करते हैं:
BankAccount lucyAccount =new BankAccount();
हालांकि, जब हम इस कोड को चलाते हैं, तो हमारा प्रोग्राम वापस आ जाता है:
बैंक खाता सार है; त्वरित नहीं किया जा सकता
जैसा कि आप देख सकते हैं, आप किसी वस्तु को अमूर्त वर्ग निर्दिष्ट नहीं कर सकते।
हालाँकि, आप अभी भी अमूर्त वर्गों से उपवर्ग बना सकते हैं। अगले भाग में, हम चर्चा करेंगे कि अमूर्त वर्गों से उपवर्ग कैसे बनाये जाते हैं।
सार वर्ग वंशानुक्रम
जैसा कि हमने उल्लेख किया है, आप वस्तुओं को एक अमूर्त वर्ग नहीं दे सकते। इसलिए, एक अमूर्त वर्ग की सामग्री तक पहुँचने के लिए - दूसरे शब्दों में, उस वर्ग से जुड़ी विशेषताएँ और विधियाँ - हमें inherit
करना होगा कक्षा।
मान लीजिए हम एक प्रोग्राम बना रहे हैं जो बैंक के लिए बैंक खाते की जानकारी संग्रहीत करता है। हमारे कार्यक्रम में दो वर्ग शामिल होंगे:BankAccount और CheckingAccount। BankAccount एक मूल वर्ग होगा जो बैंक खातों के साथ काम करने के लिए विशेषताओं और विधियों को संग्रहीत करता है। CheckingAccount एक चाइल्ड क्लास होगा जो इन विधियों को इनहेरिट करती है।
इस उदाहरण के लिए, BankAccount एक अमूर्त वर्ग है। हम इसका उपयोग केवल चेकिंग खाते बनाने के लिए करना चाहते हैं।
यहां वह कोड है जिसका उपयोग हम अपने BankAccount और CheckingAccount कक्षाओं के साथ काम करने के लिए कर सकते हैं:
एब्स्ट्रैक्ट क्लास BankAccount { public void viewAccountNumber() { System.out.println ("खाता संख्या:#1932042"); }}क्लास चेकिंगअकाउंट बैंकअकाउंट का विस्तार करता है {}क्लास मेन {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {चेकिंग अकाउंट lucyAccount =नया चेकिंग अकाउंट (); lucyAccount.viewAccountNumber (); }}पूर्व>हमारा कोड लौटाता है:
खाता संख्या:#1932042इस उदाहरण में, हमने तीन वर्ग बनाए:
- बैंक खाता . यह एक अमूर्त वर्ग है। इसमें
viewAccountNumber()
. नामक एक विधि शामिल है . क्योंकि BankAccount एक अमूर्त वर्ग है, हम इस वर्ग का ऑब्जेक्ट नहीं बना सकते हैं।- खाते की जांच करना . यह बाल वर्ग है। एक बाल वर्ग के रूप में, यह BankAccount वर्ग की विशेषताओं और विधियों को प्राप्त करता है।
- मुख्य . इस वर्ग में हमारे मुख्य कार्यक्रम के लिए कोड है।
हमारे मुख्य कार्यक्रम में, हम CheckingAccount वर्ग का एक उदाहरण बनाते हैं और इसे lucyAccount कहते हैं। लुसीअकाउंट एक वस्तु है। हमारे प्रोग्राम में तीन क्लासेस बनाने के बाद, हमने
viewAccountNumber()
मेथड में lucyAccount ऑब्जेक्ट का इस्तेमाल किया। ।निम्न तालिका इस उदाहरण के प्रमुख भागों को सारांशित करती है:
नाम | प्रकार | विवरण |
बैंक खाता | सार/अभिभावक वर्ग | बैंक खातों के साथ काम करने की विशेषताओं और विधियों को संग्रहीत करता है। |
खाते की जांच करना | बाल वर्ग | मूल वर्ग के तरीकों को इनहेरिट करता है। |
मुख्य | वर्ग | हमारे मुख्य कार्यक्रम के लिए कोड शामिल है। |
लुसीखाता | वस्तु | हमारे कार्यक्रम का वास्तविक विश्व अनुप्रयोग। |
यदि आप जावा में इनहेरिटेंस के बारे में अधिक जानने में रुचि रखते हैं, तो हमारी पूरी गाइड यहाँ पढ़ें।
Java Abstract Methods
कक्षाओं के अलावा, विधियां अमूर्त भी हो सकती हैं।
जब आप एक अमूर्त विधि घोषित करते हैं, तो आप ऊपर के समान सार कीवर्ड का उपयोग करते हैं। आप कोई सामग्री निर्दिष्ट नहीं करते हैं, और आप केवल एक अमूर्त वर्ग के भीतर एक सार विधि घोषित कर सकते हैं।
यहाँ जावा में एक सार पद्धति का एक उदाहरण दिया गया है:
सार शून्य चेकबैलेंस ();
इस उदाहरण में, हमने checkBalance()
. नामक एक सार विधि बनाई है . इस पद्धति का कोई मुख्य भाग नहीं है—दूसरे शब्दों में, विधि से संबद्ध कोई कोड नहीं है।
आइए पहले से अपने बैंक उदाहरण पर वापस आते हैं। उस प्रोग्राम में एक सार विधि है:lucyAccount.viewAccountNumber();
।
हमने अपने कार्यक्रम को ग्राहक के बैंक खाता संख्या प्रदर्शित करने में सक्षम बनाने के लिए इस सार पद्धति का उपयोग किया। ऊपर दिए गए उदाहरण में (पिछले अनुभाग से), BankAccount मूल वर्ग चाइल्ड क्लास (वर्गों) के लिए एक प्रकार के टेम्पलेट के रूप में कार्य करता है।
इस मामले में, बाल वर्ग विभिन्न प्रकार के बैंक खाते हैं। ऐसा इसलिए है क्योंकि हमारे ग्राहकों के पास एक से अधिक प्रकार के बैंक खाते हो सकते हैं, और हम प्रत्येक प्रकार के खाते पर समान कार्य करना चाहते हैं। हमने ऊपर जो चाइल्ड क्लास बनाई थी वह थी:CheckingAccount.
आइए ऊपर के उदाहरण से अपने ग्राहक के पास वापस जाएं। लुसी के पास एक चेकिंग खाता है, लेकिन उसके पास बचत खाता और ब्रोकरेज खाता भी हो सकता है। हम लुसी के प्रत्येक खाते के लिए खाता संख्या प्रदर्शित करने में सक्षम होना चाहते हैं। हम इन दो अतिरिक्त खाता प्रकारों के लिए चाइल्ड क्लास बनाकर ऐसा कर सकते हैं। हम उन्हें कॉल कर सकते हैं:सेविंग्स अकाउंट, ब्रोकरेज अकाउंट।
चूंकि हमने BankAccount मूल वर्ग बनाया है, इसलिए हम सभी तीन प्रकार के खातों के लिए कुशलतापूर्वक और न्यूनतम कोड दोहराव के साथ खाता संख्या प्रदर्शित कर सकते हैं।
नीचे दिए गए कोड में, हम दो बार अमूर्त कीवर्ड का उपयोग करते हैं। सबसे पहले, हम एक अमूर्त वर्ग (BankAccount) घोषित करते हैं। फिर, हम एक अमूर्त पद्धति की घोषणा करते हैं जो बाद में हमें ग्राहक के खाता नंबर प्रदर्शित करने के लिए कार्यक्रम को निर्देशित करने में मदद करेगी। वह अमूर्त विधि घोषणा है:अमूर्त शून्य viewAccountNumber();
. फिर हम viewAccountNumber()
. को इनिशियलाइज़ करते हैं CheckingAccount बाल वर्ग पर विधि। यह रहा कोड:
एब्स्ट्रैक्ट क्लास बैंकअकाउंट {एब्स्ट्रैक्ट वॉयड व्यूअकाउंटनंबर ();}क्लास चेकिंगअकाउंट बैंकएकाउंट को बढ़ाता है {public void viewAccountNumber() { System.out.println("चेकिंग अकाउंट नंबर:#1932042"); }}कक्षा मुख्य {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) { CheckingAccount lucyAccount =new CheckingAccount (); lucyAccount.viewAccountNumber (); }}पूर्व>हमारा कोड लौटाता है:
खाता संख्या की जांच:#1932042यह उदाहरण हमारे पिछले उदाहरण के समान आउटपुट देता है, लेकिन ध्यान देने योग्य कुछ कोड अंतर हैं। वे हैं:
- सार पद्धति की घोषणा। यहाँ उदाहरण में, हम BankAccount नामक एक अमूर्त वर्ग की घोषणा करते हैं। इस वर्ग में एक सार विधि है जिसे
viewAccountNumber()
. कहा जाता है ।- सार पद्धति का विस्तार। हम CheckingAccount वर्ग के माध्यम से BankAccount वर्ग का विस्तार करते हैं। CheckingAccount वर्ग BankAccount पद्धति में संग्रहीत मानों को इनहेरिट करता है।
CheckingAccount वर्ग में, हम एक विधि परिभाषित करते हैं—जिसे
viewAccountNumber()
कहा जाता है। —यह केवल CheckingAccount वस्तुओं के लिए सुलभ है। फिर, ग्राहक की खाता संख्या देखने के लिए, हम एक CheckingAccount ऑब्जेक्ट बनाते हैं।जावा एब्स्ट्रैक्शन उदाहरण
अब जब हमने जावा एब्स्ट्रैक्ट क्लासेस और एब्सट्रैक्ट मेथड दोनों पर चर्चा कर ली है, तो हम जावा में एब्स्ट्रैक्शन का एक पूरा उदाहरण तलाश सकते हैं। ऐसा करने के लिए, हम ऊपर दिए गए बैंक खाते के उदाहरणों में चर्चा की गई सभी चीज़ों को एक साथ लाएंगे।
मान लीजिए कि हम एक बैंक का संचालन कर रहे हैं जो दो प्रकार के बैंक खाते प्रदान करता है:खातों की जाँच और बचत खाते। हम एक प्रोग्राम लिखने का निर्णय लेते हैं जो बैंक खाताधारकों को उनके खाता संख्या की जांच करने की अनुमति देता है।
हमारे बैंक में, यदि कोई बैंक खाता एक चेकिंग खाता है, तो खाता संख्या ग्राहक के आईडी नंबर से शुरू होती है और 555 में समाप्त होती है। यदि खाता एक बचत खाता है, तो खाता संख्या 777 में समाप्त होती है।
इस प्रोग्राम को बनाने के लिए हम निम्नलिखित कोड का उपयोग कर सकते हैं:
एब्स्ट्रैक्ट क्लास बैंकअकाउंट {एब्स्ट्रैक्ट वॉयड व्यूअकाउंटनंबर ();}क्लास चेकिंगअकाउंट बैंक अकाउंट का विस्तार करता है { public void viewAccountNumber() { System.out.println("चेकिंग अकाउंट नंबर:#1932042555"); }}वर्ग बचत खाता बैंक खाते का विस्तार करता है { public void viewAccountNumber() { System.out.println ("बचत खाता संख्या:#1932042777"); }}क्लास मेन {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) { CheckingAccount ellieCheckingAccount =new CheckingAccount (); ellieCheckingAccount.viewAccountNumber () बचत खाता ellieSavingsAccount =नया बचत खाता (); ellieSavingsAccount.viewAccountNumber (); }}पूर्व>हमारा कोड लौटाता है:
खाता संख्या की जांच:#1932042555बचत खाता संख्या:#1932042777इस उदाहरण में, हमने एक वर्ग बनाया और इसे BankAccount कहा। इस वर्ग में एक सार विधि थी, जिसे
viewAccountNumber()
. कहा जाता है ।प्रत्येक प्रकार का खाता अलग-अलग खाता संख्या निर्दिष्ट करता है, इसलिए हम
viewAccountNumber()
लागू नहीं कर सकते BankAccount वर्ग में विधि। इसके बजाय, BankAccount वर्ग का प्रत्येक उपवर्गviewAccountNumber()
लागू करता है विधि।इस उदाहरण में, CheckingAccount वर्ग खाता संख्याओं को एक संख्या के रूप में निर्दिष्ट करता है जो ग्राहक की आईडी से शुरू होती है और 555 पर समाप्त होती है। बचत खाता वर्ग खाता संख्याओं को एक संख्या के रूप में निर्दिष्ट करता है जो ग्राहक की आईडी से शुरू होती है और 777 पर समाप्त होती है।
हमारे कोड में, हम Ellie नामक ग्राहक के लिए CheckingAccount क्लास का एक उदाहरण प्रारंभ करते हैं। इस उदाहरण को ellieCheckingAccount नाम दिया गया है, और हम
viewAccountNumber()
का आह्वान करते हैं खाता संख्या देखने की विधि। यह रिटर्न:खाता संख्या की जांच:#1932042555हम बचत खाता वर्ग का एक उदाहरण भी प्रारंभ करते हैं, जिसे ellieSavingsAccount कहा जाता है, और हम
viewAccountNumber()
का आह्वान करते हैं खाता संख्या देखने की विधि। यह रिटर्न:बचत खाता संख्या:#1932042777निष्कर्ष
Abstraction
वस्तु-उन्मुख प्रोग्रामिंग की एक महत्वपूर्ण विशेषता है। यह आपको किसी वर्ग या विधि में कुछ विवरण छिपाने और केवल आवश्यक जानकारी प्रदर्शित करने की अनुमति देता है। जावा में एब्सट्रैक्ट क्लासेस और मेथड्स बनाने के लिए,abstract
. का उपयोग करें कीवर्ड।इस ट्यूटोरियल में उदाहरणों के साथ चर्चा की गई कि एब्स्ट्रैक्शन कैसे काम करता है, एब्स्ट्रैक्शन क्यों उपयोगी है, और आप जावा में एब्सट्रैक्ट मेथड्स और क्लासेस कैसे बना सकते हैं। अब आप एक पेशेवर प्रोग्रामर की तरह जावा में अमूर्त कक्षाओं और विधियों के साथ काम करना शुरू करने के लिए तैयार हैं!