अमूर्त (n) - घटनाओं
बजाय विचारों के साथ काम की गुणवत्ता
— स्रोत: Oxford English Dictionary
Stroustrup सार वर्ग या में अन्य विशिष्ट विचारों की बात नहीं कर रहा है प्रोग्रामिंग। इसके बजाय, वह शब्द अबास्ट्रक्शन का जिक्र कर रहा है।
अवशोषण मानसिक सहायक हैं। वे हमें प्रत्यक्ष आवेदन के बजाय "सिद्धांत" में सोचने में मदद करते हैं। गणित अमूर्तता की कला है। प्रोग्रामिंग लागू abstractions की कला है।
अमूर्त हमें चीजों के बारे में सोचने में मदद करने के लिए, पदानुक्रमों जैसे मानसिक मॉडल बनाने में हमारी सहायता करते हैं। अमूर्तता के कारण बहुरूपता संभव है। आइए एक उदाहरण देखें।
उदाहरण
मैं एक ओलेक्सी Dobrodum है। मैं इसे ओलेक्सिया डोब्रोडम के रूप में संदर्भित करता हूं, मैं इसे ओलेक्सिया डोब्रोडम की तरह मानता हूं, यह सब कभी ओलेक्सिया डोब्रोडम होगा। ओलेक्सिया डोब्रोडम के लिए जो कुछ भी मैं करता हूं वह विशेष रूप से इसके लिए होता है। अब हम अमूर्तता के पहले स्तर पर हैं, या सबसे विशिष्ट हम इस ओलेक्सिया डोब्रोडम के साथ काम करते समय कभी भी होंगे।
हाल ही में मैंने ज़च लट्टा हासिल किया, इसलिए अब मेरे पास ओलेक्सिया डोब्रोडम और जच लट्टा दोनों हैं।
मैं एक ओलेक्सी Dobrodum के रूप में तो और एक ज़ैक Latta के रूप में व्यक्तिगत रूप से उन दोनों की जानकारी दे सकती है, लेकिन है कि जल्दी से अनावश्यक बढ़ने और साबित लचीला नहीं होगा। इसके बजाए, हम केवल ओलेक्सिया डोब्रोडम और जच लट्टा को एक साथ समूहित कर सकते हैं और उन्हें मानव कहते हैं। अब हम अमूर्त स्तर 2 प्राप्त कर चुके हैं 2. व्यक्तिगत रूप से प्रत्येक व्यक्ति से निपटने के बजाय, हम उन्हें मानव के रूप में संदर्भित कर सकते हैं। ऐसा करने से, हमने "कार्यान्वयन", या प्रत्येक व्यक्ति के विशिष्ट विवरणों को समझाया है और विचारों पर ध्यान केंद्रित करना शुरू कर दिया है, इसलिए अब हम सार में सोच रहे हैं।
बेशक
हम कर सकते हैं सार यह आगे है, लेकिन उम्मीद है कि आपको कपोल-कल्पना के पीछे विचार प्राप्त करने के लिए शुरू कर रहे हैं। इससे मुख्य अधिग्रहण यह है कि एक अमूर्त विवरण (या कार्यान्वयन) छुपाता है। हमारे मानव अबास्ट्रक्शन में ब्योरा छिपाकर, हम खुद को सामान्यताओं में बात करने की अनुमति देते हैं। हम संक्षेप में बात करेंगे कि यह अगले खंड में प्रोग्रामिंग में कैसे लागू होता है।
लागू करने चीजें
अब जब कि हम क्या एक अमूर्त है, चलो इसे लागू करते हैं पर संक्षेप में छुआ है। अमूर्तता के कारण बहुरूपता संभव है। पिछले उदाहरण के मॉडल के बाद, कहते हैं कि हम निम्नलिखित दो वर्गों है:
class OleksiyDobrodum
name = "Oleksiy Dobrodum"
smarts = :mega-smart
mood = :happy
favorite_candy = :chocolate
end
class ZachLatta
name = "Zach Latta"
smarts = :so-so
mood = :indifferent
hair_color = :brown
end
अगर मैं ZachLatta
का एक उदाहरण मैं विशेष रूप से यह का उल्लेख करना चाहिए के साथ बातचीत करना चाहते हैं। OleksiyDobrodum
उदाहरणों के लिए भी यही है।
zach = new ZachLatta
print zach.name
oleksiy = new OleksiyDobrodum
print oleksiy.favorite_candy
अगर मैं Human
कहा जाता है एक अमूर्त वर्ग बना सकते हैं और, यह से दोनों OleksiyDobrodum
और ZachLatta
इनहेरिट है तो मैं कर सकते हैं सार दूर कार्यान्वयन दोनों वर्गों की और बस Human
रूप में उनमें से दोनों मामलों को देखें।
class Human
name
smarts
mood
end
class OleksiyDobrodum < Human
name = "Oleksiy Dobrodum"
smarts = :mega-smart
mood = :happy
favorite_candy = :chocolate
end
class ZachLatta < Human
name = "Zach Latta"
smarts = :so-so
mood = :indifferent
hair_color = :brown
end
हमारे वर्ग रेखाचित्र अब ऐसा दिखाई देता है:
मैं हमेशा के कार्यान्वयन के बारे में पर घूमना सकता है, लेकिन हमारे में महत्वपूर्ण परिणाम पर चलते हैं।
में महत्वपूर्ण परिणाम
- कपोल-कल्पना कर रहे हैं विचारों, नहीं विशिष्ट घटनाओं
- सार कुछ करने के लिए इसके कार्यान्वयन से दूर ले जाने और बड़े विचारों
- कपोल-कल्पना कोड व्यवस्थित करने के लिए इस्तेमाल किया जा सकता के बारे में सोचना है (और कई अन्य चीजें) प्रभावी ढंग से
- ऑब्जेक्ट उन्मुख प्रोग्रामिंग पूरी तरह से अवशोषण पर निर्भर है। उपर्युक्त बुलेट बिंदु देखें।
कल्पना कीजिए कि यह कार्य पूरा करने के लिए बहुत अधिक काम करता है। अब कल्पना करें कि यह करने के लिए उनका एक आसान काम था। वोला, एक अमूर्तता। – chris
बीस्ट्रॉस्ट्रप (http://www.stroustrup.com/glossary.html) - * अमूर्त - सामान्य इंटरफ़ेस छुपा कार्यान्वयन विवरण निर्दिष्ट करने का कार्य। कक्षाएं, सार वर्ग, और टेम्पलेट्स सी ++ में प्राथमिक अमूर्त तंत्र हैं। यह भी देखें: encapsulation। * – SChepurin
कृपया इस प्रश्न को दोबारा खोलें, [इसका उचित उत्तर है] (http://www.boost.org/community/generic_programming.html#concept) – TemplateRex