कंप्यूटर प्रोग्राम

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

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

यदि निष्पादन योग्य निष्पादन के लिए अनुरोध किया जाता है, तो ऑपरेटिंग प्रणाली लोडर (कम्प्यूटिंग) इसे यादृच्छिक एक्सेस मेमोरी में सम्मलित करता है और एक प्रक्रिया (कंप्यूटिंग) प्रारंभ करता है। सेंट्रल प्रोसेसिंग यूनिट जल्द ही इस प्रक्रिया पर स्विच करती है, जिससे की प्रत्येक मशीन निर्देश को प्राप्त कर सके, डीकोड कर सके और फिर निष्पादित कर सके।

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

उदाहरण कंप्यूटर प्रोग्राम
"हैलो, वर्ल्ड" प्रोग्राम का उपयोग किसी लैंग्वेज के मूल सिंटैक्स को दर्शाने के लिए किया जाता है। 1964 में बेसिक लैंग्वेज का सिंटेक्स जानबूझकर लैंग्वेज को सीखने में आसान बनाने के लिए सीमित किया गया था। उदाहरण के लिए, उपयोग किए जाने से पहले चर डेक्लेरेशन नहीं किए जाते हैं। इसके अतिरिक्त, चर स्वचालित रूप से शून्य पर प्रारंभ हो जाते हैं। यहाँ एक उदाहरण कंप्यूटर प्रोग्राम का दिया गया है जिसमे बेसिक संख्याओं की एक सूची औसत करने के लिए दी गयी है मौलिक कंप्यूटर प्रोग्रामिंग की यांत्रिकी सीखने के बाद, बड़े कंप्यूटर प्रणाली बनाने के लिए अधिक परिष्कृत और शक्तिशाली लैंग्वेज के रूप में उपलब्ध होते है

इतिहास
सॉफ्टवेयर विकास में सुधार कंप्यूटर धातु सामग्री में सुधार का परिणाम है। हार्डवेयर के इतिहास में प्रत्येक चरण में, कंप्यूटर प्रोग्रामिंग का कार्य नाटकीय रूप से बदल गया।

विश्लेषणात्मक इंजन
1837 में, चार्ल्स बैबेज को विश्लेषणात्मक इंजन बनाने के प्रयास के लिए जैक्वार्ड के लूम्स से प्रेरित किया गया था। गणना उपकरण के घटकों के नाम कपड़ा उद्योग से उधार लिए गए थे। कपड़ा उद्योग में, मिलिंग के लिए स्टोर से यार्न लाया जाता था। डिवाइस में एक "स्टोर" होता है, जिसमें प्रत्येक 50 दशमलव अंकों के 1,000 नंबर रखने के लिए मेमोरी सम्मलित होती है। प्रसंस्करण के लिए "स्टोर" से नंबर "मिल" में स्थानांतरित किए गए थे। यह छिद्रित कार्ड के दो सेटों का उपयोग करके प्रोग्राम किया गया था। एक सेट ने ऑपरेशन को निर्देशित किया और दूसरे सेट ने वेरिएबल्स को इनपुट किया। चूंकि, ब्रिटिश सरकार के 17,000 पाउंड से अधिक धन के बाद, हजारों दांतेदार पहिए और गियर पूरी तरह से एक साथ काम नहीं कर पाए।

एडा लवलेस ने विश्लेषणात्मक इंजन (1843) का विवरण बनाने के लिए चार्ल्स बैबेज के लिए काम किया। विवरण में नोट जी ​​सम्मलित है जो विश्लेषणात्मक इंजन का उपयोग करके बर्नौली संख्याओं की गणना के लिए एक विधि को पूरी तरह से विस्तृत करता है। इस नोट को कुछ इतिहासकारों ने दुनिया का पहला कंप्यूटर प्रोग्राम माना है।

यूनिवर्सल ट्यूरिंग मशीन


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

ईएनआईएसी
इलेक्ट्रॉनिक न्यूमेरिकल इंटीग्रेटर एंड कंप्यूटर ( ईएनआईएसी ) जुलाई 1943 और फॉल 1945 के बीच बनाया गया था। यह एक ट्यूरिंग पूर्ण, सामान्य-उद्देश्य वाला कंप्यूटर था जिसमें विद्युत परिपथ बनाने के लिए 17,468 वैक्यूम ट्यूब का उपयोग किया गया था। इसके मूल में, यह पास्कलाइन्स की एक साथ जुड़ी हुई श्रृंखला थी। इसकी 40 इकाइयों का वजन 30 टन था, कब्जा कर लिया 1,800 क्लास फुट (167 मी2) और व्यर्थ होने पर बिजली में $ 650 प्रति घंटे (मुद्रास्फीति) का उपभोग किया। इसमें 20 बेस -10 एक्युमुलेटर (कंप्यूटिंग) था। ईएनआईएसी की प्रोग्रामिंग में दो महीने तक का समय लगा। तीन फंक्शन टेबल पहियों पर थे और उन्हें फिक्स्ड फंक्शन पैनल में रोल करने की जरूरत थी। भारी काली केबलों को प्लगबोर्ड में लगाकर फलन टेबल को फलन पैनल से जोड़ा गया था। प्रत्येक फंक्शन टेबल में 728 रोटेटिंग नॉब्स थे। ईएनआईएसी की प्रोग्रामिंग में 3,000 स्विचों में से कुछ को सेट करना भी सम्मलित था। एक प्रोग्राम को डिबग करने में एक सप्ताह का समय लगा। यह 1947 से 1955 तक एबरडीन प्रोविंग ग्राउंड में चला, हाइड्रोजन बम मापदंडों की गणना, मौसम के मिजाज की भविष्यवाणी, और तोपों को निशाना बनाने के लिए फायरिंग टेबल का निर्माण किया।

संग्रहीत-प्रोग्राम कंप्यूटर
डोरियों को प्लग करने और स्विचों को मोड़ने के अतिरिक्त, एक संग्रहीत प्रोग्राम कंप्यूटर अपने निर्देशों को मेमोरी में वैसे ही लोड करता है जैसे यह अपने डेटा को मेमोरी में लोड करता है। परिणामस्वरुप , कंप्यूटर को जल्दी से प्रोग्राम किया जा सकता है और बहुत तेज गति से गणना कर सकता है। प्रेस्पर एकर्ट और जॉन मौचली ने एनियाक का निर्माण किया। दो इंजीनियरों ने फरवरी 1944 के तीन पन्नों के मेमो में संग्रहीत प्रोग्राम की अवधारणा को प्रस्तुत किया। बाद में, सितंबर 1944 में, डॉ. जॉन वॉन न्यूमैन ने एनियाक परियोजना पर काम करना शुरू किया। 30 जून, 1945 को, वॉन न्यूमैन ने एडवैक पर एक रिपोर्ट का पहला मसौदा प्रकाशित किया, जिसमें कंप्यूटर की संरचनाओं को मानव मस्तिष्क की संरचनाओं के साथ जोड़ा गया था। डिजाइन को वॉन न्यूमैन आर्किटेक्चर के रूप में जाना जाता है।1949 में एडवैक और एडसैक कंप्यूटरों के निर्माण में वास्तुकला को एक साथ तैनात किया गया था।

