मैं अपने पुराने जावा गेम प्रोजेक्ट्स में से एक के लिए यूएमएल आरेख बनाने की कोशिश कर रहा था। खेल काम करता है लेकिन मुझे एहसास हुआ कि कई वर्गों को विरासत में नहीं मिला। चूंकि खेल काम करता है, मुझे पता है कि किसी कार्यक्रम के काम करने के लिए कक्षाओं को विरासत में लेने की बिल्कुल आवश्यकता नहीं है। मैं बस सोच रहा था कि यह एक अच्छा विचार हो सकता है या यह जावा सम्मेलन है। अग्रिम में धन्यवाद!

0
Hey_it's_Alex 25 जिंदा 2020, 02:55

2 जवाब

सबसे बढ़िया उत्तर

मैं बस सोच रहा था कि यह एक अच्छा विचार हो सकता है या यह जावा सम्मेलन है।

एक वर्ग के लिए extend किसी अन्य वर्ग के लिए यह एक अच्छा विचार नहीं है यदि मॉडलिंग यह सुझाव नहीं देती है कि यह आवश्यक है। निश्चित रूप से, उस प्रभाव के लिए कोई जावा सम्मेलन नहीं है।

जहां जरूरत हो वहां विरासत का इस्तेमाल करें। यदि इसकी आवश्यकता नहीं है, तो इसका उपयोग न करें।

जैसा कि उल्लेख किया गया है, सभी जावा वर्ग1 (और सरणी प्रकार) में उनके अंतिम सुपरक्लास के रूप में java.lang.Object हैं। आपके एप्लिकेशन की सभी कक्षाओं में एक सुपरक्लास होगा, भले ही वे स्पष्ट रूप से extend एक न हों।


क्या यह extend के लिए हानिकारक है जब आपको इसकी आवश्यकता नहीं है?

मैं तर्क दूंगा कि यह है।

मान लें (तर्क के लिए) कि extend मॉडल के कार्यान्वयन की मॉडलिंग या कार्यात्मक "जरूरतों" द्वारा वारंट नहीं किया गया है।

  1. ज्यादा से ज्यादा, एक अनावश्यक extends बेमानी है।

  2. extends भ्रामक और समय बर्बाद करने वाला है। यह भविष्य के पाठक को विरासत के अर्थ की जांच करने में समय व्यतीत करने का कारण बन सकता है; यानी यह वहां क्यों है, इसे क्या हासिल होता है। क्योंकि जावा प्रोग्रामर मानते हैं कि वंशानुक्रम संबंध एक उद्देश्य के लिए हैं।

  3. अस्पष्ट मामलों में, यह समस्या पैदा कर सकता है। उदाहरण के लिए, एक भावी अनुरक्षक सामान्य सुपरक्लास के उद्देश्य (कमी) को गलत समझ सकता है और इसमें अनुपयुक्त कार्यक्षमता जोड़ना शुरू कर सकता है। बेशक, इसके लिए यह प्राथमिक दोष भविष्य के डेवलपर पर है, लेकिन वह योगदान कारक के रूप में सामान्य सुपरक्लास के अस्तित्व पर उंगली उठा सकता है।

  4. अनावश्यक विधि प्रेषण के कारण प्रदर्शन समस्याएँ हो सकती हैं। (यह जावा कंपाइलर निर्भर होगा।)

  5. यदि आपको डेटाबेस टेबल पर कक्षाओं को मैप करने के लिए हाइबरनेट जैसी ऑब्जेक्ट-रिलेशनल मैपिंग तकनीक (उदाहरण के लिए) का उपयोग करने की आवश्यकता हो तो समस्याएं हो सकती हैं। जावा इनहेरिटेंस ORM मैपिंग को निर्दिष्ट करने की समस्या को जटिल करता है। आप उस जटिलता को नहीं चाहते हैं यदि यह अनावश्यक है।


1 - ... Object के अलावा।

0
Stephen C 25 जिंदा 2020, 05:36

चिंता न करें, आपकी सभी कक्षाएं java.lang.Object से विरासत में मिली हैं

1
C.B. 25 जिंदा 2020, 03:10