আজকে আমরা ইনহেরিটেন্স এর বেসিক নিয়ে কিছু কথাবার্তা বলবো ।।
খুবই মজার একটি বিষয় , তো চলো - সিম্পল একটা কোড দেখে আসি আগে ------------------
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();
}
}
তো , এখানে আমরা কিছুটা নেস্টেডভাবে ইনহেরিটেন্স ইউজ করলাম , রান করে দেখো ।। তাহলে কখনোই একটা চাইল্ড ক্লাস একই সাথে এক এর অধিক ক্লাসের চাইল্ড ক্লাস হতে পারে না , কিন্তু একটা প্যারেন্টস ক্লাসের একাধিক চাইল্ড ক্লাস থাকতে পারে ।।
যাই হোক , আজ এইটুকুই --------------------------------------
খুবই মজার একটি বিষয় , তো চলো - সিম্পল একটা কোড দেখে আসি আগে ------------------
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