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

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

यदि निष्पादन योग्य निष्पादन के लिए अनुरोध किया जाता है, तो ऑपरेटिंग सिस्टम   लोडर (कम्प्यूटिंग)  इसे यादृच्छिक-एक्सेस मेमोरी में शामिल करता है और एक प्रक्रिया (कंप्यूटिंग) शुरू करता है। REF नाम = OSC-CH4-P98> केंद्रीय प्रसंस्करण इकाई जल्द ही इस प्रक्रिया के लिए स्विच करेगी ताकि यह निर्देश चक्र कर सके। REF नाम = SCO-CH2-P32>

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

उदाहरण कंप्यूटर प्रोग्राम
हैलो, दुनिया!कार्यक्रम का उपयोग किसी भाषा के मूल वाक्यविन्यास  (प्रोग्रामिंग भाषाओं) को चित्रित करने के लिए किया जाता है। मूल दुभाषिया  (1964) का सिंटैक्स जानबूझकर भाषा को सीखने के लिए आसान बनाने के लिए सीमित था। उदाहरण के लिए, चर (कंप्यूटर विज्ञान) का उपयोग करने से पहले  घोषणा  (कंप्यूटर प्रोग्रामिंग) नहीं हैं। इसके अलावा, चर को स्वचालित रूप से शून्य पर आरंभ किया जाता है। यहां एक उदाहरण कंप्यूटर प्रोग्राम है, मूल में, संख्याओं की एक सूची को  औसत  करने के लिए:  10 इनपुट औसत से कितने नंबर?, ए 20 के लिए i = 1 से ए 30 इनपुट एंटर नंबर:, बी 40 लेट सी = सी + बी 50 अगला मैं 60 लेट डी = सी/ए 70 प्रिंट औसत है, डी 80 अंत

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

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

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

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

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

संग्रहीत-कार्यक्रम कंप्यूटर
डोरियों में प्लग करने और स्विच को मोड़ने के बजाय, एक संग्रहीत प्रोग्राम कंप्यूटर  अपने निर्देशों को मेमोरी में लोड करता है जैसे कि यह अपने डेटा को मेमोरी में लोड करता है। नतीजतन, कंप्यूटर को जल्दी से प्रोग्राम किया जा सकता है और बहुत तेज गति से गणना कर सकता है। जे। प्रेपर एकर्ट और  जॉन माउचली  ने एनियाक का निर्माण किया।दोनों इंजीनियरों ने फरवरी 1944 में तीन-पृष्ठ के मेमो में संग्रहीत-कार्यक्रम अवधारणा को पेश किया। बाद में, सितंबर 1944 में, जॉन वॉन न्यूमैन | डॉ।जॉन वॉन न्यूमैन ने ENIAC प्रोजेक्ट पर काम करना शुरू किया।30 जून, 1945 को, वॉन न्यूमैन ने  EDVAC पर एक रिपोर्ट का पहला मसौदा  प्रकाशित किया, जिसने मानव मस्तिष्क की संरचनाओं के साथ कंप्यूटर की संरचनाओं को बराबर किया। डिजाइन को  वॉन न्यूमैन आर्किटेक्चर  के रूप में जाना जाता है।वास्तुकला को एक साथ 1949 में  EDVAC  और  EDSAC  कंप्यूटर के निर्माण में तैनात किया गया था। आईबीएम सिस्टम/360 (1964) छह कंप्यूटरों की एक पंक्ति थी, जिनमें से प्रत्येक में एक ही निर्देश सेट था।IBM सिस्टम/360 मॉडल 30 सबसे छोटा और कम से कम महंगा था।ग्राहक एक ही अनुप्रयोग प्रक्रिया सामग्री  को अपग्रेड और बनाए रख सकते हैं। आईबीएम सिस्टम/360 मॉडल 75 सबसे प्रीमियम था।प्रत्येक सिस्टम/360 मॉडल में कंप्यूटर मल्टीटास्किंग#मल्टीप्रोग्रामिंग दिखाई दी एक बार में यादृच्छिक-पहुंच मेमोरी में कई प्रक्रिया (कंप्यूटिंग) है।जब एक प्रक्रिया इनपुट/आउटपुट की प्रतीक्षा कर रही थी, तो दूसरा गणना कर सकता था।

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


 * पहली पीढ़ी की प्रोग्रामिंग भाषा मशीन भाषा है। मशीन भाषा को मशीन कोड नामक निर्देश संख्याओं का उपयोग करके निर्देश दर्ज करने के लिए प्रोग्रामर की आवश्यकता होती है।उदाहरण के लिए, PDP-11  पर ADD ऑपरेशन का निर्देश संख्या 24576 है।
 * दूसरी पीढ़ी की प्रोग्रामिंग भाषा सभा की भाषा  है। असेंबली भाषा प्रोग्रामर को निर्देश संख्याओं को याद करने के बजाय असेंबली भाषा#mnemonics निर्देशों का उपयोग करने की अनुमति देती है।एक असेंबली लैंग्वेज#असेंबलर प्रत्येक असेंबली लैंग्वेज mnemonic को अपनी मशीन लैंग्वेज नंबर में अनुवाद करता है।उदाहरण के लिए, PDP-11 पर, ऑपरेशन 24576 को स्रोत कोड में ADD के रूप में संदर्भित किया जा सकता है। चार बुनियादी अंकगणितीय संचालन में Add, Sub, Mul और Div जैसे असेंबली निर्देश हैं। कंप्यूटर में यादृच्छिक-पहुंच मेमोरी कोशिकाओं को आरक्षित करने के लिए DW (परिभाषित वर्ड (कंप्यूटर आर्किटेक्चर)) जैसे निर्देश भी हैं।तब MOV निर्देश  प्रक्रमक रजिस्टर  और मेमोरी के बीच  पूर्णांक  को कॉपी कर सकता है।


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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


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


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


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


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


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


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

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

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

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

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

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

 // ग्रेड। // ---