आईबीएम प्रणाली /360 (1964) छह कंप्यूटरों की एक पंक्ति थी, जिनमें से प्रत्येक में एक ही निर्देश सेट था। आईबीएम प्रणाली /360 मॉडल 30 सबसे छोटा और कम से कम महंगा था। ग्राहक एक ही अनुप्रयोग प्रक्रिया सामग्री को अपग्रेड और बनाए रख सकते हैं। आईबीएम प्रणाली /360 मॉडल 75 सबसे प्रीमियम था। प्रत्येक प्रणाली /360 मॉडल में कंप्यूटर मल्टीटास्किंग मल्टीप्रोग्रामिंग दिखाई दी एक बार में यादृच्छिक पहुंच मेमोरी में कई प्रक्रिया (कंप्यूटिंग) है। जब एक प्रक्रिया इनपुट/आउटपुट की प्रतीक्षा कर रही थी, तो दूसरा गणना कर सकता था।

आईबीएम ने प्रत्येक मॉडल को पीएल/1 का उपयोग करके प्रोग्राम करने की योजना बनाई है। एक समिति का गठन किया गया था जिसमें COBOL, फोरट्रान और अल्गोल प्रोग्रामर सम्मलित थे। इसका उद्देश्य एक ऐसी लैंग्वेज विकसित करना था जो व्यापक, उपयोग करने में आसान, विस्तार योग्य हो, और कोबोल और फोरट्रान की जगह ले सके। परिणाम एक बड़ी और जटिल लैंग्वेज थी जिसे कम्पाइलर में लंबा समय लगा।

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

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

फेयरचाइल्ड सेमीकंडक्टर (1957) और इंटेल (1968) के सह-संस्थापक रॉबर्ट नोयस ने क्षेत्र प्रभाव ट्रांजिस्टर (1963) के अर्धचालक डिवाइस निर्माण को परिष्कृत करने के लिए एक प्रोद्योगिकीय सुधार प्राप्त किया है। लक्ष्य अर्धचालक जंक्शन की विद्युत प्रतिरोधकता और चालकता को परिवर्तित करती है। सबसे पहले, स्वाभाविक रूप से पाए जाने वाले सिलिकेट खनिजों को सीमेंस प्रक्रिया का उपयोग करके बहुवर्धक सिलिकॉन छड़ों में परिवर्तित किया जाता है। क्जोक्रॉसकी प्रक्रिया तब छड़ को एक मोनोक्रिस्टलाइन सिलिकॉन, बाउल (क्रिस्टल) में परिवर्तित करती है। क्रिस्टल को तब एक वेफर (इलेक्ट्रॉनिक्स) सब्सट्रेट (सामग्री विज्ञान) बनाने के लिए पतले कटा हुआ होता है।। फोटोलिथोग्राफी की प्लानर प्रक्रिया तब एक ध्रुवीय अवरोध, संधारित्र, डायोड और प्रतिरोधों को वेफर पर एकीकृत करती है, जो धातु ऑक्साइड सेमिकंडक्टर (एमओएस) ट्रांजिस्टर के एक आव्यूह का निर्माण करती है। एनएमओएस और पीएमओएस ट्रांजिस्टर का परिचय एनीसिलिकॉन, 4 नवंबर 2021 और ।5 फरवरी, 2022 को लिया गया। एमओएस ट्रांजिस्टर एकीकृत परिपथ चिप्स में प्राथमिक घटक के रूप में होते है।

मूल रूप से, एकीकृत परिपथ चिप्स ने विनिर्माण के समय अपना कार्य सेट किया था। 1960 के दशक के दौरान, विद्युत प्रवाह को नियंत्रित करने से सिर्फ रीड ऑनली मैमोरी (आरओएम) के डायोड आव्यूह को प्रोग्रामिंग करने के लिए माइग्रेट किया जाता है। आव्यूह फ़्यूज़ के दो आयामी सरणी से मिलता जुलता था। आव्यूह पर निर्देशों को एम्बेड करने की प्रक्रिया अनावश्यक कनेक्शनों को जलाने के लिए थी। बहुत सारे कनेक्शन फर्मवेयर प्रोग्रामर ने जलने की देखरेख के लिए एक और चिप पर एक कंप्यूटर प्रोग्राम लिखा। प्रोद्योगिकीय को प्रोग्रामेबल आरओएम के रूप में जाना जाने लगा। 1971 में, इंटेल संग्रहीत कंप्यूटर प्रोग्राम और इसे इंटेल 4004 माइक्रोप्रोसेसर का नाम दिया गया।

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

सैक स्टेट 8008
इंटेल 4004 (1971) एक 4- बिट माइक्रो प्रोसेसर था, जिसे बसीकॉम कैलकुलेटर को चलाने के लिए डिज़ाइन किया गया था।अपनी रिलीज़ होने के पांच महीने बाद, इंटेल ने इंटेल 8008, एक 8-बिट माइक्रोप्रोसेसर जारी किया। बिल पेंट्ज़ ने इंटेल 8008: द सैक स्टेट 8008 (1972) का उपयोग करके पहला माइक्रो कंप्यूटर बनाने के लिए सैक्रामेंटो स्टेट में एक टीम का नेतृत्व किया। इसका उद्देश्य मरीज के मेडिकल रिकॉर्ड को स्टोर करना था। कंप्यूटर ने मेमोरेक्स , 3- मेगाबाइट , हार्ड डिस्क ड्राइव को चलाने के लिए डिस्क ऑपरेटिंग प्रणाली का समर्थन किया। इसमें एक रंगीन डिस्प्ले और कीबोर्ड था जो एक ही कंसोल में पैक किया गया था। डिस्क ऑपरेटिंग सिस्टम को आईबीएम की बेसिक असेंबली लैंग्वेज (बीएएल) का उपयोग करके प्रोग्राम किया गया था। मेडिकल रिकॉर्ड अनुप्रयोग को मौलिक इंटरप्रेटर का उपयोग करके प्रोग्राम किया गया था। चूंकि, कंप्यूटर एक विकासवादी गतिरोध था क्योंकि यह बेहद महंगा था। इसके अतिरिक्त, इसे एक विशिष्ट उद्देश्य के लिए एक सार्वजनिक विश्वविद्यालय प्रयोगशाला में बनाया गया था। बहरहाल, परियोजना ने इंटेल 8080 (1974) निर्देश सेट आर्किटेक्चर के विकास में योगदान दिया।

