मैं आमतौर पर यह सुनिश्चित करने का प्रयास करता हूं कि मेरा ऑब्जेक्ट उदाहरण Liskov Substitution Principle का अनुपालन करता है, लेकिन मैंने हमेशा सोचा है कि क्या लोग सोचते हैं कि एलएसपी को कन्स्ट्रक्टरों पर भी आवेदन करना चाहिए?क्या रचनाकारों को लिस्कोव प्रतिस्थापन सिद्धांत का अनुपालन करना चाहिए?
मैंने इसके लिए googling की कोशिश की है, लेकिन मैं किसी भी मजबूत राय को खोजने में सक्षम नहीं हूं।
मुझे ध्यान रखना चाहिए कि मेरा अधिकांश कोड रूबी में है, लेकिन मुझे कभी-कभी पता चलता है कि मेरे सबक्लास निर्माता मूल वर्ग से थोड़ा अलग हैं। वे तर्कों का एक ही आधार सेट लेते हैं, और अक्सर अतिरिक्त तर्क देते हैं। कभी-कभी यह अन्य वर्ग विधियों के साथ भी होता है।
मेरे सिर के पीछे यह हमेशा एक एलएसपी उल्लंघन की तरह महसूस किया है, लेकिन मैं देखना चाहता था कि कोई और भी इस तरह महसूस करता है।
"जब आप एक निर्माता का उपयोग करते हैं तो आप जानते हैं कि आप उप प्रकार से निपट रहे हैं।" धन्यवाद। यह एक बड़ा मुद्दा है। – Chance
रचनाकारों, स्थैतिक फैक्ट्री विधियों, फैक्ट्री विधियों के बीच एक अंतर बनाने के लिए संभवतः महत्वपूर्ण है जो कि उत्पाद के प्रकार (सबसे विशेष रूप से 'क्लोन'), और अन्य कारखानों के उदाहरण हैं। स्टेटिक फैक्ट्रियां विभिन्न प्रकार की वस्तुओं का उत्पादन कर सकती हैं जो रिटर्न प्रकार से ली गई हैं, लेकिन एलएसपी उत्पादित सभी वस्तुओं पर लागू होना चाहिए; हालांकि, कोई आवश्यकता नहीं है कि व्युत्पन्न वर्ग बेस क्लास के समान स्थिर तरीकों का समर्थन करते हैं। यदि कोई वर्ग 'क्लोन' जैसी फैक्ट्री विधि का समर्थन करता है, तो किसी को एलएसपी का सम्मान करना चाहिए और उपप्रकारों में समान अर्थशास्त्र का समर्थन करना चाहिए। – supercat
कारखानों के लिए जो अन्य प्रकार की चीजें लौटाते हैं, व्युत्पन्न फैक्ट्री से लौटाई गई वस्तु को उस वस्तु के उदाहरण के रूप में उपयोग करने योग्य होना चाहिए जो आधार कारखाने से वापस किया जाएगा। इसलिए यदि 'कारफैक्टरी' में 'मेककर()' विधि है जो 'कार' लौटाती है, जो बदले में 'ड्राइव()' विधि का समर्थन करती है, तो उसे 'SomeCarFactory.MakeCar() ड्राइव() ड्राइव' कॉल करने में सक्षम होना चाहिए) 'कुछ करफैक्टरी' वास्तव में एक 'फोर्ड फैक्ट्री' है (जिसे 'कारफैक्टरी' प्राप्त होता है) जो 'फोर्ड' (जो 'कार' प्राप्त करता है) देता है। – supercat