// कई स्रोत फ़ाइलों को शामिल करने की अनुमति देने के लिए उपयोग किया जाता है // यह हेडर फ़ाइल दोहराव त्रुटियों के बिना। // --
 * 1) ifndef ग्रेड_एच
 * 2) define ग्रेड_ह

क्लास ग्रेड { जनता: // यह कंस्ट्रक्टर ऑपरेशन है। // --   ग्रेड (कॉन्स्ट चार पत्र);

// यह एक वर्ग चर है। // -   चार पत्र;

// यह एक सदस्य ऑपरेशन है। // ---   int ग्रेड_नुमेरिक (const char letter);

// यह एक वर्ग चर है। // -   इंट न्यूमेरिक; };
 * 1) अगर अंत

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

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

 // ग्रेड.सीपीपी // -
 * 1) include ग्रेड।

ग्रेड :: ग्रेड (const char पत्र) {   // कीवर्ड 'यह' का उपयोग करके ऑब्जेक्ट का संदर्भ लें। // --   यह-> पत्र = पत्र;

// यह अस्थायी सामंजस्य है // -   यह-> संख्यात्मक = ग्रेड_नुमेरिक (पत्र); }

int ग्रेड :: ग्रेड_नुमेरिक (const char लेटर) {   if ((पत्र == 'a' || अक्षर == 'a')) 4 रिटर्न; वरना if ((पत्र == 'b' || अक्षर == 'b')) वापसी 3; वरना if ((पत्र == 'c' || अक्षर == 'c')) 2 रिटर्न; वरना if ((पत्र == 'd' || अक्षर == 'd')) लौटें 1; वरना if ((पत्र == 'f' || अक्षर == 'f')) रिटर्न 0; वरना वापसी -1; }

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

 // person.h //
 * 1) ifndef person_h
 * 2) define person_h

वर्ग व्यक्ति { जनता: व्यक्ति (const char *नाम); const char *नाम; };
 * 1) अगर अंत

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

 // person.cpp // --
 * 1) include व्यक्ति।

