2010-08-12 13 views
55

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

  • अभ्यास में प्रयोग किया गया है, न केवल सिद्धांत में।
  • ओप के साथ प्रतिस्पर्धा कर सकते हैं, इसलिए इसका उपयोग बिना किसी दर्द के या बिना किसी बड़ी परियोजना में किया जा सकता है।
  • व्यापार तर्क, डेटाबेस आदि के साथ डेस्कटॉप ऐप विकसित करने के लिए उपयोग किया जा सकता है।
  • ओप के साथी के साथ प्रयोग नहीं किया जाता है, लेकिन ओओपी को प्रतिस्थापित कर सकता है।

और अगर वहाँ है किसी भी, पेशेवरों/इसके बारे में विपक्ष, कारण है कि यह बेहतर/OOP से भी बदतर है क्या कर रहे हैं, कौन-सी भाषाओं सबसे अच्छा कर रहे हैं इसका इस्तेमाल करने की, क्या लोकप्रिय भाषाओं में इसका उपयोग करने के बारे में है, यह किसी भी है डिजाइन पैटर्न, और यह पूरी तरह से ओओपी बदल सकते हैं?

+1

@ जस्टिन अर्दीनी: मुझे पता है कि बहुत सारे हैं, लेकिन कौन सा ओओपी के साथ प्रतिस्पर्धा कर सकता है? @Tobiasopdenbrouw और मैक्रोज़: ठीक है, बदल गया। –

+0

ओओपी लोकप्रिय है क्योंकि यह लोकप्रिय है, यदि आप ओओपी कुलाइड को निगलते नहीं हैं तो आपके पास काम करने के लिए कोई परियोजना नहीं होगी ... – aoeu256

+0

डेटा ओरिएंटेड प्रोग्रामिंग आसान है, जहां आप ऑब्जेक्ट संग्रह और उनके संबंधों के बजाय एकल संबंधों की परवाह करते हैं वस्तुओं, जहां "डीबी ऑब्जेक्ट" विधियां encapsulation प्रदान करते हैं। JSON और sexpressions एसक्यूएल, सीएसएस, एचटीएमएल, एक्सेल, शैल स्क्रिप्ट लोकप्रिय और उपयोगी हैं, लेकिन "प्रोग्रामिंग" का मतलब ओओपी या प्रक्रियात्मक है। OOP कोड के 20% होने के बावजूद पायथन/जावास्क्रिप्ट प्रोग्राम को बनाए रखने के लिए ओओपी का धन्यवाद किया जाता है। ऑब्जेक्ट्स के स्थान पर क्लोजर और जेएसओएन का 90% समय का उपयोग किया जा सकता है और उपयोग करने में आसान और आसान है। – aoeu256

उत्तर

32

Functional programming एक अन्य प्रोग्रामिंग प्रतिमान है जो ज्यादातर लोकप्रिय है, ज्यादातर अकादमिक में। एक कार्यात्मक प्रोग्रामिंग भाषा का सबसे अच्छा उदाहरण Haskell और Standard ML है।

कार्यात्मक प्रोग्रामिंग और वस्तु उन्मुख प्रोग्रामिंग के बीच मौलिक अंतर यह है कि आप समझ में प्रोग्रामिंग कर रहे हैं डेटा प्रवाह की बजाय नियंत्रण प्रवाह है। प्रस्तुति Taming Effects with Functional Programmingसाइमन पेटन-जोन्स द्वारा एक अच्छी शुरुआत के लिए देखें।

उद्योग में प्रयुक्त कार्यात्मक प्रोग्रामिंग का एक अच्छा उदाहरण Erlang है। इसका ज्यादातर दूरसंचार, वितरित और गलती सहनशील प्रणालियों में उपयोग किया जाता है। प्रस्तुति Erlang - Software for a concurrent Worldजो आर्मस्ट्रांग द्वारा देखें।

नई कार्यात्मक प्रोग्रामिंग भाषाएं भी हैं जो ओओपी के साथ कार्यात्मक प्रोग्रामिंग को जोड़ती हैं। जावा प्लेटफ़ॉर्म के लिए .NET प्लेटफ़ॉर्म और Scala के लिए दो अच्छे उदाहरण F# हैं; वे अक्सर अन्य भाषाओं में लिखे मंच पर मौजूदा पुस्तकालयों का उपयोग कर सकते हैं।

नई प्रोग्रामिंग भाषाओं की प्रवृत्ति अब Multi-paradigm है, जहां ऑब्जेक्ट उन्मुख प्रोग्रामिंग और कार्यात्मक प्रोग्रामिंग जैसे कई प्रतिमान एक ही भाषा में संयुक्त होते हैं।