x86 श्रृंखला
1978 में, आधुनिक सॉफ्टवेयर विकास का वातावरण तब प्रारंभ हुआ जब इंटेल ने इंटेल 8080 को इंटेल 8086 में अपग्रेड किया। इंटेल ने इंटेल 8086 को सस्ता इंटेल 8088 का निर्माण करने के लिए सरल बनाया। आईबीएम ने इंटेल 8088 को गले लगा लिया जब उन्होंने निजी कंप्यूटर मार्केट (1981) में प्रवेश किया। जैसे -जैसे व्यक्तिगत कंप्यूटरों के लिए उपभोक्ता मांग में वृद्धि हुई, वैसे -वैसे इंटेल का माइक्रोप्रोसेसर विकास हुआ। विकास के अनुक्रमण को x 86 के रूप में जाना जाता है। X86 असेंबली लैंग्वेज पिछड़ी-संगत मशीन निर्देशों का एक फॅमिली है। पहले माइक्रोप्रोसेसरों में बनाए गए मशीन निर्देशों को माइक्रोप्रोसेसर उन्नयन में बनाए रखा गया था। इसने उपभोक्ताओं को नए अनुप्रयोग सॉफ्टवेयर खरीदने के बिना नए कंप्यूटर खरीदने में सक्षम बनाया। निर्देशों की प्रमुख श्रेणियां इस प्रकार हैं
 * यादृच्छिक-एक्सेस मेमोरी में नंबर और स्ट्रिंग (कंप्यूटर विज्ञान) को सेट और एक्सेस करने के लिए मेमोरी निर्देश दिए जाते है।
 * पूर्णांक पर प्राथमिक अंकगणितीय संचालन करने के लिए पूर्णांक अंकगणितीय तर्क इकाई एएलयू के रूप में निर्देश होते है।
 * फ्लोटिंग प्वाइंट एएलयू वास्तविक संख्या पर प्राथमिक अंकगणितीय संचालन करने के लिए निर्देश दिए जाते है।
 * फलन के साथ मेमोरी और इंटरफ़ेस को आवंटित करने के लिए आवश्यक शब्दों को पुश और पॉप वर्ड कंप्यूटर आर्किटेक्चर के कॉल स्टैक निर्देशों को कॉल करते है।
 * एकल निर्देश, एकाधिक डेटा (एसआईएमडी) निर्देश गति बढ़ाने के लिए जब कई प्रोसेसर एक सरणी डेटा संरचना पर एक ही कलन विधि करने के लिए उपलब्ध होते हैं।

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

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

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

एक प्रोग्रामिंग लैंग्वेज टाइप्स कीवर्ड्स ,सिम्बल्स ,आइडेंटिफायर कंप्यूटर लैंग्वेज और नियमों का एक सेट के रूप में होता है, जिसके द्वारा प्रोग्रामर कंप्यूटर को निर्देशों का संचार कर सकते हैं। वे एक सिंटैक्स प्रोग्रामिंग लैंग्वेजओं नामक नियमों के एक सेट का पालन करते हैं।


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

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

प्रोग्रामिंग लैंग्वेज की जेनेरेशन्स
प्रोग्रामिंग लैंग्वेज का विकास तब प्रारंभ हुआ जब एडसैक (1949) ने अपने वॉन न्यूमैन आर्किटेक्चर में पहले संग्रहीत-प्रोग्राम कंप्यूटर का उपयोग किया था। प्रोग्रामिंग एडसैक पहली प्रोग्रामिंग लैंग्वेज जेनेरेशन्स के रूप में थी।


 * पहली जनरेशन की प्रोग्रामिंग लैंग्वेज मशीन लैंग्वेज के रूप है। मशीन लैंग्वेज को मशीन कोड नामक निर्देश संख्याओं का उपयोग करके निर्देश दर्ज करने के लिए प्रोग्रामर की आवश्यकता होती है। उदाहरण के लिए, पीडीपी-11 पर एडीडी ऑपरेशन का निर्देश संख्या 24576 है।
 * दूसरी जनरेशन की प्रोग्रामिंग लैंग्वेज असेंबली की लैंग्वेज होती है। असेंबली लैंग्वेज प्रोग्रामर को इंस्ट्रक्शन नंबर याद रखने के अतिरिक्त स्मृति सहायक निर्देशों का उपयोग करने की अनुमति देती है। एक असेम्बलर प्रत्येक असेम्बली लैंग्वेज स्मृति सहायक को उसकी मशीन लैंग्वेज नंबर में ट्रांसलेट करता है। उदाहरण के लिए, PDP-11 पर, ऑपरेशन 24576 को स्रोत कोड में एडीडी के रूप में संदर्भित किया जा सकता है। चार मौलिक अंकगणितीय संक्रियाओं में एडीडी, सब , एमयूएल , और डिव जैसे असेम्बली निर्देश होते हैं। कंप्यूटर में स्मृति कोशिकाओं को आरक्षित करने के लिए डीडब्ल्यू परिभाषित शब्द जैसे निर्देश भी होते हैं। तब एमओवी निर्देश रजिस्टरों और मेमोरी के बीच पूर्णांकों की प्रतिलिपि बना सकता है।


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


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

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

फोरट्रान
फोरट्रान 1958 को "आईबीएम गणितीय सूत्र अनुवाद प्रणाली" के रूप में अनावरण किया गया था। यह स्ट्रिंग हैंडलिंग सुविधाओं के बिना, वैज्ञानिक गणनाओं के लिए डिज़ाइन किया गया था। डेक्लेरेशन, भावों और कथनो के साथ,यह समर्थित है
 * सरणी डेटा संरचना के रूप में होती है।
 * सबरूटीनस के रूप में होती है।
 * डु लूप के रूप में होती है।

यह सफल हुआ क्योंकि,
 * प्रोग्रामिंग और डिबगिंग लागत कंप्यूटर चलाने की लागत से नीचे थी।
 * यह आईबीएम द्वारा समर्थित था।
 * उस समय अनुप्रयोग के लिये वैज्ञानिक उपलब्ध थे।

चूंकि, गैर आईबीएम विक्रेताओं ने भी फोरट्रान कंपाइलर लिखे, लेकिन एक सिंटेक्स के साथ जो संभवतः आईबीएम के कम्पाइलर को विफल कर देता है। अमेरिकी राष्ट्रीय मानक संस्थान (एएनएसआई) ने 1966 में पहला फोरट्रान मानक विकसित किया। 1978 में, फोरट्रान77, 1991 तक मानक बन गया। फोरट्रान 90 समर्थन करता है
 * रिकॉर्ड कंप्यूटर विज्ञान के रूप में होता है।
 * सरणियों के लिए सूचक कंप्यूटर प्रोग्रामिंग के रूप में होता है।

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

कोबोल के विकास को कसकर नियंत्रित किया गया था, इसलिए एएनएसआई मानकों की आवश्यकता के लिए बोलियाँ नहीं आईं। परिणामस्वरूप, यह 1974 तक 15 वर्षों के लिए नहीं बदला गया था। 1990 के दशक के संस्करण ने वस्तु उन्मुख कार्यकर्म की प्रकार परिणामी परिवर्तन किया गया था।

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

अल्गोल के प्रत्यक्ष जनरेशन में एक शाखा पर पास्कल (प्रोग्रामिंग लैंग्वेज ), मोडुला -2, एडीए प्रोग्रामिंग लैंग्वेज, डेल्फी (सॉफ्टवेयर) और ओबेरॉन (प्रोग्रामिंग लैंग्वेज ) सम्मलित हैं। एक अन्य शाखा पर C प्रोग्रामिंग लैंग्वेज , C ++ और Java प्रोग्रामिंग लैंग्वेज के रूप में है।

