ক্লাসেস এবং অবজেক্টস (Classes & Objects)
ক্লাস হলো এক ধরনের ব্লুপ্রিন্ট (Classes Are Blueprints)
যেকোনো ক্লাসকে বাড়ি তৈরির একটি ব্লুপ্রিন্ট (blueprint) বা নকশার মতো ভাবতে পারেন। ব্লুপ্রিন্ট নিজে কিন্তু কোনো বাড়ি নয় — এটি বরং এমন একটি পরিকল্পনা বা প্ল্যান, যা বলে দেয় যে বাড়িটি দেখতে ঠিক কেমন হবে (এর ঘর, দরজা, জানালা ইত্যাদি)। যখন আপনি সেই ব্লুপ্রিন্ট দেখে সত্যিকার অর্থে একটি বাড়ি তৈরি করেন, তখন সেই বাড়িটিকে বলা হয় একটি অবজেক্ট (object) (যাকে "ইনস্ট্যান্স (instance)" বলেও ডাকা হয়)।
আপনি চাইলে একই ব্লুপ্রিন্ট থেকে অনেকগুলো বাড়ি তৈরি করতে পারেন। প্রতিটি বাড়িই সম্পূর্ণ আলাদা — একটি হয়তো লাল রঙের, আরেকটি হয়তো নীল রঙের — কিন্তু ভেতরের গঠন বা স্ট্রাকচার সবার ক্ষেত্রেই একই রকম।
একটি ক্লাস মূলত তিনটি জিনিসকে একসাথে বেঁধে রাখে:
- ফিল্ডস/প্রোপার্টিজ (Fields/Properties) — ডেটা (অবজেক্টটি নিজের সম্পর্কে কী জানে)
- মেথডস (Methods) — ব্যবহার বা আচার-আচরণ (অবজেক্টটি কী করতে পারে)
- কনস্ট্রাক্টর (Constructor) — সেটআপ করার নিয়মকানুন (অবজেক্টটিকে কীভাবে তৈরি করা হবে তার নিয়ম)
আপনার প্রথম ক্লাস (Your First Class)
প্রোপার্টিজ — স্মার্ট ফিল্ডস (Properties — Smart Fields)
প্রোপার্টিগুলোকে (Properties) দেখতে সাধারণ ফিল্ডের (fields) মতোই মনে হয়, কিন্তু এদের কিছু জাদুকরী ক্ষমতা রয়েছে। { get; set; } সিনট্যাক্সটি একটি অটো-প্রোপার্টি (auto-property) তৈরি করে — সি শার্প (C#) নিজে থেকেই ব্যাকগ্রাউন্ডে একটি লুকানো বা হিডেন ব্যাকিং ফিল্ড (hidden backing field) তৈরি করে নেয়। তবে আপনি চাইলে নিজের মনের মতো কাস্টম লজিকও (custom logic) লিখতে পারবেন:
get— যখন কেউ এর ভেতরের ভ্যালু বা মানটুকু পড়তে চায়, তখন এটি রান করেset— যখন কেউ এর ভেতরে কোনো নতুন ভ্যালু বা মান অ্যাসাইন (assign) করে, তখন এটি রান করে (এতেvalueকিবোর্ডটি (keyword) ব্যবহার করতে হয়)init— এটি অনেকটা set এর মতোই, তবে এটি কাজ করে কেবল অবজেক্টটি তৈরি হওয়ার ঠিক ওই মুহূর্তেই
তাছাড়া প্রোপার্টিগুলো আপনাকে ভ্যালিডেশন (validation) বা যাচাই-বাছাই করার সুযোগ দেয় — ঠিক যেমন কোনো ক্লাবের দরজায় দাঁড়িয়ে থাকা বাউন্সার (bouncer) সবার আইডি (IDs) চেক করে ভেতরে ঢোকার অনুমতি দেয়।
প্রোপার্টিজ এবং অ্যাক্সেস মডিফায়ার (Properties & Access Modifiers)
স্ট্যাটিক মেম্বারস — সবার সাথে শেয়ার করা (Static Members — Shared Across All Objects)
সাধারণ প্রোপার্টি (properties) এবং মেথডগুলো (methods) শুধু একেকটি আলাদা আলাদা অবজেক্টের নিজস্ব সম্পত্তি হিসেবে কাজ করে। কিন্তু static মেম্বারগুলো হলো ওই ক্লাসটির (class itself) সম্পত্তি — যাকে ওই ক্লাসের তৈরি করা সব অবজেক্ট শেয়ার করে ব্যবহার করতে পারে।
ব্যাপারটিকে এভাবে ভাবতে পারেন: প্রতিটি শিক্ষার্থীর কিন্তু নিজের আলাদা একটি নাম থাকে (যাকে বলা যায় ইনস্ট্যান্স প্রোপার্টি), কিন্তু তারা সবাই মিলে একই স্কুলের নাম শেয়ার করে (যাকে বলা যায় স্ট্যাটিক প্রোপার্টি)। আপনি কোনো অবজেক্টের (object) মাধ্যমে নয়, বরং সরাসরি ওই ক্লাসের নামের মাধ্যমেই স্ট্যাটিক মেম্বারগুলোকে অ্যাক্সেস (access) করতে পারেন।