कैसे अपने ऑब्जेक्ट-ओरिएंटेड कोड को विरासत के साथ व्यवस्थित करें

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में कोड का पुन: आम है। कक्षाएं मौजूद हैं ताकि आप बार-बार एक ही चर और कार्यों को लिखने के बिना ऑब्जेक्ट बना सकें।

लेकिन खुद कक्षाओं के बारे में क्या? कभी-कभी कक्षाएं भी समान होती हैं। उदाहरण के लिए, एक पेड़ की शाखाएं, जड़ें और एक ट्रंक होता है। यह एल्म्स, ओक्स और पॉन्डेरोसा पाइंस पर लागू होता है।

यदि आप एक गेम में एक पेड़ जोड़ रहे हैं, तो आप दर्जनों पेड़ों के लिए पेड़ के हिस्से बना सकते हैं। लेकिन एक पेड़ वर्ग बनाना आसान होगा और हर दूसरे पेड़ को इसके गुण विरासत में मिलेंगे।

वंशानुक्रम क्यों महत्वपूर्ण है?

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में एक अवधारणा है जिसे "डीआरवाई रखें।" DRY का अर्थ है "खुद को दोहराएं नहीं।" यदि आप अपने आप को बहुत सारे कोड को कॉपी और पेस्ट करते हुए पाते हैं, तो आप बहुत सी गलतियों के लिए भी कमरा शुरू कर रहे हैं।

मान लीजिए कि आप एक नया तमागोची गेम के लिए कोड लिख रहे हैं। पहला आभासी पालतू एक ध्रुवीय भालू होगा। तो आप जावास्क्रिप्ट / टाइपस्क्रिप्ट में PolarBear नामक एक क्लास बनाएं।

 class PolarBear {
private _weight: number = 990;
constructor(weight: number = 0) {
this._weight = weight
}
makeNoise() {
console.log("made a roar");
}
eat() {
console.log("eats whatever it wants");
}
sleep() {
console.log("got a good night's sleep");
}
roam() {
console.log("wandered about aimlessly");
}
}

फिर आपका बॉस आपको बताता है कि ऊपरी प्रबंधन को बहुत बड़ी सफलता मिली थी। उन्होंने महसूस किया कि यह अब 90 का दशक नहीं है और वे तमागाछी में 5K से अधिक मेमोरी फिट कर सकते हैं। और अब वे सभी भालू चाहते हैं।

आप अपनी आस्तीन को रोल करते हैं और काम पर वापस जाते हैं, भालू वर्ग की प्रतियां बनाते हैं। फिर आपका बॉस आपके दरवाजे पर फिर से दस्तक देता है। यह पता चला है कि वे चाहते हैं कि खेल अधिक शैक्षिक हो। अब आपको प्रत्येक पालतू जानवर के लिए मूल जानकारी को जोड़ना होगा।

अब आप कोड की नकल नहीं कर रहे हैं। अब आप भालू की सभी आठ प्रजातियों के लिए कोड की सैकड़ों लाइनें बदल रहे हैं। इस तरह से गलतियाँ होती हैं और बग की शुरुआत होती है।

जैसा कि आप दूर कर रहे हैं, आपका बॉस अभी तक फिर से चलता है। अब ऊपरी प्रबंधन खेल में सभी कृन्तकों को भी चाहता है। ओह, और जिराफ।

आप जानते हैं कि जब आप कर रहे होते हैं, तो वे बंदर या कुछ और चाहते हैं। इसके लिए अवश्य ही एक बेहतर तरीका होना चाहिए। '

अगली पीढ़ी की तमोगेची बनाने के बजाय, आप हमेशा मौजूदा लोगों के साथ खेल सकते हैं

बचाव के लिए विरासत

अपने वर्चुअल मेनेजर को वश में करने के लिए, आपको संगठित होने की आवश्यकता है। वंशानुक्रम आपको माता-पिता और बच्चे के संबंधों को जोड़कर अपनी कक्षाओं को व्यवस्थित करने में मदद करता है।

काले भालू, घड़ियाल और आलसी भालू सभी भालू हैं। भालू, कृंतक और बंदर सभी जानवर हैं। और इसी तरह हम अपने परिवार के पेड़ की संरचना करेंगे।

