C#-এ অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিংয়ের প্রাথমিক গঠনটি হলো ক্লাস, যা ডেটা (ফিল্ড) আর আচরণের (মেথড) সমন্বয়। একটি ক্লাসের ফিল্ড আর মেথডকে একসাথে তার মেম্বার বলা হয়।
অ্যাক্সেস মডিফায়ারের মাধ্যমে মেম্বারগুলোতে অ্যাক্সেস সীমাবদ্ধ করা যায়; এর মধ্যে সবচেয়ে কমন দুটি হলো:
public: যেকোনো কোড মেম্বারটি অ্যাক্সেস করতে পারে (কোনো নিষেধাজ্ঞা নেই)।private: শুধু একই ক্লাসের কোডই মেম্বারটি অ্যাক্সেস করতে পারে।একটি ক্লাসকে ওই ক্লাসের ইনস্ট্যান্স তৈরির টেমপ্লেট হিসেবে ভাবতে পারেন। একটি ক্লাসের ইনস্ট্যান্স (যাকে অবজেক্ট-ও বলা হয়) তৈরি করতে new কিওয়ার্ডটি ব্যবহার করা হয়:
class Car
{
}
// Create two car instances
var myCar = new Car();
var yourCar = new Car();
প্রতিটি ফিল্ডের একটি টাইপ থাকে এবং ক্লাসের যেকোনো জায়গায় ফিল্ড ডিফাইন করা যায়।
পাবলিক ফিল্ড ডিফাইন করা হয় PascalCase-এ, আর প্রাইভেট ফিল্ড ডিফাইন করা হয় camelCase-এ এবং তার আগে একটি আন্ডারস্কোর _ বসানো হয়:
class Car
{
// Accessible by anyone
public int Weight;
// Only accessible by code in this class
private string _color;
}
চাইলে একটি ফিল্ডে শুরুর মান বসিয়ে দেওয়া যায়। কোনো ফিল্ডে যদি শুরুর মান না দেওয়া হয়, তাহলে তার টাইপের ডিফল্ট ভ্যালুটি সেট করা হয়। ডট নোটেশন ব্যবহার করে একটি ইনস্ট্যান্সের ফিল্ডের মান পড়া যায় এবং পরিবর্তন করা যায়।
class Car
{
// Will be set to specified value
public int Weight = 2500;
// Will be set to default value (0)
public int Year;
}
var newCar = new Car();
newCar.Weight; // => 2500
newCar.Year; // => 0
// Update value of the field
newCar.Year = 2018;
সাধারণত কোনো মেথড কল করার সাইড এফেক্ট হিসেবে প্রাইভেট ফিল্ডগুলো আপডেট করা হয়। এমন মেথড সাধারণত কোনো মান রিটার্ন করে না, সেক্ষেত্রে রিটার্ন টাইপ void হওয়া উচিত:
class CarImporter
{
private int _carsImported;
public void ImportCars(int numberOfCars)
{
// Update private field from public method
_carsImported = _carsImported + numberOfCars;
}
}
এই অনুশীলনীতে আপনি একটি রিমোট কন্ট্রোলড কার নিয়ে খেলবেন, যেটি কেনার জন্য অবশেষে আপনার যথেষ্ট টাকা জমেছে।
গাড়িগুলো পুরো (১০০%) চার্জ করা ব্যাটারি নিয়ে শুরু করে। রিমোট কন্ট্রোল দিয়ে প্রতিবার গাড়িটি চালালে এটি ২০ মিটার চলে এবং ব্যাটারির এক শতাংশ ক্ষয় করে।
রিমোট কন্ট্রোলড কারটিতে একটি চমৎকার LED ডিসপ্লে আছে, যা দুই ধরনের তথ্য দেখায়:
"Driven <METERS> meters"."Battery at <PERCENTAGE>%".ব্যাটারি ০% থাকলে আপনি আর গাড়িটি চালাতে পারবেন না, এবং ব্যাটারি ডিসপ্লে দেখাবে "Battery empty".
আপনার সামনে ছয়টি কাজ আছে, যার প্রতিটিতে রিমোট কন্ট্রোলড কারের ইনস্ট্যান্স নিয়ে কাজ করতে হবে।
একেবারে নতুন একটি রিমোট কন্ট্রোলড কার ইনস্ট্যান্স রিটার্ন করার জন্য (static) RemoteControlCar.Buy() মেথডটি ইমপ্লিমেন্ট করুন:
RemoteControlCar car = RemoteControlCar.Buy();
LED ডিসপ্লেতে যেমন দেখানো হয় সেভাবে দূরত্ব রিটার্ন করার জন্য RemoteControlCar.DistanceDisplay() মেথডটি ইমপ্লিমেন্ট করুন:
var car = RemoteControlCar.Buy();
car.DistanceDisplay();
// => "Driven 0 meters"
LED ডিসপ্লেতে যেমন দেখানো হয় সেভাবে ব্যাটারির শতাংশ রিটার্ন করার জন্য RemoteControlCar.BatteryDisplay() মেথডটি ইমপ্লিমেন্ট করুন:
var car = RemoteControlCar.Buy();
car.BatteryDisplay();
// => "Battery at 100%"
চালানো মিটারের সংখ্যা হালনাগাদ করে এমন RemoteControlCar.Drive() মেথডটি ইমপ্লিমেন্ট করুন:
var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.DistanceDisplay();
// => "Driven 40 meters"
ব্যাটারির শতাংশ হালনাগাদ করার জন্য RemoteControlCar.Drive() মেথডটি হালনাগাদ করুন:
var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.BatteryDisplay();
// => "Battery at 98%"
ব্যাটারি শেষ হয়ে গেলে (০%) যাতে চালানো দূরত্ব না বাড়ে এবং ব্যাটারির শতাংশ না কমে, সেভাবে RemoteControlCar.Drive() মেথডটি হালনাগাদ করুন:
var car = RemoteControlCar.Buy();
// Drain the battery
// ...
car.DistanceDisplay();
// => "Driven 2000 meters"
car.BatteryDisplay();
// => "Battery empty"
Exercism-এ সাইন আপ করুন, C# ট্র্যাকের 62টি কনসেপ্ট178টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।