कोड पुन: उपयोग: Difference between revisions

From Vigyanwiki
(Created page with "{{short description|Use of existing software to build new software}} सॉफ़्टवेयर विकास (और सामान्य रूप से कं...")
 
(text)
Line 1: Line 1:
{{short description|Use of existing software to build new software}}
{{short description|Use of existing software to build new software}}
[[सॉफ़्टवेयर]] विकास (और सामान्य रूप से [[कंप्यूटर प्रोग्रामिंग]]) में, कोड पुन: उपयोग, जिसे सॉफ़्टवेयर पुन: उपयोग भी कहा जाता है, नए सॉफ़्टवेयर के निर्माण के लिए मौजूदा सॉफ़्टवेयर या सॉफ़्टवेयर ज्ञान का उपयोग होता है,<ref>{{cite journal |last=Frakes |first=W.B. |author2=Kyo Kang |s2cid=14561810 |date=July 2005 |title=Software Reuse Research: Status and Future |journal=IEEE Transactions on Software Engineering |volume=31 |issue=7 |pages=529–536 |doi=10.1109/TSE.2005.85 |citeseerx=10.1.1.75.635 }}</ref><ref name="Reddy2011" >{{Cite book|last=Reddy|first=Martin|url=https://www.worldcat.org/oclc/704559821|title=API design for C++|date=2011|publisher=Morgan Kaufmann|isbn=978-0-12-385004-1|location=Boston|oclc=704559821}}</ref>{{Rp|page=7}} पुन: प्रयोज्यता का पालन करना।
[[सॉफ़्टवेयर]] विकास (और सामान्य रूप से क्रमानुदेशन ([[कंप्यूटर प्रोग्रामिंग|कंप्यूटर प्रोग्रामिंग)]]) में, '''कोड पुन: उपयोग''', जिसे सॉफ़्टवेयर पुन: उपयोग भी कहा जाता है, नए सॉफ़्टवेयर के निर्माण के लिए मौजूदा सॉफ़्टवेयर या सॉफ़्टवेयर ज्ञान का उपयोग,<ref>{{cite journal |last=Frakes |first=W.B. |author2=Kyo Kang |s2cid=14561810 |date=July 2005 |title=Software Reuse Research: Status and Future |journal=IEEE Transactions on Software Engineering |volume=31 |issue=7 |pages=529–536 |doi=10.1109/TSE.2005.85 |citeseerx=10.1.1.75.635 }}</ref><ref name="Reddy2011" >{{Cite book|last=Reddy|first=Martin|url=https://www.worldcat.org/oclc/704559821|title=API design for C++|date=2011|publisher=Morgan Kaufmann|isbn=978-0-12-385004-1|location=Boston|oclc=704559821}}</ref>{{Rp|page=7}} पुन: प्रयोज्यता का पालन करना होता है।


चुने गए [[प्रोग्रामिंग भाषा]] की जटिलता के आधार पर कोड का पुन: उपयोग विभिन्न तरीकों से प्राप्त किया जा सकता है और निम्न स्तर के दृष्टिकोण जैसे कोड कट, कॉपी और पेस्ट | कॉपी-पेस्टिंग (उदाहरण के लिए [[स्निपेट (प्रोग्रामिंग)]] के माध्यम से),<ref>{{Cite journal|last1=Selaolo|first1=Karabo|last2=Hlomani|first2=Hlomani|date=2016|title=Towards An Algorithms Ontology Cluster: for Modular Code Reuse and Polyglot Programming|url=https://www.researchgate.net/publication/305144699|journal=Advances in Computer Science|volume=5|pages=63|via=Researchgate}}</ref> सरल कार्य ([[प्रक्रिया (कंप्यूटर विज्ञान)]] या [[सबरूटीन]]्स) या वस्तु का एक गुच्छा (कंप्यूटर विज्ञान) या सबरूटीन [[मॉड्यूलर प्रोग्रामिंग]] (जैसे [[पुस्तकालय (कम्प्यूटिंग)]]) में व्यवस्थित<ref>{{Cite web|title=4. Code Reuse: Functions and Modules - Head First Python, 2nd Edition [Book]|url=https://www.oreilly.com/library/view/head-first-python/9781491919521/ch04.html|access-date=2022-01-26|website=www.oreilly.com|language=en}}</ref>{{r|Reddy2011|page=7|}} या कस्टम [[नाम स्थान]], और [[पैकेज प्रबंधक]], फ्रेमवर्क (कंप्यूटर साइंस) या [[सॉफ्टवेयर सूट]] उच्च-स्तरों में।
चुनी गई [[प्रोग्रामिंग भाषा]] की जटिलता के आधार पर पीसीकोड का पुन: उपयोग अलग-अलग तरीकों से किया जा सकता है और कोड कॉपी-पेस्टिंग (जैसे [[स्निपेट (प्रोग्रामिंग)]] के माध्यम से),<ref>{{Cite journal|last1=Selaolo|first1=Karabo|last2=Hlomani|first2=Hlomani|date=2016|title=Towards An Algorithms Ontology Cluster: for Modular Code Reuse and Polyglot Programming|url=https://www.researchgate.net/publication/305144699|journal=Advances in Computer Science|volume=5|pages=63|via=Researchgate}}</ref> सरल कार्य ([[प्रक्रिया (कंप्यूटर विज्ञान)]] या [[सबरूटीन|सबरूटीन्स]])या एक समूह जैसे निचले स्तर के दृष्टिकोण से लेकर होता है। वस्तुओं या अभिलक्षक को [[मॉड्यूलर प्रोग्रामिंग]] (जैसे [[पुस्तकालय (कम्प्यूटिंग)]]<ref>{{Cite web|title=4. Code Reuse: Functions and Modules - Head First Python, 2nd Edition [Book]|url=https://www.oreilly.com/library/view/head-first-python/9781491919521/ch04.html|access-date=2022-01-26|website=www.oreilly.com|language=en}}</ref>{{r|Reddy2011|page=7|}} या कस्टम [[नाम स्थान]], और [[पैकेज प्रबंधक]], फ्रेमवर्क (कंप्यूटर साइंस) या [[सॉफ्टवेयर सूट]] उच्च-स्तरों में व्यवस्थित किया गया है।।
 
कोड का पुन: उपयोग निर्भरता का अर्थ है जो सॉफ़्टवेयर रखरखाव को कठिन बना सकता है। कम से कम एक अध्ययन में पाया गया कि कोड का पुन: उपयोग [[तकनीकी ऋण]] को कम करता है।<ref>{{Cite journal|last1=Feitosa|first1=Daniel|last2=Ampatzoglou|first2=Apostolos|last3=Gkortzis|first3=Antonios|last4=Bibi|first4=Stamatia|last5=Chatzigeorgiou|first5=Alexander|date=September 2020|title=CODE reuse in practice: Benefiting or harming technical debt|url=https://linkinghub.elsevier.com/retrieve/pii/S0164121220300960|journal=Journal of Systems and Software|language=en|volume=167|pages=110618|doi=10.1016/j.jss.2020.110618|s2cid=219502749}}</ref>


कोड पुन: उपयोग निर्भरता का तात्पर्य है जो कोड रखरखाव को कठिन बना सकता है। कम से कम एक अध्ययन में पाया गया कि कोड का पुन: उपयोग [[तकनीकी ऋण]] को कम करता है।<ref>{{Cite journal|last1=Feitosa|first1=Daniel|last2=Ampatzoglou|first2=Apostolos|last3=Gkortzis|first3=Antonios|last4=Bibi|first4=Stamatia|last5=Chatzigeorgiou|first5=Alexander|date=September 2020|title=CODE reuse in practice: Benefiting or harming technical debt|url=https://linkinghub.elsevier.com/retrieve/pii/S0164121220300960|journal=Journal of Systems and Software|language=en|volume=167|pages=110618|doi=10.1016/j.jss.2020.110618|s2cid=219502749}}</ref>
== सिंहावलोकन ==
प्रोग्रामिंग के शुरुआती दिनों से एड हॉक कोड पुन: उपयोग का अभ्यास किया गया है। प्रोग्रामर ने हमेशा कोड, टेम्प्लेट, अभिलक्षक और प्रक्रियाओं के अनुभागों का पुन: उपयोग किया है। सॉफ्टवेयर इंजीनियरिंग में अध्ययन के मान्यता प्राप्त क्षेत्र के रूप में सॉफ्टवेयर का पुन: उपयोग, हालांकि, केवल 1968 से शुरू हुआ जब [[बेल लैब्स]] के [[डगलस मैक्लॉयय]] ने सॉफ्टवेयर उद्योग को पुन: प्रयोज्य घटकों पर आधारित करने का प्रस्ताव दिया।


== सिंहावलोकन ==
कोड पुन: उपयोग का उद्देश्य समय और संसाधनों को बचाना है और सॉफ्टवेयर उत्पाद विकास प्रक्रिया के भीतर किसी न किसी रूप में पहले से ही बनाई गई संपदा का लाभ उठाकर [[अतिरेक (सूचना सिद्धांत)]] को कम करना है।<ref>{{cite web|author1=Lombard Hill Group|title=What Is Software Reuse?|url=http://lombardhill.com/what_reuse.htm|website=lombardhill.com|publisher=Lombard Hill Group|accessdate=22 October 2014|archive-date=23 January 2019|archive-url=https://web.archive.org/web/20190123223128/http://lombardhill.com/What_Reuse.htm|url-status=dead}}</ref> पुन: उपयोग में मुख्य विचार यह है कि एक समय में लिखे गए [[कंप्यूटर प्रोग्राम]] के कुछ हिस्सों को बाद में लिखे गए अन्य प्रोग्राम के निर्माण में इस्तेमाल किया जा सकता है या इस्तेमाल किया जाना चाहिए।
{{more citations needed section|date=April 2015}}
कंप्यूटर प्रोग्रामिंग के शुरुआती दिनों से तदर्थ कोड पुन: उपयोग का अभ्यास किया गया है। प्रोग्रामर ने हमेशा कोड, टेम्प्लेट, फ़ंक्शंस और प्रक्रियाओं के अनुभागों का पुन: उपयोग किया है। सॉफ्टवेयर इंजीनियरिंग में अध्ययन के एक मान्यता प्राप्त क्षेत्र के रूप में सॉफ्टवेयर का पुन: उपयोग, हालांकि, केवल 1968 से शुरू होता है जब [[बेल लैब्स]] के [[डगलस मैक्लॉयय]] ने सॉफ्टवेयर उद्योग को पुन: प्रयोज्य घटकों पर आधारित करने का प्रस्ताव दिया था।


कोड पुन: उपयोग का उद्देश्य सॉफ्टवेयर उत्पाद विकास प्रक्रिया के भीतर पहले से ही किसी न किसी रूप में बनाई गई संपत्ति का लाभ उठाकर समय और संसाधनों को बचाना और [[अतिरेक (सूचना सिद्धांत)]] को कम करना है।<ref>{{cite web|author1=Lombard Hill Group|title=What Is Software Reuse?|url=http://lombardhill.com/what_reuse.htm|website=lombardhill.com|publisher=Lombard Hill Group|accessdate=22 October 2014|archive-date=23 January 2019|archive-url=https://web.archive.org/web/20190123223128/http://lombardhill.com/What_Reuse.htm|url-status=dead}}</ref> पुन: उपयोग में मुख्य विचार यह है कि एक समय में लिखे गए [[कंप्यूटर प्रोग्राम]] के कुछ हिस्सों को बाद में लिखे गए अन्य कार्यक्रमों के निर्माण में इस्तेमाल किया जा सकता है या इस्तेमाल किया जाना चाहिए।
कोड का पुन: उपयोग पुन: प्रयोज्य संपदा के अलग से बनाए गए संस्करण के निर्माण का अर्थ हो सकता है। जबकि कोड पुन: उपयोग के लिए चुना गया सबसे आम संसाधन है, विकास चक्र के दौरान उत्पन्न अन्य संपदा पुन: उपयोग के अवसर प्रदान कर सकती हैं: सॉफ्टवेयर घटक, परीक्षण सूट, डिजाइन, प्रलेखन, और इसी तरह के अवसर प्रदान करती हैं।<ref>{{cite web|author1=Lombard Hill Group|title=What Is Software Reuse?|url=http://lombardhill.com/what_reuse.htm|accessdate=22 October 2014|archive-date=23 January 2019|archive-url=https://web.archive.org/web/20190123223128/http://lombardhill.com/What_Reuse.htm|url-status=dead}}</ref>


कोड का पुन: उपयोग पुन: प्रयोज्य संपत्तियों के एक अलग से बनाए गए संस्करण के निर्माण का अर्थ हो सकता है। जबकि कोड पुन: उपयोग के लिए चुना गया सबसे आम संसाधन है, विकास चक्र के दौरान उत्पन्न अन्य संपत्तियाँ पुन: उपयोग के अवसर प्रदान कर सकती हैं: सॉफ़्टवेयर घटक, परीक्षण सूट, डिज़ाइन, दस्तावेज़ीकरण, और इसी तरह।<ref>{{cite web|author1=Lombard Hill Group|title=What Is Software Reuse?|url=http://lombardhill.com/what_reuse.htm|accessdate=22 October 2014|archive-date=23 January 2019|archive-url=https://web.archive.org/web/20190123223128/http://lombardhill.com/What_Reuse.htm|url-status=dead}}</ref>
सॉफ़्टवेयर लाइब्रेरी कोड पुन: उपयोग का अच्छा उदाहरण है। प्रोग्रामर आंतरिक सार बनाने का निर्णय ले सकते हैं ताकि उनके प्रोग्राम के कुछ हिस्सों का पुन: उपयोग किया जा सके, या अपने स्वयं के उपयोग के लिए कस्टम लाइब्रेरी बना सकते है। कुछ विशेषताएँ जो सॉफ़्टवेयर को अधिक आसानी से पुन: प्रयोज्य बनाती हैं, वे हैं [[प्रतिरूपकता (प्रोग्रामिंग)]], लूस कपलिंग, उच्च [[सामंजस्य (कंप्यूटर विज्ञान)]], सूचना छिपाना और चिंताओं को अलग करना है।
लाइब्रेरी (कंप्यूटिंग) कोड पुन: उपयोग का एक अच्छा उदाहरण है। प्रोग्रामर आंतरिक सार बनाने का निर्णय ले सकते हैं ताकि उनके कार्यक्रम के कुछ हिस्सों का पुन: उपयोग किया जा सके, या अपने स्वयं के उपयोग के लिए कस्टम लाइब्रेरी बना सकें। कुछ विशेषताएँ जो सॉफ़्टवेयर को अधिक आसानी से पुन: प्रयोज्य बनाती हैं, वे हैं [[प्रतिरूपकता (प्रोग्रामिंग)]], ढीला युग्मन, उच्च [[सामंजस्य (कंप्यूटर विज्ञान)]], सूचना छिपाना और चिंताओं को अलग करना।


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


अगले संस्करण के लिए एक प्रारंभिक बिंदु के रूप में एक मौजूदा कार्यक्रम के पूर्व संस्करण का उपयोग करने का सामान्य अभ्यास भी कोड पुन: उपयोग का एक रूप है।
अगले संस्करण के लिए प्रारंभिक बिंदु के रूप में मौजूदा प्रोग्राम के पूर्व संस्करण का उपयोग करने का सामान्य अभ्यास भी कोड पुन: उपयोग का रूप है।


कुछ तथाकथित कोड पुन: उपयोग में किसी मौजूदा प्रोग्राम से कुछ या सभी कोड को नए प्रोग्राम में कॉपी करना शामिल है। जबकि संगठन इस दृष्टिकोण के साथ एक नए उत्पाद के लिए बाजार लाभ के लिए समय का एहसास कर सकते हैं, वे बाद में [[कट और पेस्ट प्रोग्रामिंग]] के कारण समान [[कोड दोहराव]] की कई समस्याओं से परेशान हो सकते हैं।
कुछ तथाकथित कोड "पुन: उपयोग" में किसी मौजूदा प्रोग्राम से कुछ या सभी कोड को नए में कॉपी करना शामिल है। जबकि संगठन इस दृष्टिकोण के साथ नए उत्पाद के लिए बाजार लाभ के लिए समय का एहसास कर सकते हैं, वे बाद में [[कट और पेस्ट प्रोग्रामिंग]] के कारण समान [[कोड दोहराव]] की कई समस्याओं से परेशान हो सकते हैं।


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


एक अन्य, नया साधन सॉफ्टवेयर [[स्रोत कोड पीढ़ी]] का उपयोग करना है, ऐसे प्रोग्राम जो उपयोगकर्ताओं द्वारा चुने गए मापदंडों के एक सेट के आधार पर एक निश्चित प्रकार के नए प्रोग्राम बना सकते हैं। ऐसी प्रणालियों के बारे में अध्ययन के क्षेत्र [[जनरेटिव प्रोग्रामिंग]] और [[मेटाप्रोग्रामिंग]] हैं।
एक अन्य, नया साधन सॉफ्टवेयर [[स्रोत कोड पीढ़ी|"जेनरेटर"]] का उपयोग करना है, प्रोग्राम जो निश्चित प्रकार के नए प्रोग्राम बना सकते हैं, जो उपयोगकर्ताओं द्वारा चुने गए मापदंडों के समुच्चय पर आधारित होते हैं। ऐसी प्रणालियों के बारे में अध्ययन के क्षेत्र [[जनरेटिव प्रोग्रामिंग]] और [[मेटाप्रोग्रामिंग]] हैं।


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


पुन: उपयोग को आगे वर्गीकृत किया जा सकता है:
पुन: उपयोग को आगे वर्गीकृत किया जा सकता है:


* आंतरिक पुन: उपयोग - एक टीम अपने स्वयं के घटकों का पुन: उपयोग करती है। यह एक व्यावसायिक निर्णय हो सकता है, क्योंकि टीम परियोजना के लिए महत्वपूर्ण घटक को नियंत्रित करना चाहती है।
* आंतरिक पुन: उपयोग - टीम अपने स्वयं के घटकों का पुन: उपयोग करती है। यह व्यावसायिक निर्णय हो सकता है, क्योंकि टीम परियोजना के लिए महत्वपूर्ण घटक को नियंत्रित करना चाहती है।
* बाहरी पुन: उपयोग - एक टीम तीसरे पक्ष के घटक को लाइसेंस देना चुन सकती है। तीसरे पक्ष के घटक को लाइसेंस देने में आम तौर पर टीम को आंतरिक रूप से विकसित करने के लिए 1 से 20 प्रतिशत की लागत आती है।<ref>{{cite book |last=McConnell |first=Steve |title=Rapid Development: Taming Wild Software Schedules |year=1996 |isbn=978-1-55615-900-8 |url-access=registration |url=https://archive.org/details/rapiddevelopment00mcco }}</ref> टीम को घटक को खोजने, सीखने और एकीकृत करने में लगने वाले समय पर भी विचार करना चाहिए।
* बाहरी पुन: उपयोग - एक टीम तीसरे पक्ष के घटक को लाइसेंस देना चुन सकती है। एक तीसरे पक्ष के घटक को लाइसेंस देने पर आम तौर पर टीम को आंतरिक रूप से विकसित करने की लागत का 1 से 20 प्रतिशत खर्च होता है।<ref>{{cite book |last=McConnell |first=Steve |title=Rapid Development: Taming Wild Software Schedules |year=1996 |isbn=978-1-55615-900-8 |url-access=registration |url=https://archive.org/details/rapiddevelopment00mcco }}</ref> टीम को घटक को खोजने, सीखने और एकीकृत करने में लगने वाले समय पर भी विचार करना चाहिए।


प्रपत्र या पुन: उपयोग की संरचना के संबंध में, कोड हो सकता है:<ref name="sharednow.blogspot.com">{{cite web |last=Colombo |first=F. |year=2011 |title=It's not just reuse |work=SharedNow.blogspot |url=http://sharednow.blogspot.com/2011/05/its-not-just-reuse.html}}</ref>
प्रपत्र या पुन: उपयोग की संरचना के संबंध में, कोड हो सकता है:<ref name="sharednow.blogspot.com">{{cite web |last=Colombo |first=F. |year=2011 |title=It's not just reuse |work=SharedNow.blogspot |url=http://sharednow.blogspot.com/2011/05/its-not-just-reuse.html}}</ref>
Line 41: Line 39:


फोर्क-पुन: उपयोग को अक्सर हतोत्साहित किया जाता है क्योंकि यह कोड दोहराव का एक रूप है, जिसके लिए आवश्यक है कि प्रत्येक प्रति में प्रत्येक बग को ठीक किया जाए, और पुन: उपयोग किए गए कोड में किए गए संवर्द्धन को प्रत्येक प्रति में मैन्युअल रूप से विलय करने की आवश्यकता होती है या वे पुराने हो जाते हैं। हालांकि, फोर्क-पुन: उपयोग में अलगाव, पुन: उपयोग किए गए कोड को बदलने के लिए लचीलापन, आसान पैकेजिंग, परिनियोजन और संस्करण प्रबंधन जैसे लाभ हो सकते हैं।<ref name="sharednow.blogspot.com"/>
फोर्क-पुन: उपयोग को अक्सर हतोत्साहित किया जाता है क्योंकि यह कोड दोहराव का एक रूप है, जिसके लिए आवश्यक है कि प्रत्येक प्रति में प्रत्येक बग को ठीक किया जाए, और पुन: उपयोग किए गए कोड में किए गए संवर्द्धन को प्रत्येक प्रति में मैन्युअल रूप से विलय करने की आवश्यकता होती है या वे पुराने हो जाते हैं। हालांकि, फोर्क-पुन: उपयोग में अलगाव, पुन: उपयोग किए गए कोड को बदलने के लिए लचीलापन, आसान पैकेजिंग, परिनियोजन और संस्करण प्रबंधन जैसे लाभ हो सकते हैं।<ref name="sharednow.blogspot.com"/>
== व्यवस्थित ==
व्यवस्थित सॉफ्टवेयर पुन: उपयोग उत्पादकता बढ़ाने और सॉफ्टवेयर उद्योग की गुणवत्ता में सुधार के लिए एक रणनीति है। हालांकि यह अवधारणा में सरल है, सफल सॉफ़्टवेयर पुन: उपयोग कार्यान्वयन व्यवहार में कठिन है। इसके लिए सामने रखा गया एक कारण सॉफ्टवेयर के पुन: उपयोग की उस संदर्भ पर निर्भरता है जिसमें इसे लागू किया गया है। व्यवस्थित सॉफ्टवेयर पुन: उपयोग से संबंधित कुछ समस्यात्मक मुद्दों को संबोधित करने की आवश्यकता है:<ref>{{cite conference |last1=Champman |first1=M. |last2=Van der Merwe |first2=Alta |year=2008 |url=http://portal.acm.org/citation.cfm?id=1456662 |title=Contemplating Systematic Software Reuse in a Small Project-centric Company |book-title=Proceeding SAICSIT '08 Proceedings of the 2008 annual research conference of the South African Institute of Computer Scientists and Information Technologists on IT research in developing countries: riding the wave of technology |doi=10.1145/1456659.1456662 |isbn=978-1-60558-286-3 }}</ref>


 
एक स्पष्ट और अच्छी तरह से परिभाषित उत्पाद दृष्टि एक [[सॉफ्टवेयर उत्पाद लाइन]] (एसपीएल) के लिए एक आवश्यक आधार है।
== व्यवस्थित ==
{{expand section|date=April 2015}}
व्यवस्थित सॉफ्टवेयर पुन: उपयोग उत्पादकता बढ़ाने और सॉफ्टवेयर उद्योग की गुणवत्ता में सुधार के लिए एक रणनीति है। हालांकि यह अवधारणा में सरल है, सफल सॉफ़्टवेयर पुन: उपयोग कार्यान्वयन व्यवहार में कठिन है। इसके लिए सामने रखा गया एक कारण सॉफ्टवेयर के पुन: उपयोग की उस संदर्भ पर निर्भरता है जिसमें इसे लागू किया गया है। व्यवस्थित सॉफ़्टवेयर पुन: उपयोग से संबंधित कुछ समस्यात्मक मुद्दे जिन्हें संबोधित करने की आवश्यकता है:<ref>{{cite conference |last1=Champman |first1=M. |last2=Van der Merwe |first2=Alta |year=2008 |url=http://portal.acm.org/citation.cfm?id=1456662 |title=Contemplating Systematic Software Reuse in a Small Project-centric Company |book-title=Proceeding SAICSIT '08 Proceedings of the 2008 annual research conference of the South African Institute of Computer Scientists and Information Technologists on IT research in developing countries: riding the wave of technology |doi=10.1145/1456659.1456662 |isbn=978-1-60558-286-3 }}</ref> *एक स्पष्ट और अच्छी तरह से परिभाषित उत्पाद दृष्टि एक [[सॉफ्टवेयर उत्पाद लाइन]] (एसपीएल) के लिए एक आवश्यक आधार है।
*एक विकासवादी कार्यान्वयन रणनीति कंपनी के लिए अधिक व्यावहारिक रणनीति होगी।
*एक विकासवादी कार्यान्वयन रणनीति कंपनी के लिए अधिक व्यावहारिक रणनीति होगी।
*सफलता सुनिश्चित करने के लिए निरंतर प्रबंधन समर्थन और नेतृत्व की आवश्यकता है।
*सफलता सुनिश्चित करने के लिए निरंतर प्रबंधन समर्थन और नेतृत्व की आवश्यकता है।
*SPL इंजीनियरिंग का समर्थन करने के लिए एक उपयुक्त संगठनात्मक संरचना की आवश्यकता है।
*एसपीएल इंजीनियरिंग का समर्थन करने के लिए एक उपयुक्त संगठनात्मक संरचना की आवश्यकता है।
*परियोजना-केंद्रित कंपनी से उत्पाद-उन्मुख कंपनी में मानसिकता का परिवर्तन आवश्यक है।
*परियोजना-केंद्रित कंपनी से उत्पाद-उन्मुख कंपनी के लिए मानसिकता का परिवर्तन आवश्यक है।


== उदाहरण ==
== उदाहरण ==
Line 55: Line 52:
=== सॉफ्टवेयर पुस्तकालय ===
=== सॉफ्टवेयर पुस्तकालय ===


कोड पुन: उपयोग का एक बहुत ही सामान्य उदाहरण लाइब्रेरी (कंप्यूटर विज्ञान) का उपयोग करने की तकनीक है। कई सामान्य संचालन, जैसे विभिन्न प्रसिद्ध स्वरूपों के बीच सूचना को परिवर्तित करना, बाहरी भंडारण तक पहुँचना, बाहरी कार्यक्रमों के साथ इंटरफेस करना, या जानकारी (संख्या, शब्द, नाम, स्थान, दिनांक, आदि) में हेरफेर करना, सामान्य तरीकों से कई अलग-अलग तरीकों से आवश्यक है। कार्यक्रम। नए कार्यक्रमों के लेखक इन कार्यों को करने के लिए एक सॉफ्टवेयर लाइब्रेरी में कोड का उपयोग कर सकते हैं, पहिया को फिर से आविष्कार करने के बजाय, एक ऑपरेशन करने के लिए प्रोग्राम में सीधे पूरी तरह से नया कोड लिखकर। पुस्तकालय के कार्यान्वयन में अक्सर अच्छी तरह से परीक्षण किए जाने और असामान्य या रहस्यमय मामलों को शामिल करने का लाभ होता है। नुकसान में विवरण को बदलने में असमर्थता शामिल है जो प्रदर्शन या वांछित आउटपुट को प्रभावित कर सकता है, और लाइब्रेरी प्राप्त करने, सीखने और कॉन्फ़िगर करने का समय और लागत शामिल है।<ref>{{Cite web|url=http://docforge.com/wiki/Code_reuse|title=Code reuse|access-date={{TODAY}}|work=DocForge|archive-url=https://web.archive.org/web/20110710143019/http://docforge.com/wiki/Code_reuse|url-status=dead|archive-date=2011-07-10}}</ref>
कोड पुन: उपयोग का एक बहुत ही सामान्य उदाहरण सॉफ्टवेयर लाइब्रेरी का उपयोग करने की तकनीक है। कई सामान्य संचालन, जैसे विभिन्न प्रसिद्ध स्वरूपों के बीच जानकारी को परिवर्तित करना, बाहरी भंडारण तक पहुँचना, बाहरी प्रोग्राम के साथ इंटरफेस करना, या जानकारी (संख्या, शब्द, नाम, स्थान, दिनांक, आदि) में हेरफेर करना, सामान्य तरीकों से कई अलग-अलग तरीकों से आवश्यक है। प्रोग्राम। एक ऑपरेशन करने के लिए एक प्रोग्राम में सीधे पूरी तरह से नया कोड लिखकर, नए प्रोग्राम के लेखक इन अभिलक्षक को करने के लिए एक सॉफ्टवेयर लाइब्रेरी में कोड का उपयोग कर सकते हैं, "पहिया का फिर से आविष्कार" करने के बजाय। पुस्तकालय के कार्यान्वयन में अक्सर अच्छी तरह से परीक्षण किए जाने और असामान्य या रहस्यमय मामलों को शामिल करने का लाभ होता है। नुकसान में विवरण को बदलने में असमर्थता शामिल है जो प्रदर्शन या वांछित आउटपुट को प्रभावित कर सकता है, और लाइब्रेरी प्राप्त करने, सीखने और कॉन्फ़िगर करने का समय और लागत शामिल है।<ref>{{Cite web|url=http://docforge.com/wiki/Code_reuse|title=Code reuse|access-date={{TODAY}}|work=DocForge|archive-url=https://web.archive.org/web/20110710143019/http://docforge.com/wiki/Code_reuse|url-status=dead|archive-date=2011-07-10}}</ref>
 
 
=== डिजाइन पैटर्न ===
=== डिजाइन पैटर्न ===


{{main article|Design pattern (computer science)}}
{{main article|डिज़ाइन पैटर्न (कंप्यूटर विज्ञान)}}
एक डिज़ाइन पैटर्न आवर्ती समस्या का एक सामान्य समाधान है। डिजाइन पैटर्न मूर्त से अधिक वैचारिक हैं और सटीक आवश्यकता को पूरा करने के लिए संशोधित किया जा सकता है। हालाँकि, कुछ पैटर्न को लागू करने के लिए अमूर्त वर्गों और इंटरफेस का पुन: उपयोग किया जा सकता है।
एक डिज़ाइन पैटर्न आवर्ती समस्या का एक सामान्य समाधान है। डिजाइन पैटर्न मूर्त से अधिक वैचारिक हैं और सटीक आवश्यकता को पूरा करने के लिए संशोधित किया जा सकता है। हालाँकि, कुछ पैटर्न को लागू करने के लिए अमूर्त वर्गों और इंटरफेस का पुन: उपयोग किया जा सकता है।


=== ढांचे ===
=== फ़्रेमवर्क ===
 
{{main article|सॉफ्टवेयर फ्रेमवर्क}}


{{main article|Software framework}}
डेवलपर्स आमतौर पर तीसरे पक्ष के अनुप्रयोगों और रूपरेखाओं के माध्यम से सॉफ्टवेयर के बड़े टुकड़ों का पुन: उपयोग करते हैं। हालांकि ढांचे आमतौर पर प्रांत-विशिष्ट होते हैं और केवल अनुप्रयोगों के परिवारों के लिए लागू होते हैं.
डेवलपर्स आमतौर पर तीसरे पक्ष के अनुप्रयोगों और रूपरेखाओं के माध्यम से सॉफ्टवेयर के बड़े टुकड़ों का पुन: उपयोग करते हैं। हालांकि ढांचे आमतौर पर डोमेन-विशिष्ट होते हैं और केवल अनुप्रयोगों के परिवारों पर लागू होते हैं{{citation needed|date=April 2015}}.


=== उच्च-क्रम समारोह ===
=== उच्च-क्रम समारोह ===
{{main article|Higher-order function}}
{{main article|हायर-ऑर्डर फंक्शन}}
[[कार्यात्मक प्रोग्रामिंग]] में उच्च-क्रम के कार्यों का उपयोग कई मामलों में किया जा सकता है जहां पहले डिजाइन पैटर्न या ढांचे का उपयोग किया जाता था।
[[कार्यात्मक प्रोग्रामिंग]] में उच्च-क्रम के अभिलक्षक का उपयोग कई मामलों में किया जा सकता है जहां पहले डिजाइन पैटर्न या ढांचे का उपयोग किया जाता था।


=== [[रेट्रोकंप्यूटिंग]] ===
=== [[रेट्रोकंप्यूटिंग]] ===
Line 77: Line 73:


=== [[कंप्यूटर सुरक्षा]] ===
=== [[कंप्यूटर सुरक्षा]] ===
कंप्यूटर सुरक्षा कोड-पुन: उपयोग में सॉफ़्टवेयर शोषण विधि के रूप में कार्यरत है।<ref name=Bletsch11>{{Cite book| publisher = North Carolina State University| last = Bletsch| first = Tyler | title = Code-reuse Attacks: New Frontiers and Defenses| date = 2011 |isbn=978-1-124-75297-6 |url=http://dl.acm.org/citation.cfm?id=2338075}}</ref>
कंप्यूटर सुरक्षा कोड-पुन: उपयोग में एक सॉफ्टवेयर शोषण विधि के रूप में कार्यरत है।<ref name=Bletsch11>{{Cite book| publisher = North Carolina State University| last = Bletsch| first = Tyler | title = Code-reuse Attacks: New Frontiers and Defenses| date = 2011 |isbn=978-1-124-75297-6 |url=http://dl.acm.org/citation.cfm?id=2338075}}</ref>जब एक हमलावर किसी प्रोग्राम के नियंत्रण प्रवाह को संशोधित करने के लिए सीधे कोड इनपुट करने में सक्षम नहीं होता है, उदाहरण के लिए W^X जैसे कोड इंजेक्शन सुरक्षा की उपस्थिति में, वह नियंत्रण प्रवाह को स्मृति में मौजूद कोड अनुक्रमों पर पुनर्निर्देशित कर सकता है।
जब एक हमलावर किसी प्रोग्राम के नियंत्रण प्रवाह को संशोधित करने के लिए सीधे कोड इनपुट करने में सक्षम नहीं होता है, उदाहरण के लिए W^X जैसे कोड इंजेक्शन सुरक्षा की उपस्थिति में, वह नियंत्रण प्रवाह को स्मृति में मौजूद कोड अनुक्रमों पर पुनर्निर्देशित कर सकता है।
 
कोड-पुन: उपयोग हमलों के उदाहरण हैं [[रिटर्न-टू-लिबक हमला]], [[वापसी-उन्मुख प्रोग्रामिंग]] और जंप-ओरिएंटेड प्रोग्रामिंग।<ref name=Bletsch11/><ref>{{Cite conference| publisher = ACM| pages = 30–40| last1 = Bletsch| first1 = Tyler| last2 = Jiang| first2 = Xuxian| last3 = Freeh| first3 = Vince W| last4 = Liang| first4 = Zhenkai| title = Jump-oriented programming: a new class of code-reuse attack| book-title = Proceedings of the 6th ACM Symposium on Information, Computer and Communications Security| date = 2011| doi = 10.1145/1966913.1966919| url = https://web.comp.nus.edu.sg/~liangzk/papers/asiaccs11.pdf| isbn = 978-1-4503-0564-8| access-date = 2017-08-07| archive-url = https://web.archive.org/web/20170807154310/https://web.comp.nus.edu.sg/~liangzk/papers/asiaccs11.pdf| archive-date = 2017-08-07| url-status = dead}}</ref>
 
 
=== घटक ===


{{main article|Software component}}
कोड-पुन: उपयोग हमलों के उदाहरण हैं [[रिटर्न-टू-लिबक हमला]], रिटर्न-ओरिएंटेड प्रोग्रामिंग और जंप-ओरिएंटेड प्रोग्रामिंग।<ref name=Bletsch11/><ref>{{Cite conference| publisher = ACM| pages = 30–40| last1 = Bletsch| first1 = Tyler| last2 = Jiang| first2 = Xuxian| last3 = Freeh| first3 = Vince W| last4 = Liang| first4 = Zhenkai| title = Jump-oriented programming: a new class of code-reuse attack| book-title = Proceedings of the 6th ACM Symposium on Information, Computer and Communications Security| date = 2011| doi = 10.1145/1966913.1966919| url = https://web.comp.nus.edu.sg/~liangzk/papers/asiaccs11.pdf| isbn = 978-1-4503-0564-8| access-date = 2017-08-07| archive-url = https://web.archive.org/web/20170807154310/https://web.comp.nus.edu.sg/~liangzk/papers/asiaccs11.pdf| archive-date = 2017-08-07| url-status = dead}}</ref>
एक वस्तु-उन्मुख सीमा में एक घटक, सहयोगी वर्गों (या केवल एक वर्ग) और उसके इंटरफेस के एक सेट का प्रतिनिधित्व करता है। घटकों के प्रतिस्थापन को सक्षम करने के लिए इंटरफेस जिम्मेदार हैं। पुन: प्रयोज्य घटकों को घटक स्रोत कोड प्रबंधन तकनीकों ([https://github.com/teambit/bit CSCM]) का उपयोग करके SCM रिपॉजिटरी के बीच अलग और सिंक्रनाइज़ किया जा सकता है।{{citation needed|date=April 2015}}
=== अवयव ===


{{main article|सॉफ्टवेयर घटक}}


एक ऑब्जेक्ट ओरिएंटेड सीमा में एक घटक, सहयोगी वर्गों (या केवल एक वर्ग) और उसके इंटरफेस के एक समुच्चय का प्रतिनिधित्व करता है। घटकों के प्रतिस्थापन को सक्षम करने के लिए इंटरफेस जिम्मेदार हैं। पुन: प्रयोज्य घटकों को घटक स्रोत कोड प्रबंधन तकनीकों ([https://github.com/teambit/bit CSCM])का उपयोग करके SCM रिपॉजिटरी के बीच अलग और सिंक्रनाइज़ किया जा सकता है।
=== कंप्यूटर के बाहर ===
=== कंप्यूटर के बाहर ===
कोड पुन: उपयोग की पूरी अवधारणा सॉफ्टवेयर के बाहर इंजीनियरिंग अनुप्रयोगों को भी शामिल कर सकती है। उदाहरण के लिए, [[कंप्यूटर एडेड डिजाइन]] में [[ठोस मॉडलिंग]] पुन: प्रयोज्य डिज़ाइन बनाने की अनुमति देता है। [[मानकीकरण]] के परिणामस्वरूप इंटरऑपरेबल भागों का निर्माण होता है जिसे कई संदर्भों में पुन: उपयोग किया जा सकता है।{{citation needed|date=April 2015}}
"कोड पुन: उपयोग" की पूरी अवधारणा सॉफ्टवेयर के बाहर इंजीनियरिंग अनुप्रयोगों को भी शामिल कर सकती है। उदाहरण के लिए, [[कंप्यूटर एडेड डिजाइन]] में [[ठोस मॉडलिंग|पैरामीट्रिक मॉडलिंग]] पुन: प्रयोज्य डिज़ाइन बनाने की अनुमति देता है। [[मानकीकरण]] के परिणामस्वरूप इंटरऑपरेबल भागों का निर्माण होता है जिसे कई संदर्भों में पुन: उपयोग किया जा सकता है।
 
 
== आलोचना ==
== आलोचना ==
पुन: उपयोग किए जा रहे घटक पर [[युग्मन (कंप्यूटर प्रोग्रामिंग)]] में कोड का पुन: उपयोग होता है। [[रोब पाइक]] ने कहा कि थोड़ी सी नकल थोड़ी निर्भरता से बेहतर है। जब उन्होंने [[Google]] ज्वाइन किया, तब कंपनी कोड के पुन: उपयोग पर बहुत जोर दे रही थी। उनका मानना ​​है कि संकलन गति और रखरखाव के मामले में Google का [[codebase]] अभी भी उस पूर्व नीति के परिणामों से ग्रस्त है।<ref>{{Citation|last=The Go Programming Language|title=Go Proverbs – Rob Pike – Gopherfest – November 18, 2015|date=2015-12-01|url=https://www.youtube.com/watch?v=PAAkCSZUG1c |archive-url=https://ghostarchive.org/varchive/youtube/20211222/PAAkCSZUG1c |archive-date=2021-12-22 |url-status=live|accessdate=26 February 2016}}{{cbignore}}</ref>
कोड पुन: उपयोग के परिणामस्वरूप पुन: उपयोग किए जा रहे घटक पर [[युग्मन (कंप्यूटर प्रोग्रामिंग)|निर्भरता (कंप्यूटर प्रोग्रामिंग)]] में कोड का पुन: उपयोग होता है। [[रोब पाइक]] ने कहा कि "थोड़ी सी नकल थोड़ी निर्भरता से बेहतर है"। जब उन्होंने [[Google]] ज्वाइन किया, तब कंपनी कोड के पुन: उपयोग पर बहुत जोर दे रही थी। उनका मानना है कि Google का [[codebase|कोडबेस]] अभी भी संकलन गति और रखरखाव के संदर्भ में उस पूर्व नीति के परिणामों से पीड़ित है।<ref>{{Citation|last=The Go Programming Language|title=Go Proverbs – Rob Pike – Gopherfest – November 18, 2015|date=2015-12-01|url=https://www.youtube.com/watch?v=PAAkCSZUG1c |archive-url=https://ghostarchive.org/varchive/youtube/20211222/PAAkCSZUG1c |archive-date=2021-12-22 |url-status=live|accessdate=26 February 2016}}{{cbignore}}</ref>
 
 
== यह भी देखें ==
== यह भी देखें ==
*अपने आप को मत दोहराओ
*अपने आप को मत दोहराओ

Revision as of 21:56, 19 February 2023

सॉफ़्टवेयर विकास (और सामान्य रूप से क्रमानुदेशन (कंप्यूटर प्रोग्रामिंग)) में, कोड पुन: उपयोग, जिसे सॉफ़्टवेयर पुन: उपयोग भी कहा जाता है, नए सॉफ़्टवेयर के निर्माण के लिए मौजूदा सॉफ़्टवेयर या सॉफ़्टवेयर ज्ञान का उपयोग,[1][2]: 7  पुन: प्रयोज्यता का पालन करना होता है।

चुनी गई प्रोग्रामिंग भाषा की जटिलता के आधार पर पीसीकोड का पुन: उपयोग अलग-अलग तरीकों से किया जा सकता है और कोड कॉपी-पेस्टिंग (जैसे स्निपेट (प्रोग्रामिंग) के माध्यम से),[3] सरल कार्य (प्रक्रिया (कंप्यूटर विज्ञान) या सबरूटीन्स)या एक समूह जैसे निचले स्तर के दृष्टिकोण से लेकर होता है। वस्तुओं या अभिलक्षक को मॉड्यूलर प्रोग्रामिंग (जैसे पुस्तकालय (कम्प्यूटिंग)[4][2]: 7  या कस्टम नाम स्थान, और पैकेज प्रबंधक, फ्रेमवर्क (कंप्यूटर साइंस) या सॉफ्टवेयर सूट उच्च-स्तरों में व्यवस्थित किया गया है।।

कोड पुन: उपयोग निर्भरता का तात्पर्य है जो कोड रखरखाव को कठिन बना सकता है। कम से कम एक अध्ययन में पाया गया कि कोड का पुन: उपयोग तकनीकी ऋण को कम करता है।[5]

सिंहावलोकन

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

कोड पुन: उपयोग का उद्देश्य समय और संसाधनों को बचाना है और सॉफ्टवेयर उत्पाद विकास प्रक्रिया के भीतर किसी न किसी रूप में पहले से ही बनाई गई संपदा का लाभ उठाकर अतिरेक (सूचना सिद्धांत) को कम करना है।[6] पुन: उपयोग में मुख्य विचार यह है कि एक समय में लिखे गए कंप्यूटर प्रोग्राम के कुछ हिस्सों को बाद में लिखे गए अन्य प्रोग्राम के निर्माण में इस्तेमाल किया जा सकता है या इस्तेमाल किया जाना चाहिए।

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

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

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

अगले संस्करण के लिए प्रारंभिक बिंदु के रूप में मौजूदा प्रोग्राम के पूर्व संस्करण का उपयोग करने का सामान्य अभ्यास भी कोड पुन: उपयोग का रूप है।

कुछ तथाकथित कोड "पुन: उपयोग" में किसी मौजूदा प्रोग्राम से कुछ या सभी कोड को नए में कॉपी करना शामिल है। जबकि संगठन इस दृष्टिकोण के साथ नए उत्पाद के लिए बाजार लाभ के लिए समय का एहसास कर सकते हैं, वे बाद में कट और पेस्ट प्रोग्रामिंग के कारण समान कोड दोहराव की कई समस्याओं से परेशान हो सकते हैं।

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

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

पुन: उपयोग के प्रकार

प्रेरणा और ड्राइविंग कारकों के संबंध में, पुन: उपयोग हो सकता है:

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

पुन: उपयोग को आगे वर्गीकृत किया जा सकता है:

  • आंतरिक पुन: उपयोग - टीम अपने स्वयं के घटकों का पुन: उपयोग करती है। यह व्यावसायिक निर्णय हो सकता है, क्योंकि टीम परियोजना के लिए महत्वपूर्ण घटक को नियंत्रित करना चाहती है।
  • बाहरी पुन: उपयोग - एक टीम तीसरे पक्ष के घटक को लाइसेंस देना चुन सकती है। एक तीसरे पक्ष के घटक को लाइसेंस देने पर आम तौर पर टीम को आंतरिक रूप से विकसित करने की लागत का 1 से 20 प्रतिशत खर्च होता है।[8] टीम को घटक को खोजने, सीखने और एकीकृत करने में लगने वाले समय पर भी विचार करना चाहिए।

प्रपत्र या पुन: उपयोग की संरचना के संबंध में, कोड हो सकता है:[9]

  • संदर्भित - क्लाइंट कोड में पुन: उपयोग किए गए कोड का संदर्भ होता है, और इस प्रकार उनके अलग-अलग जीवन चक्र होते हैं और उनके अलग-अलग संस्करण हो सकते हैं।
  • फोर्क्ड - क्लाइंट कोड में पुन: उपयोग किए गए कोड की एक स्थानीय या निजी प्रति होती है, और इस प्रकार वे एक जीवन चक्र और एक संस्करण साझा करते हैं।

फोर्क-पुन: उपयोग को अक्सर हतोत्साहित किया जाता है क्योंकि यह कोड दोहराव का एक रूप है, जिसके लिए आवश्यक है कि प्रत्येक प्रति में प्रत्येक बग को ठीक किया जाए, और पुन: उपयोग किए गए कोड में किए गए संवर्द्धन को प्रत्येक प्रति में मैन्युअल रूप से विलय करने की आवश्यकता होती है या वे पुराने हो जाते हैं। हालांकि, फोर्क-पुन: उपयोग में अलगाव, पुन: उपयोग किए गए कोड को बदलने के लिए लचीलापन, आसान पैकेजिंग, परिनियोजन और संस्करण प्रबंधन जैसे लाभ हो सकते हैं।[9]

व्यवस्थित

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

एक स्पष्ट और अच्छी तरह से परिभाषित उत्पाद दृष्टि एक सॉफ्टवेयर उत्पाद लाइन (एसपीएल) के लिए एक आवश्यक आधार है।

  • एक विकासवादी कार्यान्वयन रणनीति कंपनी के लिए अधिक व्यावहारिक रणनीति होगी।
  • सफलता सुनिश्चित करने के लिए निरंतर प्रबंधन समर्थन और नेतृत्व की आवश्यकता है।
  • एसपीएल इंजीनियरिंग का समर्थन करने के लिए एक उपयुक्त संगठनात्मक संरचना की आवश्यकता है।
  • परियोजना-केंद्रित कंपनी से उत्पाद-उन्मुख कंपनी के लिए मानसिकता का परिवर्तन आवश्यक है।

उदाहरण

सॉफ्टवेयर पुस्तकालय

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

डिजाइन पैटर्न

एक डिज़ाइन पैटर्न आवर्ती समस्या का एक सामान्य समाधान है। डिजाइन पैटर्न मूर्त से अधिक वैचारिक हैं और सटीक आवश्यकता को पूरा करने के लिए संशोधित किया जा सकता है। हालाँकि, कुछ पैटर्न को लागू करने के लिए अमूर्त वर्गों और इंटरफेस का पुन: उपयोग किया जा सकता है।

फ़्रेमवर्क

डेवलपर्स आमतौर पर तीसरे पक्ष के अनुप्रयोगों और रूपरेखाओं के माध्यम से सॉफ्टवेयर के बड़े टुकड़ों का पुन: उपयोग करते हैं। हालांकि ढांचे आमतौर पर प्रांत-विशिष्ट होते हैं और केवल अनुप्रयोगों के परिवारों के लिए लागू होते हैं.

उच्च-क्रम समारोह

कार्यात्मक प्रोग्रामिंग में उच्च-क्रम के अभिलक्षक का उपयोग कई मामलों में किया जा सकता है जहां पहले डिजाइन पैटर्न या ढांचे का उपयोग किया जाता था।

रेट्रोकंप्यूटिंग

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

कंप्यूटर सुरक्षा

कंप्यूटर सुरक्षा कोड-पुन: उपयोग में एक सॉफ्टवेयर शोषण विधि के रूप में कार्यरत है।[12]जब एक हमलावर किसी प्रोग्राम के नियंत्रण प्रवाह को संशोधित करने के लिए सीधे कोड इनपुट करने में सक्षम नहीं होता है, उदाहरण के लिए W^X जैसे कोड इंजेक्शन सुरक्षा की उपस्थिति में, वह नियंत्रण प्रवाह को स्मृति में मौजूद कोड अनुक्रमों पर पुनर्निर्देशित कर सकता है।

कोड-पुन: उपयोग हमलों के उदाहरण हैं रिटर्न-टू-लिबक हमला, रिटर्न-ओरिएंटेड प्रोग्रामिंग और जंप-ओरिएंटेड प्रोग्रामिंग।[12][13]

अवयव

एक ऑब्जेक्ट ओरिएंटेड सीमा में एक घटक, सहयोगी वर्गों (या केवल एक वर्ग) और उसके इंटरफेस के एक समुच्चय का प्रतिनिधित्व करता है। घटकों के प्रतिस्थापन को सक्षम करने के लिए इंटरफेस जिम्मेदार हैं। पुन: प्रयोज्य घटकों को घटक स्रोत कोड प्रबंधन तकनीकों (CSCM)का उपयोग करके SCM रिपॉजिटरी के बीच अलग और सिंक्रनाइज़ किया जा सकता है।

कंप्यूटर के बाहर

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

आलोचना

कोड पुन: उपयोग के परिणामस्वरूप पुन: उपयोग किए जा रहे घटक पर निर्भरता (कंप्यूटर प्रोग्रामिंग) में कोड का पुन: उपयोग होता है। रोब पाइक ने कहा कि "थोड़ी सी नकल थोड़ी निर्भरता से बेहतर है"। जब उन्होंने Google ज्वाइन किया, तब कंपनी कोड के पुन: उपयोग पर बहुत जोर दे रही थी। उनका मानना है कि Google का कोडबेस अभी भी संकलन गति और रखरखाव के संदर्भ में उस पूर्व नीति के परिणामों से पीड़ित है।[14]

यह भी देखें

संदर्भ

  1. Frakes, W.B.; Kyo Kang (July 2005). "Software Reuse Research: Status and Future". IEEE Transactions on Software Engineering. 31 (7): 529–536. CiteSeerX 10.1.1.75.635. doi:10.1109/TSE.2005.85. S2CID 14561810.
  2. 2.0 2.1 Reddy, Martin (2011). API design for C++. Boston: Morgan Kaufmann. ISBN 978-0-12-385004-1. OCLC 704559821.
  3. Selaolo, Karabo; Hlomani, Hlomani (2016). "Towards An Algorithms Ontology Cluster: for Modular Code Reuse and Polyglot Programming". Advances in Computer Science. 5: 63 – via Researchgate.
  4. "4. Code Reuse: Functions and Modules - Head First Python, 2nd Edition [Book]". www.oreilly.com (in English). Retrieved 2022-01-26.
  5. Feitosa, Daniel; Ampatzoglou, Apostolos; Gkortzis, Antonios; Bibi, Stamatia; Chatzigeorgiou, Alexander (September 2020). "CODE reuse in practice: Benefiting or harming technical debt". Journal of Systems and Software (in English). 167: 110618. doi:10.1016/j.jss.2020.110618. S2CID 219502749.
  6. Lombard Hill Group. "What Is Software Reuse?". lombardhill.com. Lombard Hill Group. Archived from the original on 23 January 2019. Retrieved 22 October 2014.
  7. Lombard Hill Group. "What Is Software Reuse?". Archived from the original on 23 January 2019. Retrieved 22 October 2014.
  8. McConnell, Steve (1996). Rapid Development: Taming Wild Software Schedules. ISBN 978-1-55615-900-8.
  9. 9.0 9.1 Colombo, F. (2011). "It's not just reuse". SharedNow.blogspot.
  10. Champman, M.; Van der Merwe, Alta (2008). "Contemplating Systematic Software Reuse in a Small Project-centric Company". Proceeding SAICSIT '08 Proceedings of the 2008 annual research conference of the South African Institute of Computer Scientists and Information Technologists on IT research in developing countries: riding the wave of technology. doi:10.1145/1456659.1456662. ISBN 978-1-60558-286-3.
  11. "Code reuse". DocForge. Archived from the original on 2011-07-10. Retrieved 5 November 2024.
  12. 12.0 12.1 Bletsch, Tyler (2011). Code-reuse Attacks: New Frontiers and Defenses. North Carolina State University. ISBN 978-1-124-75297-6.
  13. Bletsch, Tyler; Jiang, Xuxian; Freeh, Vince W; Liang, Zhenkai (2011). "Jump-oriented programming: a new class of code-reuse attack" (PDF). Proceedings of the 6th ACM Symposium on Information, Computer and Communications Security. ACM. pp. 30–40. doi:10.1145/1966913.1966919. ISBN 978-1-4503-0564-8. Archived from the original (PDF) on 2017-08-07. Retrieved 2017-08-07.
  14. The Go Programming Language (2015-12-01), Go Proverbs – Rob Pike – Gopherfest – November 18, 2015, archived from the original on 2021-12-22, retrieved 26 February 2016


बाहरी संबंध