क्या "आयत से वर्ग वारिस" विरोधाभास का कोई विशिष्ट नाम है?


18

OOP की एक निश्चित विफलता को वर्ग वर्ग के साथ दिखाया गया है जो आयत से विरासत में मिला है, जहाँ तार्किक रूप से वर्ग आयत की एक विशेषता है और इसलिए इसे इनहेरिट करना चाहिए, लेकिन जब आप स्क्वायर की लंबाई या चौड़ाई को बदलने का प्रयास करते हैं तो सब कुछ अलग हो जाता है।

क्या उस मामले में क्या गलत हो रहा है, इसका वर्णन करने के लिए एक विशिष्ट शब्द है?


2
क्या आप बता सकते हैं कि वास्तव में "क्या गलत हो रहा है"? मुझे समझ में नहीं आ रहा है कि आपका क्या मतलब है
gnat

1
एक आयत की मानें तो एक आभासी विधि है जो लंबाई और चौड़ाई को पार करके आकार सेट करने की अनुमति देती है, एक वर्ग पर एक अलग लंबाई और चौड़ाई सेट करना एक आयत वापस कर सकता है और एक आयत पर एक ही लंबाई और चौड़ाई सेट करना एक वर्ग वापस कर सकता है। किसी भी कोड को स्पष्ट रूप से वर्ग को जानने की जरूरत है जो एक वर्ग में डालने का प्रयास कर सकता है। मैं नहीं देखता कि विफलता

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

1
FWIW: विशेष रूप से, समस्या यह है कि पढ़ने और लिखने के इंटरफेस मेल नहीं खाते हैं। यानी आप एक वृत्त को एक दीर्घवृत्त के विशेषीकरण के रूप में पढ़ सकते हैं, लेकिन केवल एक वृत्त के विशेषण के रूप में एक दीर्घवृत्त लिख सकते हैं।
मैके

1
@GrandmasterB मैं "किसी भी व्यक्ति, वस्तु या स्थिति से स्पष्ट रूप से विरोधाभासी प्रकृति का प्रदर्शन करता हूं।" विरोधाभास यह है कि यदि वर्ग में अलग-अलग गुण हैं, तो हमें यह कहना होगा कि "एक वर्ग एक प्रकार का आयत नहीं है", जब यह तथ्य होता है कि हम वर्ग को आयत का एक उपप्रकार होने की उम्मीद करते हैं। संभवतः किसी भी वास्तविक अनुप्रयोग में रेक्टेंगल और स्क्वायर प्रकार नहीं होंगे, यह एक निश्चित प्रकार की समस्या को चित्रित करने के लिए केवल एक अमूर्तता है जो वर्ग-आधारित प्रतिमानों में दिखाई दे सकती है।
विक्टर

जवाबों:


27

विकिपीडिया केवल इसे सर्कल-एलिप्से समस्या के रूप में संदर्भित करता है

वृत्त-अंडाकार समस्या सॉफ्टवेयर के विकास में (कभी कभी के रूप में जाना वर्ग आयत समस्या ) नुकसान जो जब वस्तु मॉडलिंग में उप-प्रकार बहुरूपता का उपयोग कर पैदा कर सकते की एक संख्या को दिखाता है। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का उपयोग करते समय मुद्दे सबसे अधिक सामना करते हैं।

यह संक्षिप्त एसओएलआईडी में एल है जिसे लिस्कोव प्रतिस्थापन सिद्धांत के रूप में जाना जाता है । यह समस्या उस सिद्धांत के उल्लंघन के रूप में उत्पन्न होती है।

समस्या की चिंता जो उपनिवेश या वंशानुक्रम संबंध वर्गों के बीच मौजूद होनी चाहिए जो मंडलियों और दीर्घवृत्त (या, इसी तरह, वर्गों और आयतों) का प्रतिनिधित्व करती है। आमतौर पर, समस्या उन कठिनाइयों को दर्शाती है जो तब हो सकती हैं जब एक बेस क्लास में ऐसी विधियाँ होती हैं जो किसी वस्तु को इस तरीके से परिवर्तित करती हैं जो एक व्युत्पन्न वर्ग में पाए जाने वाले (अधिक मजबूत) अनियंत्रित को अमान्य कर सकती है, जिससे लिस्कोव प्रतिस्थापन सिद्धांत का उल्लंघन हो सकता है ...