मूल
बेसिक (1964) का अर्थ है बिगिनर के ऑल पर्पस सिम्बोलिक इंस्ट्रक्शन कोड।यह उनके सभी छात्रों को सीखने के लिए डार्टमाउथ कॉलेज में विकसित किया गया था। यदि कोई छात्र अधिक शक्तिशाली लैंग्वेज का प्रयोग नहीं करता है, तो छात्र को अभी भी बेसिक याद रहेगा। 1970 के दशक के अंत में निर्मित माइक्रो कंप्यूटर में एक मौलिक इंटरप्रेटर स्थापित किया गया था। जैसे -जैसे माइक्रो कंप्यूटर उद्योग बढ़ता गया, वैसे -वैसे लैंग्वेज भी बढ़ती गई।

बेसिक ने इंटरैक्टिव सत्र का नेतृत्व किया। इसने अपने वातावरण के भीतर ऑपरेटिंग प्रणाली कमांड की प्रस्तुत की थी
 * 'नए' कमांड ने एक खाली स्लेट बनाया।
 * कथनो का तुरंत मूल्यांकन किया गया।
 * कथनो को एक लाइन नंबर के साथ उन्हें पूर्ववर्ती करके प्रोग्राम किया जा सकता है।
 * 'सूची' कमांड ने प्रोग्राम प्रदर्शित किया।
 * 'रन' कमांड ने प्रोग्राम को निष्पादित किया।

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

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

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


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


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


 * दूसरी ओर, के अंदर चर घोषणाएँ, अन्य कार्य, या भीतर     ब्लॉक (प्रोग्रामिंग) स्थानीय चर हैं। स्थानीय चर में पैरामीटर (कंप्यूटर प्रोग्रामिंग) और तर्क चर भी सम्मलित हैं। पैरामीटर चर फलन परिलैंग्वेजओं के कोष्ठक के भीतर संलग्न हैं। वे फलन के लिए एक इंटरफ़ेस (कंप्यूटिंग) प्रदान करते हैं।


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


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


 * स्थानीय चर बिना डेक्लेरेशन किए गए  औपचारिक पैरामीटर चर सहित उपसर्ग, स्वचालित चर कहा जाता है और स्टैक में संग्रहीत होते है। वे फलन या ब्लॉक के अंदर दिखाई देते हैं और फलन या ब्लॉक से बाहर निकलने पर अपना घेरा खो देते हैं।


 * मैनुअल मेमोरी मैनेजमेंट क्षेत्र स्टैक के नीचे स्थित है। यह नीचे से ऊपर तक पॉपुलेटेड है। ऑपरेटिंग प्रणाली एक हीप पॉइंटर और आवंटित मेमोरी ब्लॉकों की सूची का उपयोग करके ढेर का प्रबंधन करता है। स्टैक की प्रकार ढेर चर के एड्रेसस रनटाइम के समय सेट किए जाते हैं। मेमोरी त्रुटि से बाहर तब होता है जब हीप पॉइंटर और स्टैक पॉइंटर मिलते हैं।


 * सी प्रदान करता है  लाइब्रेरी फंक्शन टू सी गतिशील मेमोरी एल्लोकेट हीप मेमोरी के रूप में होती है। डेटा के साथ ढेर को पॉप्युलेट करना एक अतिरिक्त कॉपी फलन है।ढेर में संग्रहीत चर आर्थिक रूप से पॉइंटर्स का उपयोग करके कार्यों के लिए पारित होते हैं। पॉइंटर्स के बिना, डेटा के पूरे ब्लॉक को स्टैक के माध्यम से फलन को पारित करना होता है।

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

ऑब्जेक्ट-ओरिएंटेड शब्दजाल में, अमूर्त डेटाटाइप्स को क्लास प्रोग्रामिंग) कहा जाता है। चूंकि, क्लास सिर्फ एक परिलैंग्वेज है;कोई मेमोरी आवंटित नहीं की जाती है। जब मेमोरी को किसी क्लास को आवंटित किया जाता है, तो इसे वस्तु विज्ञान (कंप्यूटर विज्ञान) कहा जाता है।

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

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

सी ++ (1985) को मूल रूप से सी क्लासेस कहा जाता था। यह सी प्रोग्रामिंग लैंग्वेज का विस्तार करने के लिए डिज़ाइन किया गया था। सी लैंग्वेज शुरुआत की ऑब्जेक्ट-ओरिएंटेड सुविधाओं को जोड़कर सी की क्षमताओं का विस्तार करने के लिए डिज़ाइन किया गया था।

एक ऑब्जेक्ट-ओरिएंटेड मॉड्यूल दो फ़ाइलों से बना होता है। परिलैंग्वेज फ़ाइल को हेडर फ़ाइल कहा जाता है। यहां एक साधारण स्कूल अनुप्रयोग में ग्रेड क्लास के लिए सी ++ हेडर फ़ाइल दी गई है:

// grade.h

// ---

// Used to allow multiple source files to include

// this header file without duplication errors. // --
 * 1) ifndef GRADE_H
 * 2) define GRADE_H

class GRADE { public:

// This is the constructor operation.

// -- GRADE ( const char letter );

// This is a class variable. // -

char letter;

// This is a member operation.

// --- int grade_numeric( const char letter );

// This is a class variable.

// -

int numeric; };


 * 1) endif

कंस्ट्रक्टर ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग ऑपरेशन एक ऐसा फलन है जिसका नाम क्लास के नाम के समान है। इसे तब निष्पादित किया जाता है जब कॉलिंग ऑपरेशन नए स्टेटमेंट को निष्पादित करता है।

एक मॉड्यूल की अन्य फ़ाइल स्रोत कोड के रूप में होती है। यहां एक साधारण स्कूल अनुप्रयोग में ग्रेड क्लास के लिए C ++ स्रोत फ़ाइल होती है

// grade.cpp

// -
 * 1) include "grade.h"

GRADE::GRADE( const char letter )

// Reference the object using the keyword 'this'.

// --

this->letter = letter,

// This is Temporal Cohesion // -

this->numeric = grade_numeric( letter ); }

int GRADE::grade_numeric( const char letter )

{

if ( ( letter == 'A' || letter == 'a' ) )

return 4;

else

if ( ( letter == 'B' || letter == 'b' ) )

return 3;

else

if ( ( letter == 'C' || letter == 'c' ) )

return 2;

else

if ( ( letter == 'D' || letter == 'd' ) )

return 1;

else

if ( ( letter == 'F' || letter == 'f' ) )

return 0;

else

return -1;

}

यहां एक साधारण स्कूल अनुप्रयोग में व्यक्ति क्लास के लिए C ++ हेडर फ़ाइल के रूप में होती है

// person.h

//


 * 1) ifndef PERSON_H


 * 1) define PERSON_H

class PERSON {

public:

PERSON ( const char *name );

const char *name;

};


 * 1) endif

यहां एक साधारण स्कूल अनुप्रयोग में व्यक्ति क्लास के लिए C ++ स्रोत फ़ाइल के रूप में होती है

// person.cpp

// --


 * 1) include "person.h"

