ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में एब्सट्रैक्शन के लिए एक शुरुआती गाइड

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

आपने मेनू से सामग्री पढ़ी होगी, लेकिन आप यह नहीं जानते कि साल्सा कैसे बनता है। वे अपनी सब्जियों पर जिस मसाला का उपयोग करते हैं वह एक गुप्त मिश्रण हो सकता है। आप हर सटीक घटक को जानने की जरूरत नहीं है, यद्यपि। यह जानना काफी है कि यह स्वादिष्ट है।

सादे सफेद चावल की तरह आप जानते हैं कि सामग्री, ठोस हैं। अन्य तत्व अमूर्त हैं। तुम्हें पता है कि यह सालसा है, लेकिन किस तरह का? या, यदि कोई व्यक्ति आपको कहीं से भी एक बर्टिटो देता है, तो पूरा ब्यूरितो अमूर्त है।

अमूर्त में अमूर्तता

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

एब्स्ट्रेक्शन कोड और डेटा को छुपाता है जब उचित हो

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

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

एबस्ट्रेक्शन इनकैप्सुलेशन के करीब है

प्रोग्रामिंग ऑब्जेक्ट्स के साथ भी यही बात है। जब आप किसी ऑब्जेक्ट को तुरंत बनाते हैं (इसे एक वर्ग से बनाते हैं), तो यह फूड ट्रक काउंटर से एक बर्टिटो ऑर्डर करने जैसा है। आपके पास कुछ डेटा तक पहुंच है, लेकिन सभी नहीं। आपको यह जानने की आवश्यकता नहीं है कि ऑब्जेक्ट कैसे काम करता है, जब तक कि फ़ंक्शन सही डेटा वापस नहीं करता है। यहाँ जावास्क्रिप्ट / टाइपस्क्रिप्ट में एक गड़गड़ाहट है:

 class CheeseBlend {
private _ingredients = ["Colby Jack", "Cheddar", "Manchego"];
get ingredients() {
return "melted cheese";
}
}
class SecretSalsa {
private _ingredients = ["onions", "tomatoes", "cilantro", "Guatemalan Insanity Peppers"];
get ingredients() {
return "it's a secret";
}
}
class Burrito {
private _beans = "beans";
private _rice = "rice";
private _cheese: CheeseBlend = new CheeseBlend();
private _salsa: SecretSalsa = new SecretSalsa();
get cheese() {
return this._cheese.ingredients;
}
get salsa() {
return this._salsa.ingredients;
}
}
let burro = new Burrito();
console.log(burro.cheese);
console.log(burro.salsa);

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

उपरोक्त उदाहरण में, साल्सा और पनीर की सामग्री को अलग कर दिया गया है। सबसे पहले, वे विशेष सामग्री को छिपाने के लिए, संक्षिप्त हो गए हैं। तब अवयवों तक पहुंचने के लिए गेटर्स जोड़े जाते हैं। लेकिन सामग्री केवल एक सार प्रतिनिधित्व लौटाती है कि वे वास्तव में क्या हैं।

कंक्रीट में अमूर्तता

अमूर्त एक अवधारणा से अधिक है, यद्यपि। कक्षाएं अमूर्त भी हो सकती हैं। इसका मतलब है कि वे अन्य वर्गों को परिभाषित कर सकते हैं। लेकिन वे खुद को तुरंत नहीं किया जा सकता है।

क्यों कक्षाएं कभी कभी सार होना चाहिए

कल्पना कीजिए कि आप एक रेस्तरां में जाते हैं और बैठते हैं। वेटर आपको एक मेनू सौंपता है। आप इसे खोजने के लिए खोलते हैं कि केवल एक आइटम है: भोजन।

यह बहुत सार है। क्या आप इसे ऑर्डर करेंगे? क्या आप इसे खाएंगे? तुम शायद नहीं होगा। कुछ कहना खाना ही काफी नहीं है। इसे और अधिक ठोस रूप में तोड़ने की आवश्यकता है।