1
और, इसे पढ़ते हुए, विकिपीडिया में अधिक अकादमिक व्याख्या के रूप में उल्लेख किया गया है "लिस्कॉव प्रतिस्थापन सिद्धांत का उल्लंघन"। धन्यवाद :)
विक्टर

1
खैर, यह केवल उल्लंघन है कि आप इसे कैसे देखते हैं। व्यक्तिगत रूप से, सभी मंडलियां दीर्घवृत्त हैं; कोई उल्लंघन नहीं है। यदि एलिप्से के तरीके प्रतिबंधात्मक हो जाते हैं तो उल्लंघन शुरू हो जाता है। तब, उस विशेष परिदृश्य में, एक वृत्त उस विशिष्ट अनुबंध के उपप्रकार का उपप्रकार नहीं हो सकता है।
मार्क कैनलस

6
@MarkCanlas समस्या अनजाने में लिस्कोव प्रतिस्थापन सिद्धांत का उल्लंघन है। यह अन्य सिद्धांतों का उल्लंघन नहीं हो सकता है, लेकिन किसी ने भी दावा नहीं किया है। जब समस्या उत्पन्न नहीं होती है क्योंकि अनुबंधों में कोई भी अपरिवर्तनीय शामिल नहीं होता है जो टूट जाएगा (हालांकि मैं एक उपयोगी मॉडल की कल्पना करने में विफल रहता हूं जहां यह सच है), एलएसपी का उल्लंघन नहीं हो सकता है, लेकिन इसका मतलब यह नहीं है कि समस्या , जब ऐसा होता है, तो एलएसपी उल्लंघन के कारण नहीं है।

7
@ मर्क कैनलस: नोप, निरंतर सर्कल एक स्थिर दीर्घवृत्त है, उत्परिवर्तित वृत्त एक उत्परिवर्ती दीर्घवृत्त नहीं है। ज्यामिति में निरंतरता मान ली जाती है, आप एक दीर्घवृत्त नहीं बदल सकते, आप एक और दीर्घवृत्त ले सकते हैं
अधिकतम १४

1
लिसकोव प्रतिस्थापन सिद्धांत का इतिहास बाधा / नियम कहता है कि जब एक उपप्रकार नए तरीकों को जोड़ता है, तो उन विधियों को ऑब्जेक्ट की स्थिति को इस तरह से हेरफेर करने की अनुमति नहीं है कि यह एक इतिहास (यानी राज्यों की एक श्रृंखला) बनाता है जो नहीं है सुपरटाइप में अनुमति दी गई है। उदाहरण के लिए, आप एक अपरिवर्तनीय परिवर्तनशील का उपप्रकार नहीं बना सकते हैं, क्योंकि जब केवल सुपरस्क्रिप्ट के तरीकों के माध्यम से हेरफेर किया जाता है, तो राज्य हमेशा समान होता है, जबकि जब उपप्रकार के उत्परिवर्ती तरीकों के माध्यम से छेड़छाड़ की जाती है, तो राज्य परिवर्तन करता है। यह एक ऐसा इतिहास है जिसकी अनुमति सुपरपाइप ने नहीं दी है।
जोर्ग डब्ल्यू मित्तग


8

Liskov प्रतिस्थापन सिद्धांत की तुलना में अधिक मौलिक स्तर पर, यह एक श्रेणी की त्रुटि या श्रेणी की गलती है

मॉडलिंग व्यवहार के संदर्भ में एक वर्ग केवल आयत का एक प्रकार नहीं है।

जब आपको पता चलता है कि यह समस्या वाष्पीकृत हो गई है क्योंकि प्रारंभिक धारणा (एक वर्ग आयत का एक प्रकार है) को नाटक से हटा दिया गया है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.