यदि आप 4-डोर कम्यूटर कार चला सकते हैं, तो आप एक पिकअप ट्रक भी चला सकते हैं। यदि आपने एक कार को दहन मोटर से चलाया है, तो आप एक इलेक्ट्रिक कार भी चला सकते हैं।
यात्री वाहनों का आकार और आकार एक से दूसरे में भिन्न हो सकते हैं। उन वाहनों को चलाने वाली मोटर पूरी तरह से अलग हो सकती है। लेकिन यह ड्राइवर के लिए कोई मायने नहीं रखता।
तुम बस अंदर जाओ, बकसुआ करो, वाहन शुरू करो, इसे गियर में डालो, और ड्राइव करो। ऐसा इसलिए है क्योंकि कार, ट्रक और वैन पॉलीमॉर्फिक हैं ।
बहुरूपता: इसे तोड़कर
आइए बहुरूपता शब्द को देखें। आप इसे पॉली , मॉर्फ और आइस में तोड़ सकते हैं।
पॉली का अर्थ है कई, जैसे बहुभुज का अर्थ है कई कोण। जब एक संज्ञा के रूप में उपयोग किया जाता है, तो एक रूप प्रजाति का एक प्रकार होता है। और ism का मतलब सिस्टम हो सकता है।
तो बहुरूपता का अर्थ केवल कई विविधताओं की एक प्रणाली है। यह अभी भी आपको इसके बारे में ज्यादा नहीं बताता है कि यह प्रोग्रामिंग में कैसे उपयोग किया जाता है। वह अगला है।
अगर यह एक बतख की तरह चलता है … क्यों बहुरूपी वस्तुएं बहुत बढ़िया हैं
जब आप अपने कोड में एक वर्ग बनाते हैं जो किसी अन्य वर्ग से विरासत में मिलता है, तो आप नए वर्ग को एक अनुबंध के लिए बाध्य कर रहे हैं। अनुबंध में कहा गया है कि माता-पिता में प्रत्येक चर और कार्य भी बच्चे में होंगे।
हर वाहन में स्टीयरिंग व्हील, गैस और ब्रेक पैडल और एक टर्न सिग्नल होता है। कार चलाने के लिए आपको हुड खोलने की आवश्यकता नहीं है। यह सब मायने रखता है कि यह एक कार है।
यही बात उन वर्गों पर लागू होती है जो अन्य वर्गों से विरासत में मिलते हैं। यहां टाइपस्क्रिप्ट में एक उदाहरण दिया गया है:
class Vehicle {
private _engine: string;
private _tires: number;
constructor(engine: string = "combustion", tires: number = 4) {
this._engine = engine;
this._tires = tires;
}
accelerate(velocity: number) {
console.log("accelerating at a velocity of " + velocity);
}
brake(pressure: number) {
console.log("applying " + pressure + " pressure");
}
turnLeft() {
console.log("turning left");
}
turnRight() {
console.log("turning right");
}
}
class Car extends Vehicle {
}
class Tesla extends Car {
constructor() {
super("electric");
}
}
इस उदाहरण में, एक वाहन वर्ग है। कार वर्ग वाहन वर्ग से विरासत में मिला है। और टेस्ला को कार से विरासत में मिली है। अब एक दो ऑब्जेक्ट बनाते हैं और उन्हें देखते हैं।
let myCoupe: Car = new Vehicle();
console.log(myCoupe);
console.log(myCoupe.constructor.name);
let mySedan: Vehicle = new Tesla();
console.log(mySedan);
console.log(mySedan.constructor.name);
myCoupe.turnLeft();
mySedan.turnLeft();
आप देख सकते हैं कि हमने myCoupe को एक कार और MySedan को एक वाहन घोषित किया। फिर हमने myCoupe को एक नए वाहन के रूप में और एक नए टेस्ला के रूप में mySedan को त्वरित किया। यदि आप टाइपस्क्रिप्ट सैंडबॉक्स पर जाते हैं और कोड चलाते हैं, तो आप देखेंगे कि यह बिना त्रुटि के काम करता है । और यह अनुबंध के आधार पर आपकी अपेक्षा के अनुरूप व्यवहार करता है।
दूसरे शब्दों में, सभी वाहन बाएं मुड़ सकते हैं क्योंकि उन्हें यह वाहन वर्ग से विरासत में मिला है। कंपाइलर जानता है कि वाहन का प्रत्येक बच्चा अनुबंध के लिए सहमत है। तो यह मानता है कि सब कुछ ठीक है, कोई फर्क नहीं पड़ता कि वस्तुओं को किस वर्ग में टाइप किया गया था या इसके रूप में त्वरित किया गया था।
इसे कभी-कभी "डक टाइपिंग" कहा जाता है। संकलक मानता है कि अगर यह एक बतख की तरह चलता है और एक बतख की तरह बात करता है, तो यह एक बतख भी हो सकता है। इसलिए संकलक विवरण के बारे में चिंता नहीं करता है और बस एक बतख की तरह वस्तु का इलाज करता है।
बहुरूपता आपका कोड बुलेटप्रूफ बनाता है
बहुरूपता अनुबंध का एक अन्य लाभ यह गारंटी है कि आपका कोड काम करेगा। यदि आपने दृढ़ता से अपने सभी चर टाइप किए हैं और प्रत्येक फ़ंक्शन क्या देता है, तो आप जानते हैं कि हर बच्चा हमेशा चर, कार्यों और प्रकारों से मेल खाएगा।
इसका मतलब है कि आप अपने कार्यक्रमों को तोड़ने के बिना अपनी कक्षाओं में कोड को जोड़ सकते हैं और बदल सकते हैं। एक वाहन वस्तु के संदर्भ में हर वस्तु हमेशा डेटा और कार्यक्षमता प्राप्त करेगी जो अपेक्षाओं को पूरा करती है, चाहे कितनी भी कार बदल जाए।
फ़ंक्शन के अंदर कोड सही परिणाम नहीं डाल सकता है। लेकिन यह एक अलग तरह की समस्या है। जब तक फ़ंक्शन अनुबंध का अनुसरण करता है और अपेक्षित प्रकार के चर को वापस करता है, तब तक कोड-ब्रेकिंग त्रुटि नहीं होगी।
बहुरूपता बहुत बड़ा है, और यहां 10 और प्रोग्रामिंग सिद्धांत हैं जिन्हें आपको जानना चाहिए ।
बहुरूपता का अभ्यास करें
- बोट क्लास बनाने के लिए ऊपर दिए गए सैंडबॉक्स लिंक का उपयोग करें।
- एक नई नाव ऑब्जेक्ट को इस तरह से इंस्टेंट करें कि यह एक वाहन प्रकार है, लेकिन फिर भी नाव की तरह दिखता है।
- सुनिश्चित करें कि नाव अभी भी एक वाहन की तरह व्यवहार करती है।
बहुरूपता का एक अंतिम उदाहरण
पॉलीमोर्फिज्म शुरू में काबू पाने के लिए एक मुश्किल अवधारणा हो सकती है। लेकिन एक बार जब आप इसे प्राप्त करते हैं, तो आपने यह समझने की दिशा में एक बड़ा कदम उठाया है कि वास्तव में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग क्या है। अवधारणा अभी भी सैद्धांतिक लग सकती है, हालांकि। तो यहाँ एक ठोस वास्तविक दुनिया उदाहरण है जो आपको यह देखने में मदद करता है कि यह कितना उपयोगी है।
कल्पना करें कि आप एक वेब ऐप बना रहे हैं जो MySQL डेटाबेस से जुड़ता है। तब बॉस एक PostgreSQL डेटाबेस पर स्विच करने का निर्णय लेता है। क्या इसका मतलब है कि आपको अपने सभी डेटाबेस कॉल को फिर से लिखना होगा?
नहीं, यह नहीं है। यदि आपका ऐप सब-क्लासेस के साथ एक DataAccess क्लास का उपयोग करता है जो वास्तव में डेटा के साथ घूमता है, तो आप भाग्य में हैं। DataAccess वर्ग परिभाषित करता है कि आपका ऐप डेटा के साथ कैसे इंटरैक्ट करता है, न कि यह डेटाबेस के साथ कैसे इंटरैक्ट करता है।
आपके पास MySQLAccess और PostgresQLAccess जैसी उप-कक्षाएं हैं जो सभी गंदे काम करती हैं। लेकिन अगर आपके ऐप में केवल DataAccess ऑब्जेक्ट हैं, तो आप ऐप कोड की एक भी पंक्ति को फिर से लिखे बिना डेटाबेस को स्वैप कर सकते हैं।