ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग: क्यों "ओरिएंटेड"?


14

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

जब तक मैं अलग-अलग प्रोग्रामिंग प्रतिमानों के बारे में नहीं जान पाया, तब तक यह वाक्यांश मुझे परेशान नहीं करता (मैं यह सूची https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms से प्राप्त कर रहा हूं ):

  • अनिवार्य
  • कार्यात्मक
  • प्रक्रियात्मक
  • स्ट्रक्चर्ड
  • घटना संचालित
  • वस्तु के उन्मुख
  • कथात्मक
  • ऑटोमेटा आधारित

मुझे लगता है कि यह एक संपूर्ण सूची नहीं है, और यह कि इन सभी अवधारणाएं समान नहीं हैं, और उनमें से अधिकांश भी अनन्य नहीं हैं, लेकिन मुझे समझ में नहीं आता है कि उनमें से ज्यादातर को सिर्फ एक शब्द क्यों मिलता है - अनिवार्यता; कार्यात्मक; घोषणात्मक - लेकिन जब हम वस्तुओं के साथ प्रोग्रामिंग के बारे में बात करते हैं, तो हमें स्पष्ट करना होगा कि हम उन वस्तुओं के आसपास उन्मुख हैं। क्या हम सिर्फ वस्तुओं का उपयोग नहीं कर सकते ? क्या हमारे पास सिर्फ वस्तुएं नहीं हैं? हमारे मार्गदर्शक तारे के रूप में उन्हें हमें क्यों उन्मुख करना चाहिए ?

यहाँ देख रहे हैं ( https://en.wikipedia.org/wiki/Object-oriented_programming ), कहीं भी शब्द "उन्मुख" शब्द का उपयोग अपने स्वयं के शब्द के रूप में किया जाता है। केवल "वस्तु" को समझाया गया है।

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

एक वाक्यांश के रूप में ऑब्जेक्ट प्रोग्रामिंग क्या है, यह वर्णन करने के लिए पर्याप्त नहीं है कि हम अपनी प्रोग्रामिंग में वस्तुओं का उपयोग करते समय क्या करते हैं?

जाहिर है मेरे लहजे से मुझे "उन्मुख" शब्द का बहुत शौक नहीं है। यह मुझे अदालत के रिपोर्टर के रूप में मेरे समय की याद दिलाता है, वकील को सुनने के बाद वकील "वाक्यांश का उपयोग करता है" एक प्रकार की मौखिक टिक के रूप में। इसका कोई मतलब नहीं था; यह केवल एक शब्द था जो वे हवा को भरने के लिए इस्तेमाल करते थे जबकि वे यह सोचने की कोशिश करते थे कि आगे क्या कहना है। हालाँकि, मैं भाषा के बदलाव की वकालत करने की कोशिश नहीं कर रहा हूँ, मैं बस पूछ रहा हूँ कि यह ऐसा क्यों है। यदि कोई जानता है कि यह विशुद्ध रूप से ऐतिहासिक, शाब्दिक कारणों के लिए उस तरह से क्यों जाना जाता है, तो इसका जवाब है। भाषा के बदलाव की वकालत करने के लिए अगर मैं कभी अपना समय बर्बाद करने का फैसला करता हूं तो यह गोला-बारूद होगा।

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


11
मुझे लगता है कि "निष्पक्ष" या "Objectional" क्या वास्तव में मतलब है की ;-) सही प्रभाव नहीं देना होगा
डॉक ब्राउन

मैंने "ऑब्जेक्टिफ़ाइड" माना, लेकिन फैसला किया कि गलत वाइब्स को भी बंद कर सकता है।
विस्मयादिबोधक


1
मुझे लगता है कि "वस्तु" गलती है, "उन्मुख" नहीं। जिसे हम ऑब्जेक्ट-ओरिएंटेड कहते हैं, वह आमतौर पर क्लास-ओरिएंटेड होता है।
स्टीव

1
कोई भी फीनिक्स राइट प्रशंसक इसे "OBJECTION !! प्रोग्रामिंग" कहना चाहते हैं?
कटाना ३१४

जवाबों:


24

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

  • अनिवार्य
  • कार्यात्मक
  • प्रक्रियात्मक
  • स्ट्रक्चर्ड
  • कथात्मक
  • घटना संचालित
  • ऑटोमेटा आधारित
  • वस्तु के उन्मुख

सभी शब्दों में क्या समानता है? वे सभी विशेषण हैं क्योंकि वे "प्रोग्रामिंग" शब्द को संशोधित करना चाहते हैं। इसके अलावा, "अनिवार्य" के अपवाद के साथ वे सभी "प्राकृतिक" विशेषण नहीं हैं, लेकिन "विशेषण" संज्ञा - संज्ञाएं जो वास्तव में प्रतिमान के मूल का वर्णन करती हैं: फ़ंक्शन, संरचना, ऑटोमेटा, और ऑब्जेक्ट।

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

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


1
उत्कृष्ट बिंदु (हालांकि मुझे लगता है कि आप विशेषण का मतलब है, विशेषण नहीं - इस संदर्भ में "प्रोग्रामिंग" एक संज्ञा है)।
JW01

@ JW01: ओह, आप सही कह रहे हैं
माइकल बोर्गवर्ड

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