PERSON::PERSON ( const char *name )

{

this->name = name;

}

यहां एक साधारण स्कूल अनुप्रयोग में छात्र क्लास के लिए C ++ हेडर फ़ाइल के रूप में होती है

// student.h // -


 * 1) ifndef STUDENT_H


 * 1) define STUDENT_H


 * 1) include "person.h"


 * 1) include "grade.h"

// A STUDENT is a subset of PERSON.

// class STUDENT : public PERSON{

public:

STUDENT ( const char *name )

GRADE *grade;

};


 * 1) endif

यहां एक साधारण स्कूल अनुप्रयोग में छात्र क्लास के लिए C ++ स्रोत फ़ाइल के रूप में होती है

// student.cpp

// ---


 * 1) include "student.h"


 * 1) include "person.h"

STUDENT::STUDENT ( const char *name ):

// Execute the constructor of the PERSON superclass.

// - PERSON( name )

{

// Nothing else to do. // ---

}

यहाँ डेमॉंस्ट्रेशन के लिए एक ड्राइवर प्रोग्राम है

// student_dvr.cpp

// ---
 * 1) include


 * 1) include "student.h"

int main( void )

{

STUDENT *student = new STUDENT( "The Student" );

student->grade = new GRADE( 'a' );

std::cout

// Notice student inherits PERSON's name

<< student->name

<< ": Numeric grade = "

<< student->grade->numeric

<< "\n"; return 0;

}

यहाँ सब कुछ संकलित करने के लिए एक मेकफाइल होती है


 * 1) makefile

# all: student_dvr

clean:

rm student_dvr *.o

student_dvr: student_dvr.cpp grade.o student.o person.o

c++ student_dvr.cpp grade.o student.o person.o -o student_dvr

grade.o: grade.cpp grade.h

c++ -c grade.cpp

student.o: student.cpp student.h

c++ -c student.cpp

person.o: person.cpp person.h c++ -c person.cpp

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

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

व्यंजक 10 * x को फलन times_10 द्वारा मानों की श्रेणी में मैप किया जाता है। एक मान 20 होता है। यह तब होता है जब x 2 होता है। इसलिए, फलन का अनुप्रयोग गणितीय रूप से इस प्रकार लिखा जाता है:

एक कार्यात्मक लैंग्वेज कम्पाइलर इस मूल्य को एक चर में संग्रहीत नहीं करता है। इस के अतिरिक्त, यह प्रोग्राम गणक को कॉलिंग फलन पर वापस सेट करने से पहले कंप्यूटर के कॉल स्टैक पर मान को आगे बढ़ाता है। कॉलिंग फलन तब स्टैक से मान पॉप करता है।

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

एक कार्यात्मक प्रोग्राम को एक ही ड्राइवर फलन के बाद आदिम कार्यों के एक सेट के साथ विकसित किया जाता है। स्निपेट (प्रोग्रामिंग) पर विचार करते है,



प्रिमिटिव तथा  ड्राइवर फलन सबसे बड़े और सबसे छोटे निष्पादन के बीच का अंतर होता है

आउटपुट 6 के रूप में होता है।

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

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

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

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

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

एमएल
एमएल प्रोग्रामिंग लैंग्वेज 1973 का अर्थ मेटा लैंग्वेज है। एमएल यह सुनिश्चित करने के लिए जांच करता है कि केवल एक ही प्रकार के डेटा की एक दूसरे के साथ तुलना की जाती है। उदाहरण के लिए, इस फलन में एक इनपुट पैरामीटर एक पूर्णांक के रूप में लौटाता है

एमएल लिस्प की प्रकार कोष्ठक-एक्ट्रिक नहीं है। निम्नलिखित का एक अनुप्रयोग के रूप में होता है :

Times_10 2

यह "20 : int". लौटाता है। परिणाम और डेटाटाइप दोनों रीटर्न करता है।

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

प्रोलोग
प्रोलॉग (1972) तर्क में प्रोग्रामिंग के लिए है। इसे प्राकृतिक लैंग्वेजओं को संसाधित करने के लिए डिज़ाइन किया गया था। एक प्रस्तावना प्रोग्राम के निर्माण ब्लॉक ऑब्जेक्ट और अन्य वस्तुओं के लिए उनके संबंध हैं। वस्तुओं को उनके बारे में सही तथ्य बताते हुए बनाई जाती हैं।

सेट (गणित) के तथ्य ऑब्जेक्ट्स को सेट करने के लिए तैयार किए जाते हैं। सिंटेक्स है विशेषण तथ्य का उपयोग करके बनते हैं कोष्ठक के अंदर कई वस्तुओं का उपयोग करके संबंध बनाए जाते हैं। उदाहरण इस प्रकार होते है  तथा  । सभी तथ्यों और संबंधों को दर्ज करने के बाद, एक प्रश्न पूछा जा सकता है
 * Cat is an animal.
 * Mouse is an animal.
 * Tom is a cat.
 * Jerry is a mouse.
 * Tom is a cat.
 * Jerry is a mouse.
 * Jerry is a mouse.
 * Cat is big.
 * Mouse is small.
 * Mouse is small.
 * Mouse eats cheese.
 * Big animals eat small animals.
 * Big animals eat small animals.
 * Will Tom eat Jerry?

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

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

यहां एक साधारण स्कूल अनुप्रयोग में ग्रेड अमूर्त डेटाटाइप के लिए एक सी प्रोग्रामिंग लैंग्वेज हेडर फ़ाइल है

/* grade.h */

/* --- */

/* Used to allow multiple source files to include */

/* this header file without duplication errors. */

/* -- */


 * 1) ifndef GRADE_H
 * 2) define GRADE_H

typedef struct

{

char letter;

} GRADE;

/* Constructor */

/* --- */

GRADE *grade_new( char letter );

int grade_numeric( char letter );


 * 1) endif

ग्रेड_न्यू फलन सी कन्स्ट्रक्टर ऑपरेशन के समान कलन विधि करता है।

यहाँ एक साधारण स्कूल अनुप्रयोग में ग्रेड सार डेटाटाइप के लिए C प्रोग्रामिंग लैंग्वेज स्रोत फ़ाइल है

E> फलन C ++ कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) ऑपरेशन के समान कलन विधि करता है।

यहां एक साधारण स्कूल अनुप्रयोग में ग्रेड अमूर्त डेटाटाइप के लिए एक सी प्रोग्रामिंग लैंग्वेज स्रोत कोड है:

/* grade.c */

/* --- */
 * 1) include "grade.h"

GRADE *grade_new( char letter )

{

GRADE *grade;

/* Allocate heap memory */

/* */

if ( ! ( grade = calloc( 1, sizeof( GRADE ) ) ) )

{

fprintf(stderr,

"ERROR in %s/%s/%d: calloc returned empty.\n",

__FILE__,

__FUNCTION__,

__LINE__ );

exit( 1 );

}

grade->letter = letter;

return grade;

}

int grade_numeric( char letter )

