प्रोग्रामिंग पैराडाइम की तुलना

यह आलेख विकीपीडिया के मौजूदा लेखों में इन समानताओं और अंतरों से संबंधित अलग-अलग चर्चाओं के लिंक के साथ ग्राफिकल और सारणीबद्ध प्रारूप दोनों में सारांश के रूप में विभिन्न प्रोग्रामिंग प्रतिमानों के बीच विभिन्न समानताओं और अंतरों को निर्धारित करने का प्रयास करता है।

मुख्य प्रतिमान दृष्टिकोण
प्रोग्रामिंग के दो मुख्य दृष्टिकोण हैं:
 * अनिवार्य प्रोग्रामिंग - क्रियान्वित करने के तरीके पर ध्यान केंद्रित करता है, नियंत्रण प्रवाह को कथन (प्रोग्रामिंग) के रूप में परिभाषित करता है जो प्रोग्राम की स्थिति (कंप्यूटर विज्ञान) को बदल देता है।
 * घोषणात्मक प्रोग्रामिंग - क्या निष्पादित करना है इस पर ध्यान केंद्रित करता है, प्रोग्राम लॉजिक को परिभाषित करता है, लेकिन विस्तृत नियंत्रण प्रवाह नहीं।

निम्नलिखित को व्यापक रूप से मुख्य प्रोग्रामिंग प्रतिमान माना जाता है, जैसा कि प्रोग्रामिंग भाषा की लोकप्रियता को मापते समय देखा जाता है:
 * प्रक्रियात्मक प्रोग्रामिंग - उन चरणों को निर्दिष्ट करता है जो प्रोग्राम को वांछित स्थिति तक पहुंचने के लिए उठाने चाहिए।
 * कार्यात्मक प्रोग्रामिंग - कार्यक्रमों को मूल्यांकन कार्य (गणित) के रूप में मानता है और प्रोग्राम की स्थिति और अपरिवर्तनीय वस्तु डेटा से बचता है।
 * ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग | ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) - प्रोग्राम को वस्तु (कंप्यूटर विज्ञान)  के रूप में व्यवस्थित करता है:  विशेषता (कंप्यूटिंग)  और  विधि (कंप्यूटर विज्ञान)  से मिलकर डेटा संरचना उनकी बातचीत के साथ।

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

ओओपी विधियों को लागू करने वाले सबरूटीन्स को अंततः अनिवार्य, कार्यात्मक, या प्रक्रियात्मक शैली में कोडित किया जा सकता है, जो इनवोकिंग प्रोग्राम की ओर से राज्य (कंप्यूटर विज्ञान) को सीधे बदल सकता है या नहीं। प्रतिमानों के बीच अनिवार्य रूप से कुछ ओवरलैप है, लेकिन मुख्य विशेषताएं या पहचाने जाने योग्य अंतर इस तालिका में संक्षेप हैं:

शब्दावली में अंतर
कई (प्रकार के) प्रोग्रामिंग प्रतिमानों के समानांतर (कभी-कभी स्पष्ट रूप से परस्पर विरोधी परिभाषाओं के साथ) मौजूद होने के बावजूद, अंतर्निहित सार के कई कमोबेश वही रहते हैं (निरंतर (प्रोग्रामिंग), चर (प्रोग्रामिंग), फील्ड (कंप्यूटर विज्ञान), सबरूटीन कॉल आदि) .) और समान रूप से समान विशेषताओं या कार्यों के साथ अनिवार्य रूप से प्रत्येक अलग प्रतिमान में शामिल किया जाना चाहिए। ऊपर दी गई तालिका सटीक समानताओं के लिए गाइड के रूप में अभिप्रेत नहीं है, लेकिन प्रत्येक प्रतिमान के भीतर, इन संस्थाओं के अलग-अलग नामकरण के आधार पर, अधिक जानकारी के लिए कहाँ देखना है, इसका  सूचकांक है। आगे जटिल मामले प्रत्येक प्रतिमान के गैर-मानकीकृत कार्यान्वयन हैं, कई प्रोग्रामिंग भाषाओं में, विशेष रूप से बहु-प्रतिमान प्रोग्रामिंग भाषा का समर्थन करने वाली भाषाएं, प्रत्येक अपने स्वयं के शब्दजाल के साथ।

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

कुछ प्रोग्रामर महसूस करते हैं कि ये सुविधाएँ महत्वहीन या तुच्छ हैं। उदाहरण के लिए, एलन पर्लिस ने एक बार घुंघराले ब्रैकेट प्रोग्रामिंग भाषा  | ब्रैकेट-सीमांकित भाषाओं के संदर्भ में चुटकी ली, कि सिंटैक्टिक चीनी अर्धविराम के कैंसर का कारण बनती है (प्रोग्रामिंग पर एपिग्राम देखें)।

