परिचयकौन सा ठोस सिद्धांतों का उल्लंघन किया जाता है?
मैं विरासत समस्याओं के बारे में मेरे मालिक थीसिस पर काम करते हैं और कुछ संकेतक जो पता चलता है कि एक विरासत समस्या मौजूद बाहर काम करते हैं।
निम्न उदाहरण की तरह:
उदाहरण
public static String getAnimalNoise(Animal animal) {
if (animal instanceof Dog)
return "Woof";
if (animal instanceof Cat)
return "Miau";
return "";
}
विधि स्ट्रिंग "Woof"
लौटाता है यदि दिए गए पशु उदाहरण एक Dog
और "Miau"
है अगर यह एक Cat
है। खाली स्ट्रिंग क्योंकि कुछ जानवर बिल्कुल कोई शोर नहीं करते हैं।
तो इसके लिए सही समाधान पशु वर्ग में getNoise
विधि के साथ बहुरूपता का उपयोग करना चाहिए।
मैंने विरासत की समस्याओं के विभिन्न संकेतकों का विश्लेषण किया है और कहना चाहते हैं कि उनमें से कुछ SOLID Principle का उल्लंघन करते हैं।
मैंने सोचा था कि उपरोक्त उदाहरण का उल्लंघन करती है:
- एकल जिम्मेदारी सिद्धांत (SRP)
- खुला/बंद सिद्धांत (ओसीपी)
- Liskov प्रतिस्थापन सिद्धांत (LSP)
- निर्भरता उलटा सिद्धांत (डीआईपी)
लेकिन मुझे सच में यकीन नहीं है कि यह सभी के लिए सच है या नहीं।
मैंने सोचा:
सिद्धांत उल्लंघन
SRP उल्लंघन
क्योंकि सब पर सशर्त बयान क्योंकि स्विच मामले बयान या अधिक की तरह, SRP का उल्लंघन करती है एक से अधिक यदि अन्य कथन एक से अधिक respon पर विचार कर रहे हैं sibility।
यह दो मामलों में मौजूद है इसलिए विधि को बदलने के एक से अधिक कारण हैं।
ओसीपी उल्लंघन
क्योंकि अगर एक नया जानवर एक नया मामला विधि में जोड़ा जाना चाहिए जोड़ा जाता है जिससे विधि संशोधन के लिए पास नहीं है।
LSP उल्लंघन
प्रत्येक शाखा पशु उप प्रकार की निर्भर विभिन्न कार्यों को निष्पादित करता है। जो मुझे लगता है कि एलएसपी का उल्लंघन करता है? मुझे आयताकार और वर्ग और getArea का उदाहरण पता है लेकिन इन उदाहरण मैंने सोचा कि उल्लंघन के लिए भी फिट बैठता है।
DIP उल्लंघन
सशर्त बयान निर्भरता का अर्थ है कि बयान के विवरण पर और कपोल-कल्पना जो DIP का उल्लंघन करती है पर नहीं निर्भर कर रहे हैं ले लो।
प्रश्न:
तो प्रश्न, दिए गए उदाहरण के लिए, यह देखते हुए सिद्धांतों वास्तव में उल्लंघन किया है और तर्क सही है कर रहे हैं?
यह प्रोग्रामर.एसई पर अधिक विषय पर हो सकता है। – MSalters