{

if ( ( letter == 'A' || letter == 'a' ) )

return 4;

else if ( ( letter == 'B' || letter == 'b' ) )

return 3;

else

if ( ( letter == 'C' || letter == 'c' ) )

return 2;

else

if ( ( letter == 'D' || letter == 'd' ) )

return 1;

else

if ( ( letter == 'F' || letter == 'f' ) )

return 0;

else

return -1;

}

कंस्ट्रक्टर में, फलन  का उपयोग किया जाता है   के अतिरिक्त क्योंकि प्रत्येक मेमोरी सेल को शून्य पर सेट किया जाता है।

यहां एक साधारण स्कूल अनुप्रयोग में व्यक्ति अमूर्त डेटाटाइप के लिए एक सी प्रोग्रामिंग लैंग्वेज हेडर फाइल के रूप में होती है

/* person.h */

/* */


 * 1) ifndef PERSON_H
 * 2) define PERSON_H

typedef struct

{

char *name; } PERSON;

/* Constructor */

/* --- */

PERSON *person_new( char *name );


 * 1) endif

यहां एक साधारण स्कूल अनुप्रयोग में व्यक्ति अमूर्त डेटाटाइप के लिए एक सी प्रोग्रामिंग लैंग्वेज स्रोत फ़ाइल के रूप में होती है

/* person.c */

/* */


 * 1) include "person.h"

PERSON *person_new( char *name )

{

PERSON *person;

if ( ! ( person = calloc( 1, sizeof( PERSON ) ) ) )

{

fprintf(stderr,

"ERROR in %s/%s/%d: calloc returned empty.\n",

__FILE__,

__FUNCTION__,

__LINE__ );

exit( 1 );

}

person->name = name; return person;

}

यहां एक साधारण स्कूल अनुप्रयोग में छात्र सार डेटाटाइप के लिए एक सी प्रोग्रामिंग लैंग्वेज हेडर फ़ाइल के रूप में होती है

/* student.h */

/* - */


 * 1) ifndef STUDENT_H


 * 1) define STUDENT_H


 * 1) include "person.h"


 * 1) include "grade.h"

typedef struct

{

/* A STUDENT is a subset of PERSON. */

/* */

PERSON *person;

GRADE *grade;

} STUDENT;

/* Constructor */

/* --- */

STUDENT *student_new( char *name );


 * 1) endif

यहां एक साधारण स्कूल अनुप्रयोग में छात्र सार डेटाटाइप के लिए एक सी प्रोग्रामिंग लैंग्वेज स्रोत फ़ाइल के रूप में होती है

/* student.c */

/* - */


 * 1) include "student.h"


 * 1) include "person.h"

STUDENT *student_new( char *name )

{

STUDENT *student;

if ( ! ( student = calloc( 1, sizeof( STUDENT ) ) ) )

{

fprintf(stderr,

"ERROR in %s/%s/%d: calloc returned empty.\n",

__FILE__,

__FUNCTION__,

__LINE__ );

exit( 1 );

}

/* Execute the constructor of the PERSON superclass. */

/* - */

student->person = person_new( name );

return student;

}

यहाँ डेमोन्सट्रेशन के लिए एक ड्राइवर प्रोग्राम है

/* student_dvr.c */

/* - */


 * 1) include 


 * 1) include "student.h"

int main( void )

{

STUDENT *student = student_new( "The Student" );

student->grade = grade_new( 'a' );

printf( "%s: Numeric grade = %d\n",

/* Whereas a subset exists, inheritance does not. */

student->person->name,

/* Functional programming is executing functions just-in-time (JIT) */

grade_numeric( student->grade->letter ) );

return 0;

}

यहाँ सब कुछ संकलित करने के लिए एक मेकफाइल के रूप में होती है


 * 1) makefile

#

all: student_dvr

clean:

rm student_dvr *.o

student_dvr: student_dvr.c grade.o student.o person.o

gcc student_dvr.c grade.o student.o person.o -o student_dvr

grade.o: grade.c grade.h

gcc -c grade.c

student.o: student.c student.h

gcc -c student.c

person.o: person.c person.h

gcc -c person.c

ऑब्जेक्ट-ओरिएंटेड ऑब्जेक्ट्स बनाने की औपचारिक रणनीति इस प्रकार होती है
 * वस्तुओं को पहचानें सबसे अधिक संभावना कि ये संज्ञा होती है।
 * प्रत्येक वस्तु की विशेषताओं को पहचानें और ऑब्जेक्ट का वर्णन करने में क्या मदद करता है
 * प्रत्येक वस्तु के कार्यों को पहचानें और सबसे अधिक संभावना है कि ये क्रियाओ के रूप में होती है।
 * वस्तुओं को वस्तु से वस्तु तक पहचानें है और सबसे अधिक संभावना है कि ये क्रियाओ के रूप में होती है।

उदाहरण के लिए,
 * एक व्यक्ति एक नाम से पहचाना जाने वाला मानव है।
 * एक ग्रेड एक पत्र द्वारा पहचानी गई एक उपलब्धि है।
 * एक छात्र एक व्यक्ति है जो एक ग्रेड कमाता है।

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

किसी लैंग्वेज के सिंटेक्स को औपचारिक रूप से उत्पादन नियमों को सूचीबद्ध करके वर्णित किया गया है। जबकि एक प्राकृतिक लैंग्वेज का सिंटेक्स बेहद जटिल रूप में होते है, अंग्रेजी लैंग्वेज के एक सबसेट में यह उत्पादन नियम सूची हो सकती है, बोल्ड-फेस के शब्दों को गैर-टर्मिनल के रूप में जाना जाता है।' सिंगल कोट्स' के शब्दों को टर्मिनलों के रूप में जाना जाता है।
 * 1) एक वाक्य एक संज्ञा-वाक्यांश से बना होता है, जिसके बाद क्रिया-वाक्यांश होता है
 * 2) एक संज्ञा-वाक्यांश एक लेख से बना है, जिसके बाद एक विशेषण के बाद एक संज्ञा है
 * 3) एक क्रिया-वाक्यांश एक क्रिया से बना होता है, जिसके बाद संज्ञा-वाक्यांश होता है
 * 4) एक लेख 'द' है;
 * 5) एक विशेषण 'बड़ा' है या
 * 6) एक विशेषण 'छोटा' है
 * 7) एक संज्ञा 'बिल्ली' है या
 * 8) एक संज्ञा 'माउस' है
 * 9) एक क्रिया 'ईट' है

इस उत्पादन नियम सूची से, प्रतिस्थापन की एक श्रृंखला का उपयोग करके पूर्ण वाक्यों का गठन किया जा सकता है। प्रक्रिया गैर-टर्मिनल को एक वैध गैर-टर्मिनल या एक वैध टर्मिनल के साथ बदलने के लिए है। प्रतिस्थापन प्रक्रिया तब तक दोहराई जाती है जब तक कि केवल टर्मिनल शेष न रह जाएं। एक मान्य वाक्य है
 * 'वाक्य'
 * 'संज्ञा-वाक्यांश क्रिया-वाक्यांश
 * 'अनुच्छेद' 'विशेषण' 'संज्ञा' 'क्रिया-वाक्य'
 * 'विशेषण' 'संज्ञा' 'क्रिया-वाक्य'
 * बड़ा 'संज्ञा' 'क्रिया-वाक्य'
 * बड़ी बिल्ली 'क्रिया-वाक्यांश'
 * द बिग कैट 'क्रिया' 'संज्ञा-वाक्यांश'
 * बड़ी बिल्ली 'संज्ञा-वाक्यांश' खाती है
 * द बिग कैट 'लेख' 'विशेषण' 'संज्ञा'
 * बड़ी बिल्ली 'विशेषण' 'संज्ञा' खाती है
 * बड़ी बिल्ली छोटी 'संज्ञा' खाती है
 * बड़ी बिल्ली छोटे माउस को खाता है

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