आश्चर्य है कि उसने ऑब्जेक्ट-ऑब्सेस्ड क्यों नहीं चुना ... ओह, हाँ, वे केवल जोश हैं जो नहीं जानते कि कब रोकना है। ;-)
डेडुप्लिकेटर

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

18

लेकिन जब हम वस्तुओं के साथ प्रोग्रामिंग के बारे में बात करते हैं, तो हमें स्पष्ट करना होगा कि हम उन वस्तुओं के आसपास उन्मुख हैं। क्या हम सिर्फ वस्तुओं का उपयोग नहीं कर सकते? क्या हमारे पास सिर्फ वस्तुएं नहीं हैं?

सच कहूं, तो यह इतिहास की पकड़ है। कार्यात्मक प्रोग्रामिंग वास्तव में फ़ंक्शन-उन्मुख प्रोग्रामिंग है, घोषणात्मक प्रोग्रामिंग वास्तव में घोषणा-उन्मुख प्रोग्रामिंग है ... आखिरकार हम केवल फ़ंक्शन का उपयोग नहीं करते हैं? क्या हमारे पास केवल कार्य नहीं हो सकते?

"ऑब्जेक्ट ओरिएंटेड" बेहतर जीभ को रोल करता है, और ऐतिहासिक रूप से घनीभूत होता है।

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


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

1
मुझे लगता है कि आप वास्तव में उस पर कील मारते हैं: हम ऑब्जेक्ट-ओरिएंटेड डिज़ाइन करते हैं, और यही कारण है कि भाषाएं ऑब्जेक्ट-ओरिएंटेड हैं - हमें इस डिज़ाइन को व्यक्त करने की अनुमति देने के लिए।
केटफ

1
@Excrubulent नहीं, "उन्मुख" जोड़ने से यह अधिक विशिष्ट हो जाता है। "ऑब्जेक्ट ओरिएंटेड" का मतलब है कि हम प्रोग्रामिंग ऑब्जेक्ट्स के बारे में बारीकियों पर चर्चा नहीं कर रहे हैं, बल्कि इसके बजाय कि कैसे प्रोग्राम को डिज़ाइन किया जाए ताकि वे ऑब्जेक्ट का सार्थक तरीके से उपयोग करें। "ऑब्जेक्ट प्रोग्रामिंग", "फ़ंक्शन प्रोग्रामिंग" या "घोषणा प्रोग्रामिंग" विशेष रूप से डिजाइन सिद्धांतों के बजाय उन विशिष्ट अवधारणा कार्यान्वयन के बारे में बात करना होगा। "कार्यात्मक" और "घोषणात्मक" ऐसे प्रत्ययों वाले शब्द हैं जो एक ही अर्थ को व्यक्त करने का प्रयास करते हैं, लेकिन वस्तुओं के लिए "आपत्तिजनक" या "उद्देश्य" बहुत मायने नहीं रखते हैं।
इलारी कजस्ट जूल

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

मैंने जवाबों को बदल दिया है क्योंकि माइकल बोर्गवर्ड का जवाब वास्तव में शब्द का अर्थ बताता है और यह कैसे वाक्यांश को संशोधित करता है।
Excrubulent

2

इसे कॉल करना जो यह समझाने में मदद करता है कि ऑब्जेक्ट प्रतिमान का एक बहुत महत्वपूर्ण हिस्सा हैं।

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

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

हम इसे ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग कहते हैं क्योंकि OO स्टाइल में लिखे गए प्रोग्राम में सिर्फ ऑब्जेक्ट नहीं होते हैं; पूरे कार्यक्रम की संरचना उनके आसपास और उनके काम करने के तरीके पर आधारित है।


यह टेलस्टाइन का एक समान उत्तर है, सिवाय इसके कि आपको लगता है कि "ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग" एक शब्द के रूप में "ऑब्जेक्ट प्रोग्रामिंग" के लिए वास्तव में मौलिक रूप से अलग है। क्या आप बता सकते हैं कि वे कैसे भिन्न हो सकते हैं? मेरा मतलब है, यह मुझे लगता है कि ओओपी एक ढीला पर्याप्त शब्द है कि ओपी उसी कार्य को भी पूरा करेगा।
विस्मयादिबोधक

2
इन दिनों बहुत से छात्र सीधे पहली भाषा के रूप में जावा या सी # में जाते हैं, और आईएमओ ऐसा करने से ओओ के लाभों को समझने में चूक जाते हैं। - दरअसल, मैंने C ++ पर शुरुआत की थी, और अपने पहले असाइनमेंट में मैंने ऑब्जेक्ट्स और फ़ंक्शंस का मिश्रण इस्तेमाल किया था, लेकिन मेरे फ़ंक्शंस के उपयोग के लिए नीचे चिह्नित किया गया था। उन कार्यों में से कुछ विशुद्ध रूप से कार्यात्मक थे, और एक वस्तु में इनकैप्सुलेशन से बिल्कुल भी लाभ नहीं हुआ, लेकिन अन्य जो काम करने के लिए चर में संकेत ले गए (यानी: संशोधित राज्य की जानकारी), एक बार बनाने और कॉल करने में बहुत आसान हो गए एक वस्तु में, इसलिए मैंने इसके दोनों किनारों को देखा है।
विस्मयादिबोधक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.