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