यह कोड का एक हिस्सा जैसा दिखता है:

 class Animal {
private _weight: number;
private _origin: string;
constructor(weight: number = 0, origin: string = "") {
this._weight = weight;
this._origin = origin;
}
makeNoise(noise: string = "") {
console.log("made a noise that sounded like: " + noise);
}
eat(food: string = "") {
console.log("eats " + food);
}
sleep() {
console.log("got a good night's sleep");
}
roam() {
console.log("wandered about aimlessly");
}
}
class Bear extends Animal {
constructor(weight: number, origin: string) {
super(weight, origin);
}
makeNoise(noise: string = "roar") {
super.makeNoise(noise);
}
eat(food: string = "whatever it wants") {
super.eat(food);
}
}
class GrizzlyBear extends Bear {
constructor(weight: number = 600, origin: string = "North America") {
super(weight, origin);
}
}
class Panda extends Bear {
constructor(weight: number = 230, origin: string = "China") {
super(weight, origin);
}
makeNoise() {
super.makeNoise("squeek");
}
eat() {
super.eat("shoots and leaves");
}
}

आप टाइपस्क्रिप्ट सैंडबॉक्स में कोड के साथ खेल सकते हैं

यह एक बड़ा नमूना था, लेकिन कोड काफी सरल है, और सभी वर्गों को पशु वर्ग से उतारा गया है। आप देख सकते हैं कि भालू पशु का विस्तार करता है। और ग्रिजलीबियर और पांडा भालू वर्ग का विस्तार करते हैं। भालू वर्ग डिफ़ॉल्ट ध्वनि पैदा करता है और कार्यों खाते हैं। GrizzlyBear वर्ग उन डिफ़ॉल्ट फ़ंक्शंस का उपयोग करता है, लेकिन पांडा नहीं करता है।

दूसरे शब्दों में, ग्रिजलीबियर वर्ग भालू कार्यों को ओवरराइड नहीं करता है। चूँकि GrizzlyBear Bear का विस्तार करता है, इसलिए यह Bear द्वारा परिभाषित कार्यों का स्वचालित रूप से उपयोग करेगा। लेकिन चूंकि पांडा मेकओनिज़ को ओवरराइड करता है और फ़ंक्शंस खाता है, इसलिए इसके बजाय इसका उपयोग करेगा।

"ए-ए, है-ए" तकनीक के साथ संबंध खोजना

यह पता लगाने के लिए कि क्या एक कक्षा को वास्तव में किसी अन्य वर्ग का विस्तार करना चाहिए, तो आप खुद से पूछ सकते हैं कि क्या उनके बीच "ए-ए" या "-ए" संबंध है।

  • एक लेमुर "एक" बंदर है।
  • एक कंगारू "एक" मार्सुपियल है।
  • एक खरगोश का पैर एक खरगोश नहीं है, हालांकि। एक खरगोश "एक" पैर है।

यह उदाहरण थोड़ा सरल है, लेकिन वास्तविक दुनिया की कक्षाओं के साथ काम करते समय, यह बहुत मददगार हो सकता है।

हाथों पर अभ्यास और समझ

आपने जो सीखा है उसे लागू करने के लिए तैयार हैं?

  • सैंडबॉक्स पर जाएं और बाकी जानवरों की कक्षाओं को ऊपर के उदाहरण से भरें।
  • एक बंदर वर्ग जोड़ें।
  • एक प्रोबोस्किमोनकी क्लास जोड़ें जो आपके बंदर वर्ग का विस्तार करता है।

वंशानुक्रम केवल सुव्यवस्थित कोड से अधिक है। यह ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का एक मुख्य हिस्सा है। वंशानुक्रम वस्तुओं के बीच संचार को सुव्यवस्थित करने में मदद करता है। और यह अधिक उन्नत ऑब्जेक्ट-ओरिएंटेड डिज़ाइन की अनुमति देता है, जैसे बहुरूपता के साथ। आप टाइपस्क्रिप्ट प्रलेखन से विरासत के बारे में अधिक जान सकते हैं