इसका एक विस्तार है सिंटैक्टिक शुगर#सिंटैक्टिक सैकरिन, या मुफ्त सिंटैक्स जो प्रोग्रामिंग को आसान नहीं बनाता है।

प्रदर्शन तुलना
केवल कुल निर्देश पथ लंबाई में, अनिवार्य शैली में कोडित  प्रोग्राम, बिना किसी सबरूटीन्स का उपयोग करते हुए, सबसे कम गिनती होगी। हालाँकि, ऐसे प्रोग्राम का बाइनरी फ़ाइल आकार सबरूटीन्स (कार्यात्मक और प्रक्रियात्मक प्रोग्रामिंग के रूप में) का उपयोग करके कोड किए गए समान प्रोग्राम से बड़ा हो सकता है और संदर्भ के अधिक स्थानीयता को संदर्भित करेगा। गैर-स्थानीय भौतिक निर्देश जो कैशे (कंप्यूटिंग) #ऑपरेशन बढ़ा सकते हैं और निर्देश आधुनिक सेंट्रल प्रोसेसिंग यूनिट में कम्प्यूटेशनल ओवरहेड लाते हैं।

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

प्रबंधित कोड
प्रबंधित कोड वातावरण में निष्पादित प्रोग्राम के लिए, जैसे .NET फ्रेमवर्क, कई मुद्दे प्रदर्शन को प्रभावित करते हैं जो प्रोग्रामिंग भाषा प्रतिमान और उपयोग की जाने वाली विभिन्न भाषा सुविधाओं से महत्वपूर्ण रूप से प्रभावित होते हैं।

स्यूडोकोड उदाहरण विभिन्न प्रतिमानों की तुलना
सर्कल के क्षेत्र (πr²) की गणना करने के लिए उपयोग किए जाने वाले अनिवार्य, प्रक्रियात्मक और ऑब्जेक्ट ओरिएंटेड दृष्टिकोणों की स्यूडोकोड तुलना, कोई सबरूटीन इनलाइन विस्तार नहीं, कोई  मैक्रो (कंप्यूटर विज्ञान)   preprocessor  नहीं मानते, अंकगणित पंजीकृत करते हैं, और प्रत्येक निर्देश 'स्टेप' को केवल भारित करते हैं। 1 निर्देश - निर्देश पथ की लंबाई के कच्चे माप के रूप में - नीचे प्रस्तुत किया गया है। निर्देश चरण जो अवधारणात्मक रूप से राज्य परिवर्तन कर रहा है, प्रत्येक मामले में बोल्ड टाइपफेस में हाइलाइट किया गया है। सर्कल के क्षेत्र की गणना करने के लिए उपयोग किए जाने वाले अंकगणितीय संचालन तीनों प्रतिमानों में समान हैं, अंतर यह है कि प्रक्रियात्मक और वस्तु-उन्मुख प्रतिमान उन कार्यों को  सबरूटीन कॉल में लपेटते हैं जो गणना को सामान्य और पुन: प्रयोज्य बनाता है। मैक्रो प्रीप्रोसेसर का उपयोग करते हुए विशुद्ध रूप से अनिवार्य प्रोग्राम में समान प्रभाव प्राप्त किया जा सकता है, केवल प्रोग्राम के आकार में वृद्धि (केवल प्रत्येक मैक्रो इनवोकेशन साइट पर) के बिना संबंधित यथानुपात रनटाइम लागत (एन इनवोकेशन के लिए आनुपातिक - जो एक के भीतर स्थित हो सकती है) आंतरिक पाश उदाहरण के लिए)। इसके विपरीत,  कंपाइलर द्वारा सबरूटीन इनलाइनिंग प्रक्रियात्मक कार्यक्रमों को आकार में पूरी तरह अनिवार्य कोड के समान कुछ कम कर सकती है। हालाँकि, ऑब्जेक्ट-ओरिएंटेड प्रोग्राम के लिए, इनलाइनिंग के साथ भी, ऑब्जेक्ट-ओरिएंटेड तरीकों द्वारा प्रसंस्करण के लिए संदेशों को अभी भी (तर्कों की प्रतियों से) बनाया जाना चाहिए। कॉल का ओवरहेड, आभासी या अन्यथा, नियंत्रण प्रवाह परिवर्तन का प्रभुत्व नहीं है - लेकिन आसपास के कॉलिंग कन्वेंशन लागतों द्वारा, जैसे फ़ंक्शन प्रस्तावना कोड, स्टैक सेटअप और पैरामीटर (कंप्यूटर प्रोग्रामिंग)#पैरामीटर और तर्क पारित करना (यहाँ देखें अधिक यथार्थवादी निर्देश पथ लंबाई, स्टैक और x86 प्लेटफॉर्म पर कॉल से जुड़ी अन्य लागतों के लिए)। यहां भी देखें एरिक एस रॉबर्ट्स द्वारा  स्लाइड प्रस्तुति के लिए ( चर के लिए स्मृति का आवंटन, अध्याय 7) -  जावा (प्रोग्रामिंग भाषा)  ऑब्जेक्ट-ओरिएंटेड लैंग्वेज में तीन परिमेय संख्याओं को जोड़ते समय स्टैक और हीप मेमोरी के उपयोग का चित्रण।

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

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

