ক্লাস এবং ওওপি (Classes & OOP)
ক্লাস কী? (What Are Classes?)
কল্পনা করুন আপনি একটি পোষা প্রাণীর দোকান বা পেট শপ (pet shop) চালাচ্ছেন। প্রতিটি প্রাণীরই একটি নাম, ধরন ও বয়স আছে, এবং তারা খাওয়া বা ঘুমানোর মতো কাজগুলো করতে পারে। আপনি চাইলেই নিজ হাতে প্রতিটি প্রাণীর জন্য আলাদা আলাদা অবজেক্ট লিখতে পারেন, কিন্তু এভাবে একঘেয়েমি চলে আসবে। একটি ক্লাস (class) হলো কুকি কাটারের (cookie cutter) বা ছাঁচের মতো — আপনি এর ধরন বা আকার একবার ঠিক করে রাখলে, সেটি দিয়ে যত খুশি কুকি (বা অবজেক্ট) তৈরি করতে পারবেন।
কোনো ক্লাস থেকে তৈরি করা প্রতিটি অবজেক্টকে বলা হয় ইনস্ট্যান্স (instance)। ক্লাসটি মূলত নির্ধারণ করে দেয় যে একটি ইনস্ট্যান্স দেখতে কেমন হবে এবং সেটি কী কী কাজ করতে পারবে। new ব্যবহার করে যখন আপনি নতুন কোনো ইনস্ট্যান্স তৈরি করেন, তখন স্বয়ংক্রিয়ভাবেই constructor মেথডটি রান বা এক্সিকিউট হয়।
ক্লাস তৈরি করা (Creating a Class)
গেটার, সেটার এবং স্ট্যাটিক মেথড (Getters, Setters & Static Methods)
গেটার (Getters) এবং সেটার (setters) আপনাকে এমন প্রপার্টি তৈরি করার সুযোগ দেয় যেগুলো দেখতে সাধারণ ডেটার মতোই, কিন্তু ভেতরে ভেতরে এদের পেছনে কোড কাজ করতে থাকে। কোনো প্রপার্টি পড়ার বা রিড (read) করার সময় গেটার নিজের মতো করে একটি ভ্যালু বা মান গণনা করে। অন্যদিকে কোনো প্রপার্টির মান নির্ধারণ বা সেট (set) করার সময় সেটার বিভিন্ন ভ্যালিডেশন (validation) বা লজিক রান করে।
স্ট্যাটিক মেথডগুলো (Static methods) সরাসরি ক্লাসের সাথেই যুক্ত থাকে, এর কোনো ইনস্ট্যান্সের সাথে নয়। আপনি এগুলোকে সরাসরি ক্লাসের নাম ধরেই কল করতে পারবেন (যেমন Math.random())। ক্লাস সম্পর্কিত বিভিন্ন দরকারি বা ইউটিলিটি ফাংশনের (utility function) ক্ষেত্রে এগুলো দারুণ কাজ করে।
গেটার, সেটার এবং স্ট্যাটিক (Getters, Setters & Static)
ইনহেরিটেন্স — extends এবং super (Inheritance — extends & super)
ইনহেরিটেন্স (Inheritance) বা উত্তরাধিকারের মাধ্যমে আপনি একটি বিদ্যমান ক্লাসের বিশেষায়িত ভার্সন (specialized version) তৈরি করতে পারেন। এটি অনেকটা এমন বলার মতো — "একটি কুকুর হলো একটি পোষা প্রাণী, তবে এটি কিছু অতিরিক্ত কৌশল জানে।" চাইল্ড ক্লাসটি (child class) তার প্যারেন্ট বা পিতৃস্থানীয় ক্লাসের সব প্রপার্টি এবং মেথড উত্তরাধিকার সূত্রে (inherits) পেয়ে থাকে, তবে সে চাইলে এর সাথে নতুন কিছু যোগ করতে বা পুরোনো মেথডগুলোকে ওভাররাইড (override) করতে পারে।
চাইল্ড ক্লাস তৈরি করার জন্য extends এবং প্যারেন্টের কনস্ট্রাক্টর বা মেথড কল করার জন্য super ব্যবহার করা হয়।