एक उत्पादन नियम लिस्टिंग विधि को बैकस नूर फॉर्म (बीएनएफ) कहा जाता है।

बीएनएफ एक लैंग्वेज के सिंटेक्स का वर्णन करता है और स्वयं एक सिंटेक्स होता है। यह पुनरावर्ती परिलैंग्वेज एक धातु -लैंग्वेज का एक उदाहरण है। मेटा-लैंग्वेज । बीएनएफ के सिंटेक्स में सम्मलित हैं
 * जब एक गैर-टर्मिनल अपने अधिकार के लिए एक [n] से बना है। यह तब अनुवाद करता है जब एक टर्मिनल अपने अधिकार के लिए होता है।
 * जो अनुवाद करता है या।
 * तथा  जो गैर-टर्मिनल को घेरते हैं।

बीएनएफ का उपयोग करते हुए, अंग्रेजी लैंग्वेज के एक सबसेट में यह उत्पादन नियम लिस्टिंग हो सकती है:



 ::=

 ::=  ::= the

::= cat | mouse ::= eats

बीएनएफ का उपयोग करते हुए, एक हस्ताक्षरित पूर्णांक में उत्पादन नियम सूची है

 ::=





पुनरावर्ती उत्पादन नियम पर ध्यान दें:



यह संभावनाओं की एक अनंत संख्या के लिए अनुमति देता है। इसलिए, अंकों की संख्या की एक सीमा का वर्णन करने के लिए एक अर्थ आवश्यक रूप में होता है।

उत्पादन नियमों में अग्रणी शून्य संभावना पर ध्यान दें:





इसलिए, यह वर्णन करने के लिए एक अर्थ आवश्यक है कि अग्रणी शून्य को नजरअंदाज करने की आवश्यकता है।

शब्दार्थ का वर्णन करने के लिए दो औपचारिक विधि उपलब्ध हैं। वे निरंकुश शब्दार्थ और स्वयंसिद्ध शब्दार्थ हैं।

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

डेमोन्सट्रेशन उद्देश्य
प्रणाली एनालिस्ट का उद्देश्य सही व्यक्ति को सही समय पर सही जानकारी देना है। इस उद्देश्य को प्राप्त करने के लिए महत्वपूर्ण कारक हैं


 * 1) आउटपुट की गुणवत्ता क्या है यह आउटपुट निर्णय लेने के लिए उपयोगी रूप में होते है?
 * 2) आउटपुट की त्रुटिहीनता क्या यह सही स्थिति को दर्शाता है?
 * 3) आउटपुट का प्रारूप क्या आउटपुट आसानी से समझा जाता है?
 * 4) आउटपुट की गति वास्तविक समय में ग्राहक के साथ संवाद करते समय समय संवेदनशील जानकारी महत्वपूर्ण रूप में होती है।

लागत उद्देश्य
डेमोन्सट्रेशन उद्देश्यों को प्राप्त करना सभी लागतों के साथ संतुलित होना चाहिए, जिसमें सम्मलित हैं
 * 1) विकास लागत के रूप में होती है।
 * 2) विशिष्टता लागत एक पुन: प्रयोज्य प्रणाली महंगी हो सकती है। चूंकि, इसे एक सीमित-उपयोग प्रणाली पर पसंद किया जा सकता है।
 * 3) हार्डवेयर की लागत के रूप में होती है।
 * 4) परिचालन लागत के रूप में होती है।

तंत्र विकास जीवन चक्र को लागू करने से एक्सीओम को कम किया जाता है पश्चात इस प्रक्रिया में एक त्रुटि का एड्रेस चला है, इसे सही करने के लिए अधिक महंगा है।

वॉटरफॉल मॉडल
वॉटरफॉल मॉडल एक प्रणाली विकास प्रक्रिया का कार्यान्वयन है। जैसा कि वॉटरफॉल लेबल का अर्थ है, मूल चरण एक दूसरे को ओवरलैप करते हैं
 * 1) जांच चरण अंतर्निहित समस्या को समझना है।
 * 2) विश्लेषण चरण संभावित समाधानों को समझने के लिए है।
 * 3) डिजाइन चरण सबसे अच्छे समाधान की योजना बनाना है।
 * 4) कार्यान्वयन चरण सबसे अच्छा समाधान प्रोग्राम करना है।
 * 5) रखरखाव चरण प्रणाली के पूरे जीवन में रहता है। नियत किए जाने के बाद सिस्टम में परिवर्तन आवश्यक हो सकते हैं। दोष उपलब्ध हो सकते हैं, जिसमें विनिर्देश दोष, डिजाइन दोष या कोडिंग दोष के रूप में सम्मलित होते है। सुधार आवश्यक हो सकता है।बदलते परिवेश पर प्रतिक्रिया करने के लिए अनुकूलन आवश्यक हो सकता है।

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

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

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

मॉड्यूल का नाम पहले इसके कार्य से प्राप्त किया जाना चाहिए, फिर इसके संदर्भ से किया जाना चाहिए इसका तर्क नाम का हिस्सा नहीं होना चाहिए। उदाहरण के लिए,

या  उपयुक्त मॉड्यूल नाम हैं।चूंकि,   is not.

एक मॉड्यूल के भीतर बातचीत की डिग्री इसका स्तर (कंप्यूटर विज्ञान) का स्तर है। सामंजस्य एक मॉड्यूल के नाम और उसके कार्य के बीच संबंध का एक निर्णय के रूप में होता है। मॉड्यूल के बीच कथनो की डिग्री युग्मन (कंप्यूटर विज्ञान) का स्तर है। युग्मन एक मॉड्यूल के संदर्भ और किए जा रहे तत्वों के बीच संबंध का एक निर्णय होता है।

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

युग्मन
युग्मन के स्तर सबसे खराब से सबसे अच्छे हैं:


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

डेटा प्रवाह विश्लेषण
फ़ाइल: सैंडविच डेटा प्रवाह आरेख। पीडीएफ | अंगूठे | एक नमूना फलन -स्तरीय डेटा-फ्लो आरेख। डेटा प्रवाह विश्लेषण एक डिजाइन विधि है जिसका उपयोग कार्यात्मक सामंजस्य और डेटा युग्मन के मॉड्यूल को प्राप्त करने के लिए किया जाता है। विधि का इनपुट एक डेटा-प्रवाह आरेख है।एक डेटा-प्रवाह आरेख मॉड्यूल का प्रतिनिधित्व करने वाले अंडाकार का एक सेट है।प्रत्येक मॉड्यूल का नाम इसके अंडाकार के अंदर प्रदर्शित होता है।मॉड्यूल निष्पादन योग्य स्तर या फलन स्तर पर हो सकते हैं।

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

