संकल्पना (सामान्य प्रोग्रामिंग)

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

लैंग्वेज प्रयोग
यह शब्द मानक टेम्पलेट लाइब्रेरी के लिए 1998 से ही प्रयोग में था, क्योंकि यह उन पहले लाइब्रेरी में से था जो बड़े पैमाने पर टेम्पलेट्स का उपयोग करता था। अवधारणा शब्द (और इसकी लोकप्रियता) का श्रेय अलेक्जेंडर स्टेपानोव को दिया जाता है, जो एसटीएल के प्राथमिक डिजाइनर थे।

सी++ 1998 मानक में, कॉन्सेप्ट शब्द को विशेष प्रकार की आवश्यकताओं का सरल विवरण देने के लिए प्रस्तुत किया गया था, जो सामान्यतः टेम्पलेट पैरामीटर होता है। इसे लैंग्वेज में स्पष्ट रूप से एन्कोड नहीं किया गया था अवधारणा केवल इस सम्बन्ध में व्यक्त की गई थी कि उस प्रकार की वस्तुओं पर किस प्रकार के संचालन का प्रयास किया जाता है और क्या कार्य करने की आशा की जाती है (अर्थात, उत्तम रूप से संकलित करना)। सी++11 में स्पष्ट लैंग्वेज सुविधा के रूप में कॉन्सेप्ट्स (सी++) को जोड़ने का प्रस्ताव था, चूँकि इसे तैयार नहीं होने के कारण अस्वीकार कर दिया गया था। सी++20 ने अंततः अवधारणा के परिष्कृत डिज़ाइन को स्वीकार कर लिया।

चूंकि जावा (प्रोग्रामिंग लैंग्वेज) और सी में जेनेरिक में सी++ के टेम्पलेट (सी++)सी++) से कुछ समानताएं हैं, इसलिए वहां अवधारणाओं की भूमिका प्रोटोकॉल (वस्तु-उन्मुख प्रोग्रामिंग) द्वारा निभाई जाती है। चूँकि, अवधारणाओं और इंटरफेस के मध्य महत्वपूर्ण अंतर है: जब किसी विशेष इंटरफ़ेस को प्रारम्भ करने के लिए टेम्पलेट पैरामीटर की आवश्यकता होती है, तो मैचिंग टाइप केवल क्लासेज हो सकता है जो उस इंटरफ़ेस को (स्पष्ट रूप से) प्रारम्भ करता है। अवधारणाएँ अधिक फ्लेक्स्बिल हैं क्योंकि उन्हें दो विधियों से संतुष्ट किया जा सकता है:
 * अवधारणा मानचित्र का उपयोग करके स्पष्ट रूप से संतुष्ट के रूप में परिभाषित किया गया है (इंटरफ़ेस के विपरीत, प्रकार को भिन्न से परिभाषित किया गया है)।
 * ऑटो अवधारणाओं के लिए स्पष्ट रूप से परिभाषित, जिसका उपयोग अंतर्निहित प्रकारों और अन्य प्रकारों के लिए भी किया जा सकता है जो इस उपयोग के लिए पूर्वनिर्धारित नहीं थे।

किंतु सी लैंग्वेज में कई संरचनाएं हैं जहां उपयोग किए गए प्रकार को परिभाषित इंटरफ़ेस को स्पष्ट रूप से प्रारम्भ करने की आवश्यकता नहीं है, इसे केवल संबंधित पैटर्न से मैच करना आवश्यक है (चूँकि, इन पैटर्न को अवधारणाएं नहीं कहा जाता है)। जैसे  पुनरावृत्ति कथन पुनरावृत्त वस्तु को किसी भी प्रकार की होने की अनुमति देते है, जब तक कि यह उपयुक्त   विधि प्रारंभ करता है। (उपयोग कथन के साथ तुलना करें जिसके लिए   को प्रारंभ करने के लिए संसाधन की आवश्यकता होती है। )

निम (प्रोग्रामिंग लैंग्वेज) संकलन-समय बूलियन विधेय की श्रृंखला के रूप में अवधारणाओं को प्रारम्भ करता है।

अवधारणाओं के समान कुछ प्रारम्भ करने वाली अन्य लैंग्वेज हास्केल (प्रोग्रामिंग लैंग्वेज) है, जहां फीचर को टाइप क्लासेज कहा जाता है।

कुल ऑर्डर
कुल ऑर्डरिंग  ऑपरेटर के शब्दार्थ का वर्णन करती है। एक प्रकार पूर्ण रूप से तब व्यवस्थित होता है जब   द्विआधारी विधेय होता है और निम्नलिखित गुणों को संतुष्ट करता है:
 * एंटी-रिफ्लेक्टिव:  किसी भी मान के लिए   है।
 * ट्रांजिटिव: यदि  और   तब
 * एंटी सिमेट्रिक: यदि  तब
 * कुल: यदि  तब   या   है।

कई एल्गोरिदम उत्तम रूप से कार्य करने के लिए इन गुणों पर आशा करते हैं। उदाहरण के लिए  फ़ंक्शन को पूर्ण रूप से ऑर्डर किए गए प्रकारों पर सुरक्षित रूप से परिभाषित किया जा सकता है:

इटरेटर

यदि प्रकार  सी++ में ट्रिवियल इटरेटर अवधारणा को संतुष्ट करता है, और   प्रकार का है , निम्नलिखित संगत शब्दार्थ के साथ मान्य अभिव्यक्तियाँ हैं:
 * डिफ़ॉल्ट कंस्ट्रक्शन
 * किसी प्रकार  में परिवर्तनीय होना चाहिए।
 * मान्य है यदि  है।

यह भी देखें

 * प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
 * अवधारणाएँ (सी++)
 * इंटरफ़ेस (जावा)
 * क्लास टाइप करें

बाहरी संबंध

 * Boost Generic Programming Techniques
 * Douglas Gregor, et al. सीoncepts: Linguistic Support for Generic Programming in सी++
 * Doug Gregor talk on सीoncepts at Google (video)
 * A comparison of सी++ concepts and Haskell type classes

コンセプト (C++)