व्यक्ति :: व्यक्ति (const char *नाम) {   यह-> नाम = नाम; }

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

 // छात्र। // -
 * 1) ifndef Student_h
 * 2) define Student_h


 * 1) include व्यक्ति।
 * 2) include ग्रेड।

// एक छात्र व्यक्ति का सबसेट है। // कक्षा का छात्र: सार्वजनिक व्यक्ति { जनता: छात्र (const char *नाम); ग्रेड *ग्रेड; };
 * 1) अगर अंत

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

 // student.cpp // ---
 * 1) छात्र।
 * 2) include व्यक्ति।

छात्र :: छात्र (const char *नाम): // सुपरक्लास व्यक्ति के कंस्ट्रक्टर को निष्पादित करें। // -    व्यक्ति (नाम) {   // और कुछ करने को नहीं। // --- }

यहाँ प्रदर्शन के लिए एक ड्राइवर कार्यक्रम है:

 // student_dvr.cpp // ---
 * 1) include
 * 2) छात्र।

int मुख्य (शून्य) {   छात्र *छात्र = नया छात्र (छात्र); छात्र-> ग्रेड = नया ग्रेड ('ए');

std :: cout // नोटिस छात्र को व्यक्ति का नाम विरासत में मिला है << छात्र-> नाम <<: संख्यात्मक ग्रेड = << छात्र-> ग्रेड-> न्यूमेरिक << \ n; रिटर्न 0; }

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

 सभी: student_dvr
 * 1) मेकफाइल

स्वच्छ: RM Student_dvr *.o

Student_dvr: Student_dvr.cpp ग्रेड। छात्र। C ++ Student_dvr.cpp ग्रेड। Student.o Person.o -o छात्र_डीवीआर

ग्रेड.ओ: ग्रेड.सीपीपी ग्रेड। C ++ -C ग्रेड.सीपीपी

Student.o: Student.cpp Student.h   C ++ -C Student.cpp

person.o: person.cpp person.h   C ++ -C व्यक्ति.सीपीपी

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

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

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

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

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



आदिम हैं  तथा  ।ड्राइवर फ़ंक्शन है  ।निष्पादित करना:

आउटपुट 6 होगा।

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

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

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

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

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

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

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

Times_10 2

यह 20: इंट लौटाता है।(परिणाम और डेटाटाइप दोनों वापस आ गए हैं।)

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

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

सेट (गणित) के तथ्य ऑब्जेक्ट्स को सेट करने के लिए तैयार किए जाते हैं।वाक्यविन्यास है
 * बिल्ली एक जानवर है।


 * माउस एक जानवर है।


 * टॉम एक बिल्ली है।


 * जेरी एक माउस है।

विशेषण तथ्य का उपयोग करके बनते हैं
 * बिल्ली बड़ी है।


 * माउस छोटा है।

कोष्ठक के अंदर कई वस्तुओं का उपयोग करके संबंध बनाए जाते हैं।हमारे उदाहरण में हमारे पास है  तथा  ।
 * माउस पनीर खाता है।


 * बड़े जानवर छोटे जानवर खाते हैं।

सभी तथ्यों और रिश्तों को दर्ज करने के बाद, फिर एक प्रश्न पूछा जा सकता है:
 * क्या टॉम जेरी खाएगा?

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

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

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

/ * ग्रेड.एच */ / * --- */

/ * कई स्रोत फ़ाइलों को शामिल करने की अनुमति देने के लिए उपयोग किया जाता है */ /* डुप्लीकेशन त्रुटियों के बिना यह हेडर फ़ाइल।* / * -- */
 * 1) ifndef ग्रेड_एच
 * 2) define ग्रेड_ह

टाइपेडफ संरचना {   चार पत्र; } श्रेणी;

/ * कंस्ट्रक्टर */ / * --- */ ग्रेड *ग्रेड_न्यू (चार पत्र);

