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

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

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

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

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

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

10 INPUT "How many numbers to average?", A

20 FOR I = 1 TO A 30 INPUT "Enter number:", B

40 LET C = C + B 50 NEXT I

60 LET D = C/A

70 PRINT "The average is", D

80 END

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

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

विश्लेषणात्मक इंजन
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, FORTRAN और  ALGOL प्रोग्रामर सम्मलित थे। इसका उद्देश्य एक ऐसी लैंग्वेज  विकसित करना था जो व्यापक, उपयोग करने में आसान, विस्तार योग्य हो, और  कोबोल और  फोरट्रान की जगह ले सके। परिणाम एक बड़ी और जटिल लैंग्वेज  थी जिसे संकलक में लंबा समय लगा।

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) ने अपने वॉन न्यूमैन आर्किटेक्चर में पहले संग्रहीत-प्रोग्राम कंप्यूटर का उपयोग किया। प्रोग्रामिंग एडसैक पहली प्रोग्रामिंग लैंग्वेज  पीढ़ियों में थी।


 * पहली पीढ़ी की प्रोग्रामिंग लैंग्वेज मशीन लैंग्वेज  है। मशीन लैंग्वेज  को मशीन कोड नामक निर्देश संख्याओं का उपयोग करके निर्देश दर्ज करने के लिए प्रोग्रामर की आवश्यकता होती है।उदाहरण के लिए,  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>  :: = <अनुच्छेद> <विशेषण> <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 प्रोग्रामर बाइनरी बीजगणित में उन्हें बनाने के अतिरिक्त  डिजिटल लॉजिक फलन को निष्पादित करने के लिए उपयोग कर सकते हैं।वे एक सेंट्रल प्रोसेसिंग यूनिट  में संग्रहीत हैं | सेंट्रल प्रोसेसिंग यूनिट  (सीपीयू) नियंत्रण स्टोर। ये हार्डवेयर-स्तर के निर्देश पूरे डेटापथ में डेटा को स्थानांतरित करते हैं।

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

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

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

संदर्भ
==