+0

कार्यात्मक प्रोग्रामिंग ओओपी को प्रतिस्थापित कर सकता है या क्या यह ओओपी के साथ उपयोग किया जाता है? क्या इस प्रतिमान में लिखे गए ऐप्स के वास्तविक दुनिया उदाहरण हैं? डिजाइन पैटर्न के बारे में क्या? –

+4

स्कैला उद्देश्य ऑब्जेक्ट उन्मुख और कार्यात्मक भाषाओं की सुविधाओं को एकीकृत करना है। – Philipp

+4

अच्छा जवाब, फिर भी मुझे लगता है कि कार्यात्मक प्रोग्रामिंग और ऑब्जेक्ट उन्मुख प्रोग्रामिंग पदक के दो पक्ष नहीं हैं, वे पूरी तरह से सह-अस्तित्व में हैं (जैसा कि आपने बताया है)। यह इस तरह है: प्रक्रियात्मक वीएस ऑब्जेक्ट उन्मुख, प्रभावशाली वीएस कार्यात्मक। लिस्प एक लोकप्रिय प्रक्रियात्मक कार्यात्मक भाषा है, जावा एक ऑब्जेक्ट उन्मुख अनिवार्य भाषा है। – fhd

1

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

+1

स्कैला ओओपी/एफपी संयोजन का एक अच्छा उदाहरण है। –

8

ओओपी चालू होने से पहले प्रक्रियात्मक प्रसंस्करण सब कुछ था, कुछ बड़े वास्तविक दुनिया अनुप्रयोगों (वास्तव में, उनमें से ज्यादातर मूल रूप से) और कई ऑपरेटिंग सिस्टम का उत्पादन किया है।

यह निश्चित रूप से दर्द की एक न्यूनतम, और प्रदर्शन की एक अधिकतम के साथ बड़े पैमाने पर उत्पादों में इस्तेमाल किया जा सकता

+4

हाँ, और अनगिनत मीट्रिक अध्ययनों ने दिखाया है कि यह लगभग 150 के एलओसी पर गैस से बाहर चला जाता है। स्ट्रेटेक्चर प्रोग्रामिंग जटिलता भार के तहत कैसे विघटित होता है इस बारे में एक ग्रंथ के लिए पेटज़ोल्ड के विंडोज एसडीके को देखें: 8 तर्कों के साथ कार्य, 2 6-10 सदस्यों के साथ structs हैं। गणना के प्रत्येक इकाई में डेटा को धक्का देना अंततः काम नहीं करता है। – Rob

+1

ठीक है लेकिन - कितने एप्लिकेशन इस बड़े हो जाते हैं? ओओपी के साथ समस्या यह समझने के लिए बेहद जटिल है, और विशाल अनुप्रयोगों के लिए डिज़ाइन की गई है - लेकिन छोटे लोगों के लिए भी डिफ़ॉल्ट है। छोटे ऐप को अनिवार्य रूप से जटिल करने पर इसका विपरीत प्रभाव पड़ता है। – niico

+0

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

-5

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

आला या अकादमिक दुनिया में, आपको बहुत सारे कार्यात्मक प्रोग्रामिंग मिलेंगे। हालांकि, अगर आप वास्तव में एक बड़ी परियोजना करना चाहते हैं, तो ओओपी जाने का एकमात्र तरीका है।

मुझे लगता है कि सामान्य प्रोग्रामिंग एक नए प्रतिमान के रूप में आने वाला है। हालांकि, यह वास्तव में विकास चरण में अभी भी है और केवल सी ++/डी प्रस्ताव वास्तव में अच्छी जेनेरिक प्रोग्रामिंग है।

+3

ओओपी उन चीजों में से कोई भी नहीं करता है।यह उन्हें आसान बना सकता है, लेकिन केवल तभी जब ओओ ढांचे के डिजाइन में उन्हें शामिल किया गया है, जैसे नेट, या यदि आप उन्हें लिखना चाहते हैं। –

+0

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

+2

संसाधन प्रबंधन ऑब्जेक्ट ओरिएंटेशन की विशेषता नहीं है - संसाधन प्रबंधन अनिवार्य प्रोग्रामिंग भाषाओं की एक विशेषता है, जो ऑब्जेक्ट उन्मुख हो सकता है या नहीं। मैं किसी भी पूरी तरह कार्यात्मक भाषाओं के बारे में नहीं जानता जो आपको सिस्टम संसाधनों को स्पष्ट रूप से प्रबंधित करने के लिए मजबूर करता है। –

2

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