int ग्रेड_नुमेरिक (चार पत्र); E> फ़ंक्शन C ++ कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) ऑपरेशन के समान एल्गोरिथ्म करता है।
 * 1) अगर अंत

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

/ * ग्रेड.सी */ / * --- */
 * 1) include ग्रेड।

ग्रेड *ग्रेड_न्यू (चार पत्र) {   ग्रेड *ग्रेड;

/ * हीप मेमोरी आवंटित करें */ / * *//    if (ग्रेड = कॉलोक (1, sizeof (ग्रेड))))) {       fprintf (stderr,                 %S/%s/%d में त्रुटि: Calloc  खाली लौटा। \ n,                __फ़ाइल__,                __समारोह__,                __रेखा__ ); निकास (1); }

ग्रेड-> पत्र = पत्र; रिटर्न ग्रेड; }

इंट ग्रेड_नुमेरिक (चार पत्र) {   if ((पत्र == 'a' || अक्षर == 'a')) 4 रिटर्न; वरना if ((पत्र == 'b' || अक्षर == 'b')) वापसी 3; वरना if ((पत्र == 'c' || अक्षर == 'c')) 2 रिटर्न; वरना if ((पत्र == 'd' || अक्षर == 'd')) लौटें 1; वरना if ((पत्र == 'f' || अक्षर == 'f')) रिटर्न 0; वरना वापसी -1; }

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

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

 / * person.h */ / * *//
 * 1) ifndef person_h
 * 2) define person_h

टाइपेडफ संरचना {   चार नाम; } व्यक्ति;

/ * कंस्ट्रक्टर */ / * --- */ व्यक्ति *person_new (char *नाम);
 * 1) अगर अंत

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

 / * person.c */ / * *//
 * 1) include व्यक्ति।

व्यक्ति *person_new (char *नाम) {   व्यक्ति *व्यक्ति;

if ((व्यक्ति = Calloc (1, sizeof (व्यक्ति)))))   {        fprintf (stderr, %S/%s/%d में त्रुटि: Calloc खाली लौटा। \ n,                __फ़ाइल__, __समारोह__, __रेखा__ );       निकास (1);    }

व्यक्ति-> नाम = नाम; वापसी व्यक्ति; }

यहां एक साधारण स्कूल एप्लिकेशन में छात्र सार डेटाटाइप के लिए एक सी प्रोग्रामिंग भाषा हेडर फ़ाइल है:

/ * छात्र। एच */ / * - */
 * 1) ifndef Student_h
 * 2) define Student_h


 * 1) include व्यक्ति।
 * 2) include ग्रेड।

टाइपेडफ संरचना {   /* एक छात्र व्यक्ति का सबसेट है। * / * */    व्यक्ति *व्यक्ति;

ग्रेड *ग्रेड; } छात्र;

/ * कंस्ट्रक्टर */ / * --- */ छात्र *छात्र_न्यू (चार *नाम);
 * 1) अगर अंत

यहां एक साधारण स्कूल एप्लिकेशन में छात्र सार डेटाटाइप के लिए एक सी प्रोग्रामिंग भाषा स्रोत फ़ाइल है:

 / * छात्र। सी */ / * - */
 * 1) छात्र।
 * 2) include व्यक्ति।

छात्र *छात्र_न्यू (चार *नाम) {   छात्र *छात्र;

if ((छात्र = caloc (1, sizeof (छात्र)))))   {        fprintf (stderr, %S/%s/%d में त्रुटि: Calloc खाली लौटा। \ n,                __फ़ाइल__, __समारोह__, __रेखा__ );       निकास (1);    }

/* व्यक्ति सुपरक्लास के कंस्ट्रक्टर को निष्पादित करें। * /* -- - */   छात्र-> व्यक्ति = person_new (नाम); छात्र लौटें; }

यहाँ प्रदर्शन के लिए एक ड्राइवर कार्यक्रम है:

/ * student_dvr.c */ / * - */
 * 1) include 
 * 2) छात्र।

