ट्रैक
/
Java
Java
/
अभ्यास
/
जादूगर और योद्धा
जादूगर और योद्धा

जादूगर और योद्धा

सीखने का अभ्यास

परिचय

इनहेरिटेंस

इनहेरिटेंस OOP (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) की एक मुख्य अवधारणा है। यह IS-A संबंध को दर्शाता है। प्रोग्रामिंग में इसका अर्थ बिल्कुल वही है जो अंग्रेज़ी में है: पैरेंट से विशेषताएँ विरासत में लेना (प्रोग्रामिंग में विशेषताएँ आम तौर पर फंक्शन और वेरिएबल होती हैं)।

एक क्लास Animal पर विचार कीजिए, जैसा कि यहाँ दिखाया गया है,

//Creating an Animal class with bark() as a member function.
public class Animal {

    public void bark() {
        System.out.println("This is an animal");
    }

}

Animal एक पैरेंट क्लास है, क्योंकि इस क्लास की जो प्रॉपर्टी हैं, उन्हें सामान्य रूप से सभी जानवरों तक बढ़ाया जा सकता है।

एक जानवर की कल्पना कीजिए, जिसका नाम Lion है और जिसकी क्लास कुछ ऐसी है,

//Lion class is a child class of Animal.
public class Lion extends Animal {

    @Override
    public void bark() {
        System.out.println("Lion here!!");
    }

}
Note

Override एनोटेशन यह बताने के लिए इस्तेमाल किया जाता है कि सबक्लास का कोई मेथड अपने सुपरक्लास के मेथड को ओवरराइड कर रहा है। यह कड़ाई से ज़रूरी नहीं है, लेकिन इसे इस्तेमाल करना अच्छी आदत है।

अब जब भी हम यह करते हैं,

Animal animal = new Lion(); //creating instance of Animal, of type Lion
animal.bark();

ध्यान दीजिए: यहाँ Animal क्लास को Lion से इनिशियलाइज़ किया जा रहा है। आउटपुट कुछ इस तरह होगा

Lion here!!

OOP के अनुसार इनहेरिटेंस कई प्रकार के होते हैं, लेकिन Java उनमें से कुछ ही प्रकारों का समर्थन करता है (मल्टी-लेवल और हायरार्किकल)। इसके बारे में और पढ़ने के लिए यह पढ़िए।

निर्देश

इस अभ्यास में आप एक रोल-प्लेइंग गेम खेल रहे हैं, जिसमें अलग-अलग तरह के फाइटर एक-दूसरे से लड़ सकते हैं। हर तरह के फाइटर के लिए गेम के नियम अलग-अलग हैं। हम दो खास तरहों पर ध्यान देंगे: Wizard और Warrior।

Warrior के लिए ये नियम हैं:

  • एक Warrior कभी असुरक्षित नहीं होता।
  • अगर वह फाइटर, जिस पर Warrior हमला कर रहा है, असुरक्षित नहीं है, तो Warrior 6 अंक का नुकसान पहुँचाता है।
  • अगर वह फाइटर, जिस पर Warrior हमला कर रहा है, असुरक्षित है, तो Warrior 10 अंक का नुकसान पहुँचाता है।

Wizard के लिए ये नियम हैं:

  • एक Wizard पहले से एक मंत्र तैयार कर सकता है।
  • एक Wizard असुरक्षित होता है, जब तक कि उसने पहले से कोई मंत्र तैयार न किया हो।
  • अगर उसने पहले से मंत्र तैयार किया है, तो वह 12 अंक का नुकसान पहुँचाता है।
  • अगर उसने पहले से मंत्र तैयार नहीं किया है, तो वह 3 अंक का नुकसान पहुँचाता है।

1. Warrior क्लास बनाइए

Warrior नाम की एक नई क्लास बनाइए। यह क्लास मौजूदा Fighter क्लास से इनहेरिट करनी चाहिए।

2. Warrior का वर्णन कीजिए

Warrior क्लास को इस तरह बदलिए कि उसका toString() मेथड बताए कि यह किस तरह का फाइटर है। इस मेथड को "Fighter is a Warrior" स्ट्रिंग लौटानी चाहिए।

Warrior warrior = new Warrior();
warrior.toString();
// => "Fighter is a Warrior"

3. Warrior को सुरक्षित बनाइए

Warrior क्लास को इस तरह बदलिए कि उसका isVulnerable() मेथड हमेशा false लौटाए।

Warrior warrior = new Warrior();
warrior.isVulnerable();
// => false

4. Warrior के लिए नुकसान के अंक निकालिए

Warrior क्लास को इस तरह बदलिए कि उसका getDamagePoints(Fighter) मेथड ऊपर बताए गए नियमों के अनुसार Warrior द्वारा पहुँचाए जाने वाले नुकसान की गणना करे।

Warrior warrior = new Warrior();
Wizard wizard = new Wizard();

warrior.getDamagePoints(wizard);
// => 10

5. Wizard क्लास बनाइए

Wizard नाम की एक और नई क्लास बनाइए। यह क्लास भी मौजूदा Fighter क्लास से इनहेरिट करनी चाहिए।

6. Wizard का वर्णन कीजिए

Wizard क्लास को इस तरह बदलिए कि उसका toString() मेथड बताए कि यह किस तरह का फाइटर है। इस मेथड को "Fighter is a Wizard" स्ट्रिंग लौटानी चाहिए।

Wizard wizard = new Wizard();
wizard.toString();
// => "Fighter is a Wizard"

7. Wizard को मंत्र तैयार करने दीजिए और मंत्र तैयार न होने पर उसे असुरक्षित बनाइए

Wizard क्लास में बदलाव कीजिए और prepareSpell() नाम का एक मेथड जोड़िए। क्लास को याद रखना चाहिए कि यह मेथड कब कॉल किया गया, और यह सुनिश्चित करना चाहिए कि उसका isVulnerable() मेथड तभी false लौटाए जब कोई मंत्र तैयार हो।

Wizard wizard = new Wizard();
wizard.prepareSpell();
wizard.isVulnerable();
// => false

8. Wizard के लिए नुकसान के अंक निकालिए

Wizard क्लास को इस तरह बदलिए कि उसका getDamagePoints(Fighter) मेथड ऊपर बताए गए नियमों के अनुसार Wizard द्वारा पहुँचाए जाने वाले नुकसान की गणना करे।

Wizard wizard = new Wizard();
Warrior warrior = new Warrior();

wizard.prepareSpell();
wizard.getDamagePoints(warrior);
// => 12
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Java Exercism

जादूगर और योद्धा शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Java को 26 कॉन्सेप्ट158 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।