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