int मुख्य (शून्य) {   छात्र *छात्र = छात्र_न्यू (छात्र); छात्र-> ग्रेड = ग्रेड_न्यू ('ए');

प्रिंटफ ( %s: संख्यात्मक ग्रेड = %d \ n,           /* जबकि एक सबसेट मौजूद है, विरासत नहीं है। *            छात्र-> व्यक्ति-> नाम,            / * कार्यात्मक प्रोग्रामिंग फ़ंक्शंस को सिर्फ-इन-टाइम (JIT) */////            ग्रेड_नुमेरिक (छात्र-> ग्रेड-> पत्र));

रिटर्न 0; }

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

 सभी: student_dvr
 * 1) मेकफाइल

स्वच्छ: RM Student_dvr *.o

Student_dvr: Student_dvr.c ग्रेड। छात्र। GCC Student_dvr.c ग्रेड.ओ.ओ.ओ.ओ.ओ.ई.एस.

ग्रेड.ओ: ग्रेड। सी। ग्रेड। जीसीसी -सी ग्रेड

Student.o: Student.c Student.h   GCC -C Student.c

person.o: person.c person.h   GCC -C PERSON.C

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

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

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

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

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

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

एक उत्पादन नियम लिस्टिंग विधि को बैकस -नूर फॉर्म (बीएनएफ) कहा जाता है। REF नाम = असतत-CH10-P623> BNF एक भाषा के वाक्यविन्यास का वर्णन करता है और स्वयं एक वाक्यविन्यास होता है।यह पुनरावर्ती परिभाषा एक धातु -भाषा का एक उदाहरण है। मेटा-भाषा। BNF के वाक्यविन्यास में शामिल हैं:
 * जब एक गैर-टर्मिनल अपने अधिकार के लिए एक [n] से बना है।यह तब अनुवाद करता है जब एक टर्मिनल अपने अधिकार के लिए होता है।
 * जो अनुवाद करता है या।
 * तथा  जो गैर-टर्मिनल को घेरते हैं।

BNF का उपयोग करते हुए, अंग्रेजी भाषा के एक सबसेट में यह  उत्पादन नियम  लिस्टिंग हो सकती है:  <वाक्य> :: =  <क्रिया-phrase> <noun-phrase> :: = <अनुच्छेद> <विशेषण> <verb-phrase> :: = <क्रिया> <noun- phrase> <अनुच्छेद> :: = <विशेषण> :: = बड़ा |छोटा <संज्ञा> :: = कैट |चूहा <क्रिया> :: = खाती है

BNF का उपयोग करते हुए, एक हस्ताक्षरित- पूर्णांक (कंप्यूटर विज्ञान) में  उत्पादन नियम  सूची है: <syntaxhighighlight lang = bnf> <हस्ताक्षरित-पूर्णांक> :: = <साइन> <पूर्णांक> <साइन> :: = + |- <पूर्णांक> :: = <अंक> |<अंक> <पूर्णांक> <अंक> :: = 0 |1 |2 |3 |4 |५ |6 |7 |8 |9

पुनरावर्ती उत्पादन नियम पर ध्यान दें: <syntaxhighighlight lang = bnf> <पूर्णांक> :: = <अंक> |<अंक> <पूर्णांक> यह संभावनाओं की एक अनंत संख्या के लिए अनुमति देता है।इसलिए, अंकों की संख्या की एक सीमा का वर्णन करने के लिए एक अर्थ आवश्यक है।

उत्पादन नियमों में अग्रणी शून्य संभावना पर ध्यान दें: <syntaxhighighlight lang = bnf> <पूर्णांक> :: = <अंक> |<अंक> <पूर्णांक> <अंक> :: = 0 |1 |2 |3 |4 |५ |6 |7 |8 |9 इसलिए, यह वर्णन करने के लिए एक अर्थ आवश्यक है कि अग्रणी शून्य को नजरअंदाज करने की आवश्यकता है।

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

संदर्भ
==