Wednesday, October 11, 2017

C# For Beginners , Part-21 (Inheritance)

            আজকে আমরা ইনহেরিটেন্স এর বেসিক নিয়ে কিছু কথাবার্তা বলবো ।।

খুবই মজার একটি বিষয় , তো চলো - সিম্পল একটা কোড দেখে আসি আগে ------------------

using System;
class FullTimeEmployee
{
    string firstname;
    string lastname;
    double YearlySalary;
    public void Fullname()
    {
        firstname ="Naim";
        lastname="Shahriar";
        Console.WriteLine("FIRST Name = {0} , LAST Name = {1}", firstname, lastname);
    }
}
class PartTimeEmployee
{
    string firstname;
    string lastname;
    double HourlyRate;
    public void Fullname()
    {
        firstname = "Joy";
        lastname = "Mollick";
        Console.WriteLine("FIRST Name = {0} , LAST Name = {1}", firstname, lastname);
    }

}

class Program
{
    public static void Main()

    {
        FullTimeEmployee FTE = new FullTimeEmployee();
        FTE.Fullname();

        PartTimeEmployee PTE = new PartTimeEmployee();
        PTE.Fullname();
        Console.ReadKey();
    }
}

 খুবই সিম্পল একটা কোড , যাই হোক - রান করালে ঠিকঠাক আউটপুট পাবা ।।এখন তুমি নিজে একটু চিন্তা করো ।। FullTimeEmployee ও PartTimeEmployee এর প্রোপার্টি'স গুলোর মধ্যে , অনেক মিল ।। শুধু , দুই-একটা জিনিস আলাদা ।। এখন এরকম যদি , তোমায় একশটা ক্লাস ক্রিয়েট করতে হবে , তখন একই প্রোপার্টি গুলো বার বার কপি-পেস্ট / টাইপিং  করতে অনেক সমস্যা হবে , যদি কোনো এরর হয় , সেটা খুজে পেতেও বেশ বেগ পেতে হবে  ।।

এই জন্য , আমরা কমন প্রোপার্টি গুলোকে একটা স্পেসিফিক ক্লাসে রেখে ,সেখান থেকে নতুন ক্লাস ডিরাইভ করবো ।। এই কমন ক্লাসটিকে বলা হবে , বেইস / প্যারেন্ট ক্লাস ।। আর , ওই বেইস ক্লাস থেকে নতুন নতুন যে কয়টি ক্লাস  ইনহেরিটেড করবো , সবগুলো ওর চাইল্ড ক্লাস ।। এই ঘটনা'ই হলো , আসলে ইনহেরিটেন্স - এর চেয়ে সহজ ভাষায় এটাকে ডিফাইন করা সম্ভব নয়  ।।

চলো , একটু দেখে আসি ----------------

using System;
public class Common
{
    public string firstname;
   public string lastname;
    public void Fullname(double salary)
    {
        Console.WriteLine(firstname+" "+lastname+" "+salary);
    }
}
//Creating Child Class Inherited From Parent Class Common
public class PartTimeEmployee:Common
{
    public double HourlyRate;
}

//Creating Child Class Inherited From Parent Class Common
public class FullTimeEmployee:Common
{
    public double YearlySalary;
}


class Program
{
    public static void Main()

    {
        //Creating Object of class  FullTimeEmployee
        FullTimeEmployee FTE = new FullTimeEmployee();
        FTE.YearlySalary = 50000000;
        double salary = FTE.YearlySalary;
        FTE.firstname = "Naim";
        FTE.lastname = "Shahriar";
        FTE.Fullname(salary );

        //Creating Object of class  PartTimeEmployee
        PartTimeEmployee PTE = new PartTimeEmployee();
        PTE.HourlyRate = 40000;
        double salary1 = PTE.HourlyRate;
        PTE.firstname = "Joy";
        PTE.lastname = "Mollick";
        PTE.Fullname(salary1);
        Console.ReadKey();
    }
}

 তাহলে , কোড'টি রান করে দেখো , এখন ।।  তাহলে , তুমি বুঝতেই পারছো যে -- কি কি ঘটনা ঘটেছে ?? আমি বোঝার সুবিধার্থে  সিংগেল কমেন্টস লাইন ইউজ করেছি ।।এখন এখানে , লক্ষ করার মতো একটি বিষয় রয়েছে , সেটা হলো --- আমি কিন্তু Parent Class Common এর কোনো ইন্সট্যান্স ক্রিয়েট করি নি ।। তারপরো , ঠিকঠাকভাবে  Common class  এর মেথোড ( Fullname )  এক্সিকিউট হচ্ছে ।।