कार्यात्मक श्रेणियां
कंप्यूटर प्रोग्राम को कार्यात्मक लाइनों के साथ वर्गीकृत किया जा सकता है। मुख्य कार्यात्मक श्रेणियां अनुप्रयोग सॉफ्टवेयर और प्रणाली सॉफ्ट्वेयर के रूप में होती है। प्रणाली सॉफ्टवेयर में ऑपरेटिंग प्रणाली सम्मलित होती है, जो कंप्यूटर हार्डवेयर को अनुप्रयोग सॉफ़्टवेयर के साथ जोड़ता है। ऑपरेटिंग प्रणाली का उद्देश्य एक ऐसा वातावरण प्रदान करना है जहां अनुप्रयोग सॉफ्टवेयर सुविधाजनक और कुशल विधि से निष्पादित होता है। अनुप्रयोग सॉफ्टवेयर और प्रणाली सॉफ्टवेयर दोनों उपयोगिता प्रोग्राम निष्पादित करते हैं। हार्डवेयर स्तर पर, एक माइक्रोकोड सेंट्रल प्रोसेसिंग यूनिट में परिपथ को नियंत्रित करता है।

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

एंटरप्राइज़ अनुप्रयोग को घर में एक प्रकार के मालिकाना सॉफ्टवेयर के रूप में विकसित किया जाता है। वैकल्पिक रूप से, उन्हें वाणिज्यिक ऑफ शेल्फ के रूप में खरीदा जाता है। ऑफ शेल्फ सॉफ्टवेयर कस्टम सॉफ़्टवेयर प्रदान करने के लिए खरीदे गए सॉफ़्टवेयर को संशोधित किया जाता है। यदि आवेदन को अनुकूलित किया जाता है, तो या तो कंपनी के संसाधनों का उपयोग किया जाता है या संसाधनों को आउटसोर्स किया जाता है। आउटसोर्स सॉफ्टवेयर विकास निर्देशित सॉफ्टवेयर विक्रेता या तृतीय-पक्ष डेवलपर से हो सकता है।

मालिकाना सॉफ्टवेयर के लाभ सुविधाएँ हैं और रिपोर्ट विनिर्देश के लिए त्रुटिहीन हो सकती हैं। प्रबंधन विकास प्रक्रिया में भी सम्मलित हो सकती है और नियंत्रण के स्तर को प्रस्तुत कर सकता है। प्रबंधन किसी प्रतियोगी की नई पहल का मुकाबला करने या ग्राहक या विक्रेता की आवश्यकता को लागू करने का निर्णय ले सकता है। एक विलय या अधिग्रहण से उद्यम सॉफ्टवेयर परिवर्तनों की आवश्यकता होती है। मालिकाना सॉफ्टवेयर के नुकसान समय और संसाधन लागत व्यापक रूप में हो सकते हैं। इसके अतिरिक्त, सुविधाओं और डेमोन्सट्रेशन से संबंधित हानि कम हो सकती हैं।

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

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

ऑपरेटिंग प्रणाली
एक ऑपरेटिंग प्रणाली निम्न-स्तरीय सॉफ़्टवेयर के रूप में होता है, जो कंप्यूटर के मौलिक कार्यों का समर्थन करता है, जैसे कि शेड्यूलिंग (कंप्यूटिंग) प्रक्रिया (कंप्यूटिंग) और बाह्य उपकरणों को नियंत्रित करना।

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

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

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


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

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

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

उपयोगिता प्रोग्रामो में संपीड़न प्रोग्राम सम्मलित होते हैं, इसलिए डेटा फ़ाइलों को कम डिस्क स्थान पर संग्रहीत किया जाता है। संपीड़ित प्रोग्राम भी समय बचाते हैं जब डेटा फ़ाइलों को नेटवर्क पर प्रेषित किया जाता है। उपयोगिता प्रोग्राम डेटा सेट को सॉर्ट और मर्ज कर सकते हैं। उपयोगिता प्रोग्राम कंप्यूटर वायरस का एड्रेस लगाते हैं।

माइक्रोकोड प्रोग्राम


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

एक लॉजिक गेट एक छोटा क्षेत्र-प्रभाव ट्रांजिस्टर के रूप में होता है, जो दो संकेतों को चालू या बंद कर सकता है।
 * एक ट्रांजिस्टर होने से इन्वर्टर लॉजिक गेट बनता है।
 * श्रृंखला में दो ट्रांजिस्टर को जोड़ने से नंद गेट बनता है।
 * समानांतर में दो ट्रांजिस्टर को जोड़ना नोर गेट को रूप होता है।
 * एक नॉट गेट को एक नंद गेट से जोड़ना से एंड बनता है।
 * नॉट गेट को एक नौर गेट से कनेक्ट करना और गेट बनता है।

ये पांच गेट्स बूलियन बीजगणित के बिल्डिंग में ब्लॉक बनाते हैं, कंप्यूटर के डिजिटल लॉजिक फलन के रूप में होते है।

माइक्रोकोड निर्देश हैं असेंबली लैंग्वेज #स्मृति सहायक प्रोग्रामर बाइनरी बीजगणित में उन्हें बनाने के अतिरिक्त डिजिटल लॉजिक फलन को निष्पादित करने के लिए उपयोग कर सकते हैं।वे एक सेंट्रल प्रोसेसिंग यूनिट में संग्रहीत हैं | सेंट्रल प्रोसेसिंग यूनिट (सीपीयू) नियंत्रण स्टोर।

ये हार्डवेयर-स्तर के निर्देश पूरे डेटापथ में डेटा को स्थानांतरित करते हैं।

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

अंतिम चरण हार्डवेयर मॉड्यूल के गेट्स के सेट का उपयोग करके निर्देश को निष्पादित करना है।

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

माइक्रोकोड निर्देश सीपीयू और मेमोरी कंट्रोलर के बीच डेटा को स्थानांतरित करते हैं। मेमोरी कंट्रोलर माइक्रोकोड निर्देश दो प्रोसेसर रजिस्टर में हेरफेर करते हैं। मेमोरी एड्रेस रजिस्टर का उपयोग प्रत्येक मेमोरी सेल के एड्रेसस तक पहुंचने के लिए किया जाता है। मेमोरी बफर रजिस्टर का उपयोग प्रत्येक सेल की सामग्री को सेट और पढ़ने के लिए किया जाता है।

माइक्रोकोड निर्देश सीपीयू और कई बस (कम्प्यूटिंग) के बीच डेटा को स्थानांतरित करते हैं। डिस्क नियंत्रक हार्ड डिस्क ड्राइव से लिखता और पढ़ता है। पीसीआई एक्सप्रेस के माध्यम से सीपीयू और अन्य कार्यात्मक इकाइयों के बीच डेटा भी स्थानांतरित किया जाता है। परिधीय घटक इंटरकनेक्ट एक्सप्रेस बस के रूप में होता है।

संदर्भ
==