संपादित करें:
आगे भ्रम से बचने के लिए: मैं वेब सेवाओं और इस तरह की बात नहीं कर रहा हूं । मैं आंतरिक रूप से अनुप्रयोगों को संरचित करने के बारे में बात कर रहा हूं, यह इस बारे में नहीं है कि कंप्यूटर कैसे संवाद करते हैं। यह प्रोग्रामिंग लैंग्वेज, कम्पाइलर और कैसे अनिवार्य प्रोग्रामिंग प्रतिमान के बारे में बताया गया है।
मूल:
अनिवार्य प्रोग्रामिंग क्षेत्र में, हमने पिछले 20 वर्षों (या अधिक) में दो प्रतिमानों को देखा: ऑब्जेक्ट-ओरिएंटेड (OO), और सेवा-उन्मुख (SO) उर्फ। घटक आधारित (सीबी)।
दोनों प्रतिमान अपने स्वयं के मॉड्यूल की धारणा को लागू करके अनिवार्य प्रोग्रामिंग प्रतिमान का विस्तार करते हैं। OO उन्हें ऑब्जेक्ट्स (और क्लासेस) कहता है और उन्हें डेटा (फ़ील्ड्स) और प्रोसेस (मेथड) दोनों को एकसाथ इनकैप्सुलेट करता है। एसओ, इसके विपरीत, कोड (घटकों, सेवाओं) से डेटा (रिकॉर्ड, सेम, ...) को अलग करता है।
हालाँकि, केवल OO के पास प्रोग्रामिंग भाषाएं हैं जो मूल रूप से इसके प्रतिमान का समर्थन करती हैं: स्मॉलटाक, C ++, जावा और अन्य सभी JVM-कंपेटिबल्स, C # और अन्य सभी .NET-कंपेटिबल्स, पायथन आदि।
SO के पास ऐसी कोई मूल भाषा नहीं है। यह केवल प्रक्रियात्मक भाषाओं या OO भाषाओं के शीर्ष पर अस्तित्व में आता है: COM / DCOM (बाइनरी, सी, C ++), CORBA, EJB, स्प्रिंग, गिटार (सभी जावा), ...
ये एसओ फ्रेमवर्क स्पष्ट रूप से उनकी अवधारणाओं के मूल देशी भाषा समर्थन से पीड़ित हैं।
- वे सेवाओं और रिकॉर्ड का प्रतिनिधित्व करने के लिए OO कक्षाओं का उपयोग करना शुरू करते हैं। यह उन डिज़ाइनों की ओर ले जाता है जहाँ वर्गों के बीच एक स्पष्ट अंतर होता है जिसमें केवल विधियाँ (सेवाएँ) होती हैं और जिनके पास केवल फ़ील्ड्स (रिकॉर्ड्स) होते हैं। सेवाओं या रिकॉर्ड के बीच विरासत को तब वर्गों की विरासत द्वारा सिम्युलेटेड किया जाता है। तकनीकी रूप से, इसका कड़ाई से पालन नहीं किया जाता है, लेकिन सामान्य प्रोग्रामर को सलाह दी जाती है कि वे दो में से केवल एक भूमिका निभाने के लिए कक्षाएं बनाएं।
- वे लापता भागों का प्रतिनिधित्व करने के लिए अतिरिक्त, बाहरी भाषाओं का उपयोग करते हैं: आईडीएल के, एक्सएमएल कॉन्फ़िगरेशन, जावा कोड में एनोटेशन, या यहां तक कि एम्बेडेड डीआईओएस जैसे गाइस। यह विशेष रूप से आवश्यक है, लेकिन सीमित नहीं है, क्योंकि सेवाओं की संरचना स्वयं सेवा कोड का हिस्सा नहीं है। OO में, ऑब्जेक्ट अन्य ऑब्जेक्ट बनाते हैं, इसलिए ऐसी सुविधाओं की कोई आवश्यकता नहीं है, लेकिन SO के लिए इसलिए है क्योंकि सेवाएँ अन्य सेवाओं को तुरंत या कॉन्फ़िगर नहीं करती हैं।
- वे OO (प्रारंभिक EJB, CORBA) के शीर्ष पर एक आंतरिक-प्लेटफ़ॉर्म प्रभाव स्थापित करते हैं, जहां प्रोग्रामर को सभी कोड लिखने होते हैं, जिन्हें "ड्राइव" करने के लिए एसओ की आवश्यकता होती है। कक्षाएं एक सेवा की प्रकृति का केवल एक हिस्सा होती हैं और कई वर्गों को एक साथ सेवा बनाने के लिए लिखना पड़ता है। सभी कि बॉयलर प्लेट आवश्यक है क्योंकि कोई एसओ संकलक नहीं है जो इसे प्रोग्रामर के लिए करेगा। यह कुछ वैसा ही है जैसे कुछ लोगों ने O के लिए C में किया था जब C ++ नहीं था। आप केवल उस रिकॉर्ड को पास करते हैं जो ऑब्जेक्ट के डेटा को प्रक्रिया के पहले पैरामीटर के रूप में रखता है जो कि विधि है। OO भाषा में यह पैरामीटर निहित है और संकलक सभी कोड का उत्पादन करता है जो हमें SO के लिए आभासी कार्यों आदि के लिए चाहिए, यह स्पष्ट रूप से गायब है।
- विशेष रूप से नए ढांचे बड़े पैमाने पर ओओ भाषा में लापता भागों को जोड़ने के लिए एओपी या आत्मनिरीक्षण का उपयोग करते हैं। यह आवश्यक भाषा अभिव्यक्ति नहीं लाती है, लेकिन पिछले बिंदु में वर्णित बॉयलर प्लेटफ़ॉर्म कोड से बचा जाता है।
- बॉयलर प्लेट कोड के उत्पादन के लिए कुछ फ्रेमवर्क कोड पीढ़ी का उपयोग करते हैं। XML में कॉन्फ़िगरेशन फ़ाइल या OO कोड में एनोटेशन इसके लिए जानकारी का स्रोत है।
सभी घटनाएं जो मैंने ऊपर बताई हैं, उन्हें एसओ के लिए जिम्मेदार ठहराया जा सकता है, लेकिन मुझे आशा है कि यह स्पष्ट रूप से दिखाता है कि एसओ भाषा की आवश्यकता है। चूंकि यह प्रतिमान इतना लोकप्रिय है: एक क्यों नहीं है? या हो सकता है कि कुछ अकादमिक हों लेकिन कम से कम उद्योग एक का उपयोग नहीं करता है।