Tuesday, March 27, 2018

অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং - ৪ঃ ইনহেরিটেন্স

ইনহেরিট হল একটা ক্লাসের এলিমেন্ট অন্য ক্লাসে নিয়ে আসা। এটা পুরোটা রিয়েল লাইফ ইনহেরিটেন্স এর মত। কেউ যদি উত্তরাধিকার সূত্রে কোন কিছুর মালিক হয় তাকেই ইনহেরিটেন্স বলে। অব্জেক্ট অরিয়েন্টেডেও বিষয়টা এরকমই। কিন্তু এটা কেন দরকার-
ধরা যাক, আমরা দুটো ক্লাস তৈরী করবো, Human এবং Dog নামে। ক্লাসগুলোতে কি কি থাকবে তা নীচের টেবিলে দেওয়া হল-

এই দুটো ক্লাস লিখতে হলে আমাদের মোট ৪ টা ভেরিয়েবল এবং ৫ টা মেথড লিখতে হবে। কিন্তু যদি একইভাবে আমাদের ১০০০ টা প্রাণী নিয়ে লিখতে হয় তাহলে আমাদের টোটাল ভেরিয়েবল এবং মেথডের সংখ্যা কত হবে জানো? টোটাল ভেরিয়েবল হবে ৪০০০০ এবং টোটাল মেথড হবে ৫০০০। জীবন শেষ! আর ক্লাসের ভিতর আরো বেশী কিছু লিখার দরকার হবে তাতে তো কোন কথাই নাই। কোডিং না করে পালানো লাগবে! তবে আমরা চাইলে এই সংখ্যাটা অনেক কমিয়ে আনতে পারি।

উপরে টেবিলের দিকে খেয়াল করো আমরা কয়েকটা জিনিস একাধিকবার লিখছি। অবজেক্ট অরিয়েন্টেডের একটা নিতী হল কোডের রিপিটেশন কমানো কিন্তু আমরা সেই কাজটিই করে বসেছি। নীচের ছবিতে দেখো -


এগুলো একাধিকবার লিখার আসলে কোন প্রয়োজনই নেই। এই জিনিসটা আমরা ইনহেরিটেন্স ইউজ করে এভয়েড করবো।  অথ্যাৎ, যে এলিমেন্টগুলো বার বার লিখতে হচ্ছে সেই এলিমেন্টগুলো আলাদা একটা ক্লাসে লিখবো ধরা যাক সেই ক্লাসটির নাম Animal এখন যে ক্লাসেরই এই এলিমেন্টগুলো দরকার পড়বে সেই ক্লাসে Animal ক্লাসটি ইনহেরিট করবো-


আমরা জানি সকল প্রানীরই name এবং age থাকে। আবার প্রানীই হাটতে এবং ডাকতে পারে। তাই ওই ক্লাসের নাম দিলাম Animal. তুমি চাইলে যেকোন মিনিংফুল নাম দিতে পারো। 
উপরে দেখা যাচ্ছে Human এবং Dog ক্লাস Animal ক্লাসকে Inherit করছেএর ফলে Animal ক্লাসে যা আছে তা Human এবং Dog ক্লাসে চলে আসছে। তাহলে আমাদের আর রিপিট এলিমেন্ট গুলো আর লিখতে হচ্ছেনা। এখানে আমরা ৯ টা এলিমেন্ট এর পরিবর্তে ৬ টা লিখে কাজ সেরে ফেলছি। ১০০০ এর জন্য এখন কয়টা লিখতে হচ্ছে জানো ?  ২ টা ভেরিয়েবল এবং ৩টা মেথড!! এভাবে আমরা কোড রিপিটেশন থেকে মুক্তি পেতে পারি এবং অনেক অনেক সময় বেঁচে যায়।
একটা ক্লাসকে ইনহেরিট করার জন্য জাভাতে extends নামের দারুন এক অপারেটর আছে। যা দিয়ে একটা ক্লাসকে অন্য ক্লাস থেকে ইনহেরিট করা যায়। আমরা উপরের কাজটিই জাভা দিয়ে লিখবো-
 public class Animal {  
      public String name;  
      public int age;  
      public void Walk()  
      {  
           System.out.println(name+ " Can walk");  
      }  
      public void Call()  
      {  
           System.out.println(name+ " Can Call");  
      }       
 }  
 public class Human extends Animal {  
      public void think()  
      {  
           System.out.println(name+ "Can think");  
      }  
 }  
 public class Dog extends Animal {  
 }  
 public class MainClass{  
      public static void main(String[] args) {  
            
           //creating humans object
           Human human1 = new Human();  
           human1.name = "Rakib";  
           human1.age = 23;  
           
           //creating dogs object
           Dog dog1 = new Dog();  
           dog1.name = "John";  
           dog1.age = 2;  
          
           //showing humans information
           System.out.println(human1.name+ " is "+ human1.age+ " Years Old");  
           human1.Walk();  
           
           //showing dogs information
           System.out.println(dog1.name+ " is "+ dog1.age+ " Years Old");
           dog1.Walk();  
      }  
 }  
 OUTPUT  
 Rakib is 23 Years Old  
 John is 2 Years Old  
 Rakib Can Walk  
 John Can Walk  
Extends - এটা হল জাভার একটি অপারেটর, যার সাহায্যে এক ক্লাসের পাবলিক এলিমেন্ট অন্য ক্লাসে ইনহেরিট করানো হয়।
Practice:
1. Do the above task using encaptulation and constructor

No comments:

Post a Comment