কারণ , আমি যখন কোনো , child class  কল করবো , অটোমেটিকভাবে তার প্যারেন্টস ক্লাস এর অবজেক্ট /ইন্সট্যান্স হিপ মেমোরি'তে  ক্রিয়েট হয়ে যায়  ।।  চলো , বুঝার সুবিধার্থে একটু দেখে আসি  ।।

using System;
public class Common
{
  
    public Common()
    {
        Console.WriteLine("This is Parent class");
    }
}
//Creating Child Class Inherited From Parent Class Common
public class Child:Common
{
    public Child()
    {
        Console.WriteLine("This is Child Class");
    }
}


class Program
{
    public static void Main()

    {
        //Creating Object of class  child

        Child cc = new Child();
       
        Console.ReadKey();
    }

}

এখানে , আমরা একটা মাত্র প্যারেন্ট ক্লাস ক্রিয়েট করেছি ও একটা চাইল্ড ক্লাস ক্রিয়েট করেছি ।।
তারপর , আমরা মেইন মেথোড -এ অবজেক্ট ক্রিয়েট করেছি , চাইল্ড ক্লাসের কন্সট্রাকটর এর ।।

 আমরা কিন্তু -- প্যারেন্ট ক্লাসের অব্জেক্ট ক্রিয়েট করি নি ।। তারপরো , কোড'টি যদি রান করাও , তাহলে দেখবে - প্যারেন্ট ক্লাস অটোমেটিক কল হচ্ছে আগে ।। আশা করি বুঝতে পারছো , আমরা প্যারেন্ট ক্লাসের অব্জেক্ট ক্রিয়েট না করলেও , অটোমেটিক ক্রিয়েট হয়ে যায় ।।

এখন যদি , প্যারেন্ট ক্লাসের দুইটা কন্সট্রাকটর থাকে , তাহলে কি হবে ??? চলো দেখে আসি ---

using System;
public class Common
{
  
    public Common()
    {
        Console.WriteLine("This is Parent class");
    }
    public Common(string message)
    {
        Console.WriteLine(message);
    }
}
//Creating Child Class Inherited From Parent Class Common
public class Child:Common
{
    public Child():base("This is Your Message")
    {
        Console.WriteLine("This is Child Class");
    }
}


class Program
{
    public static void Main()

    {
        //Creating Object of class  child

        Child cc = new Child();
       
        Console.ReadKey();
    }
}

আশা করি , এইটা ক্লিয়ার হয়েছে ।।


এখন চলো , আরো কিছু - ফিয়েচার জেনে নেওয়া উচিত আমাদের । আমরা , কিন্তু একটা চাইল্ড ক্লাসে একাধিক প্যারেন্ট ক্লাস ক্রিয়েট করতে পারি না ।।যেমন ,

public class Child:Common,A
{
    public Child()
    {
        Console.WriteLine("This is Child Class");
    }
}

ধরো , আমাদের Common ক্লাস ছাড়াও , আরো একটি ক্লাস আছে যার নাম  A ।। কিন্তু , আমরা উপোরুক্ত ভাবে , একটা ক্লাসকে একাধিক ক্লাসের চাইল্ড ক্লাস বানাতে পারি না ।। এটা মনে রাখতে হবে ।।

কিন্তু , আমরা এই Common ক্লাস থেকে আরো একটা চাইল্ড ক্লাস বানাতে পারি , এতে কোনো সমস্যা নেই ।। চলো দেখে আসি ,

using System;
public class Common
{
  
    public Common()
    {
        Console.WriteLine("This is Parent class");
    }
}
//Creating Child Class Inherited From Parent Class Common
public class Child:Common
{
    public Child()
    {
        Console.WriteLine("This is Child Class");
    }
}
//Creating grandson Class Inherited From Parent Class Child
public class grandson:Child
{
    public grandson()
    {
        Console.WriteLine("This is Grandson class");
    }
}


class Program
{
    public static void Main()

    {
        //Creating Object of class  grandson

        Child cc = new grandson();
       
        Console.ReadKey();
    }
}

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

যাই হোক , আজ এইটুকুই --------------------------------------








No comments:

Post a Comment