संदेश और वस्तु भंडारण के लिए गतिशील स्मृति का आवंटन
विशिष्ट रूप से, ऑब्जेक्ट-ओरिएंटेड प्रतिमान में ऑब्जेक्ट निर्माण और संदेश पासिंग दोनों के लिए हीप स्टोरेज से डायनेमिक मेमोरी आवंटन शामिल है। 1994 का बेंचमार्क - डिजिटल उपकरण निगम द्वारा विभिन्न प्रकार के सॉफ़्टवेयर पर संचालित बड़े सी और सी++ प्रोग्राम में मेमोरी एलोकेशन कॉस्ट, इंस्ट्रक्शन-लेवल प्रोफाइलिंग टूल का उपयोग करके मापा गया कि डायनेमिक स्टोरेज आवंटन के लिए कितने निर्देश आवश्यक थे। परिणामों से पता चला कि निष्पादित निर्देशों की सबसे कम निरपेक्ष संख्या औसतन लगभग 50 थी, लेकिन अन्य 611 तक पहुंच गए। मुरली आर. कृष्णन द्वारा हीप: सुख और पीड़ा भी देखें यह बताता है कि ढेर कार्यान्वयन सभी प्लेटफार्मों के लिए सामान्य रहता है, और इसलिए भारी ओवरहेड होता है। आईबीएम के अरुण अयंगर द्वारा 1996 का आईबीएम पेपर स्केलेबिलिटी ऑफ डायनामिक स्टोरेज एलोकेशन एल्गोरिदम विभिन्न डायनेमिक स्टोरेज एल्गोरिदम और उनके संबंधित निर्देश काउंट को प्रदर्शित करता है। यहां तक ​​कि अनुशंसित एमएफएलएफ I एल्गोरिदम (एचएस स्टोन, आरसी 9674) 200 और 400 के बीच की सीमा में निर्देश गणना दिखाता है। उपरोक्त स्यूडोकोड उदाहरण में इस स्मृति आवंटन पथ की लंबाई या स्मृति उपसर्ग ओवरहेड शामिल नहीं है और बाद में संबंधित कचरा शामिल नहीं है। संग्रह ओवरहेड्स। दृढ़ता से सुझाव देते हुए कि हीप आवंटन गैर-तुच्छ कार्य है, गेम डेवलपर जॉन डब्ल्यू रैटक्लिफ द्वारा  खुला स्रोत सॉफ्टवेयर माइक्रोएलोकेटर, जिसमें कोड की लगभग 1,000 पंक्तियाँ होती हैं।

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

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

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

यह भी देखें

 * प्रोग्रामिंग भाषाओं की तुलना
 * प्रोग्रामिंग भाषाओं की तुलना (मूल निर्देश)
 * ग्रैन्युलैरिटी # कम्प्यूटिंग
 * संदेश देना
 * सबरूटीन

अग्रिम पठन

 * "A Memory Allocator" by Doug Lea
 * "Dynamic Memory Allocation and Linked Data Structures" by (Scottish Qualifications Authority)
 * "Inside A Storage Allocator" by Dr. Newcomer Ph.D

बाहरी संबंध

 * Comparing Programming Paradigms by Dr Rachel Harrison and Mr Lins Samaraweera
 * Comparing Programming Paradigms: an Evaluation of Functional and Object-Oriented Programs by Harrison, R., Samaraweera, L. G., Dobie, M. R. and Lewis, P. H. (1996) pp. 247–254. ISSN 0268-6961
 * "The principal programming paradigms" By Peter Van Roy
 * "Concepts, Techniques, and Models of Computer Programming"(2004) by Peter Van Roy & Seif Haridi, ISBN 0-262-22069-5
 * The True Cost of Calls- from "Harder, Better, Faster, Stronger" blog by computer scientist Steven Pigeon