पास्ता के बारे में क्या? खैर, यह एक अधिक विशिष्ट प्रकार का भोजन है। और हम जानते हैं कि यह शायद नूडल्स और सॉस है। लेकिन वहाँ बाहर पास्ता के बहुत सारे प्रकार हैं, इसलिए यह अभी भी सार है।

क्या सार है और क्या ठोस है?

Fettuccine अल्फ्रेडो भोजन और पास्ता दोनों का एक ठोस उदाहरण है। यही बात कक्षाओं पर भी लागू होती है। हर वर्ग को तत्काल नहीं किया जाना चाहिए। कुछ वर्गों को केवल अन्य वर्गों की संरचना को परिभाषित करना चाहिए।

यहाँ एक अमूर्त खाद्य वर्ग और एक बच्चा मैकडैमियानेट्स वर्ग के साथ एक उदाहरण दिया गया है:

 abstract class Food {
constructor(public name: String) {}
abstract totalCalories(): number;
abstract description(): string;
abstract flavor(): string;
}
class MacadamiaNuts extends Food {
constructor() {
super("One Cup of Macadamia Nuts");
}
totalCalories() {
return 962;
}
description() {
return "A nut from Hawaii.";
}
flavor() {
return "rich, buttery, and nutty";
}
}
let nuts = new MacadamiaNuts();
console.log(nuts.name)
console.log(nuts.description())

यहाँ कोड है।

अमूर्त कक्षाएं अन्य वर्गों को बताती हैं कि उन्हें कैसे व्यवहार करना चाहिए। ऊपर दिए गए उदाहरण में, यदि आप एक खाद्य वर्ग बनने जा रहे हैं, तो आपके पास ऐसे कार्य होने चाहिए जो आपके नाम, स्वाद, विवरण और कैलोरी तक पहुंच प्रदान करें।

ध्यान दें कि MacadamiaNuts वर्ग भोजन का विस्तार करता है । यह कह रहा है कि MacadamiaNuts फूड के नियमों का पालन करने के लिए सहमत है। इसके अलावा, ध्यान दें कि कंस्ट्रक्टर सुपर को कॉल करता है। यह कमांड कंस्ट्रक्टर को तत्काल मैकाडामियाएनट्स का संकेत देता है

यदि आप प्रोग्राम करना सीख रहे हैं, तो आप इन प्रोग्रामिंग गेम्स के साथ और अधिक मज़े कर सकते हैं

अमूर्त अभ्यास

  • ऊपर दिए गए लिंक पर जाएं और सैंडबॉक्स का उपयोग करके सूप नामक एक सार वर्ग बनाएं
  • सूप क्लास का एक ठोस बच्चा बनाएं, जिसे सेरेल कहा जाता है।
  • अपने कोड का परीक्षण करने के लिए कंसोल का उपयोग करें। यदि आपका अनाज वर्ग सूप में परिभाषित कार्यों में से एक को याद कर रहा है तो क्या होगा?

लेकिन एक वर्ग की बात क्या है जो आप तुरंत नहीं कर सकते हैं?

सबसे पहले, अमूर्त कक्षाएं अनावश्यक लग सकती हैं। सब के बाद, आप वास्तव में उन्हें एक वस्तु बनाने के लिए उपयोग नहीं कर सकते। और ऐसा नहीं है कि वे अपने कार्यों से गुजरते हैं। प्रत्येक बाल वर्ग में कार्यों को फिर से लिखना होगा।

वहाँ दो मुख्य कारण आप अमूर्त वर्गों की जरूरत है। वे आपके कोड को सुसंगत रखते हैं, और वे यह सुनिश्चित करते हैं कि अन्य डेवलपर्स भी सुसंगत कोड लिखते हैं। आप हमेशा अकेले काम नहीं करेंगे। पूरी टीम को समान नियमों का पालन करने की आवश्यकता है। आप अमूर्त कक्षाओं पर टाइपस्क्रिप्ट प्रलेखन से अधिक जान सकते हैं।