এটি একটি অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং কৌশল। এই পদ্ধতিতে একজন প্রোগ্রামার প্রাসঙ্গিক তথ্য ছাড়া সব কিছুই লুকিয়ে রাখতে পারে। যেমন- প্যারেন্ট ক্লাসের কিছু নির্দিষ্ট মেথডে চাইল্ড ক্লাস এক্সেস নিতে পারবে এমন অঙ্গীকার করার জন্য আমরা abstract class ব্যবহার করি। কিন্তু আমরা এই অঙ্গীকার করি না যে, মেথডের মধ্যে কি ধরণের কোড থাকবে।
আরও স্পষ্ট করে বললেঃ আমরা অ্যাবস্ট্রাক্ট(abstract) ক্লাস এবং মেথড তখনই ব্যবহার করি যখন আমরা প্যারেন্ট ক্লাস এর কিছু মেথডকে চাইল্ড ক্লাস থেকে ইনহেরিট করতে বাধ্য করি।
অ্যাবস্ট্রাক্ট(abstract) ক্লাস এবং মেথড
- অ্যাবস্ট্রাক্ট(abstract) ক্লাস - অ্যাবস্ট্রাক্ট ক্লাসে কমপক্ষে একটি অ্যাবস্ট্রাক্ট মেথড থাকে। অ্যাবস্ট্রাক্ট ক্লাস থেকে আমরা কোনো অবজেক্ট তৈরি করতে পারি না, বরং এর পরিবর্তে অ্যাবস্ট্রাক্ট ক্লাসের চাইল্ড ক্লাস এর মধ্যে আমরা অ্যাবস্ট্রাক্ট মেথডসমুহকে ডিফাইন করবো এবং প্রয়োজন অনুযায়ী চাইল্ড ক্লাস এর অবজেক্ট তৈরি করবো।
- অ্যাবস্ট্রাক্ট(abstract) মেথড - অ্যাবস্ট্রাক্ট মেথড শুধুমাত্র অ্যাবস্ট্রাক্ট ক্লাসের মধ্যেই ব্যবহার করা যায়। অ্যাবস্ট্রাক্ট মেথডের মধ্যে কোনো কোড ডিফাইন করা থাকে না। শুধুমাত্র মেথডের নাম এবং আর্গুমেন্টসমূহ ডিক্লেয়ার করা থাকে। এই জন্য আমরা অ্যাবস্ট্রাক্ট ক্লাস থেকে কোনো অবজেক্ট তৈরি করতে পারি না।
অ্যাবস্ট্রাক্ট ক্লাস এবং মেথড ডিক্লেয়ার
অ্যাবস্ট্রাক্ট ক্লাস ডিক্লেয়ার করার জন্য আপনাকে নিম্নের মত abstract কীওয়ার্ড ব্যবহার করতে হবেঃ
kt_satt_skill_example_id=660
এখন আমরা অ্যাবস্ট্রাক্ট ক্লাসের মধ্যে একটি অ্যাবস্ট্রাক্ট মেথড তৈরি করবো। অ্যাবস্ট্রাক্ট মেথড তৈরি করার জন্য মেথডের নামের পূর্বে নিম্নের মত abstract কীওয়ার্ড ব্যবহার করতে হবেঃ
kt_satt_skill_example_id=661
সতর্কতাঃ অ্যাবস্ট্রাক্ট মেথড শুধুমাত্র অ্যাবস্ট্রাক্ট ক্লাসের মধ্যেই ডিক্লেয়ার করা যায়। অর্থাৎ কোনো ক্লাসের মধ্যে অ্যাবস্ট্রাক্ট মেথড ডিক্লেয়ার করার পূর্বে ঐ ক্লাসটিকে অবশ্যই অ্যাবস্ট্রাক্ট করে নিতে হবে।
এখন আমরা একটি অ্যাবস্ট্রাক্ট ক্লাস এবং মেথডের উদাহরণ দেখবোঃ
kt_satt_skill_example_id=663
একটি অ্যাবস্ট্রাক্ট ক্লাসে সাধারন মেথড থাকতে পারে কি?
হ্যাঁ, অবশ্যই। একটি অ্যাবস্ট্রাক্ট ক্লাসের মধ্যে সাধারন মেথড থাকতে পারে এবং সাধারন প্রোপার্টিও থাকতে পারে।
চলুন আমাদের উদাহরণে একটি protected প্রোপার্টি $tankValue এবং একটি public মেথড setTankValue() যুক্ত করিঃ
kt_satt_skill_example_id=664
কিভাবে অ্যাবস্ট্রাক্ট ক্লাসের চাইল্ড ক্লাস তৈরি করবেন?
যেহেতু অ্যাবস্ট্রাক্ট ক্লাসের কোনো অবজেক্ট তৈরি করা যায় না, তাই আমাদের একটি চাইল্ড ক্লাসের প্রয়োজন হবে যা অ্যাবস্ট্রাক্ট ক্লাস থেকে প্রোপার্টি এবং মেথড ইনহেরিট করতে পারবে। আমরা সাধারন ক্লাসের মতই extends কীওয়ার্ড ব্যবহার করে অ্যাবস্ট্রাক্ট ক্লাসেরও চাইল্ড ক্লাস তৈরি করতে পারি। কিন্ত অ্যাবস্ট্রাক্ট ক্লাসের চাইল্ড ক্লাসগুলো একটু ভিন্ন হয়। কারণ, অ্যাবস্ট্রাক্ট মেথডসমুহের কোড চাইল্ড ক্লাসে ডিফাইন করতে হয়।
চলুন Truck ক্লাস এর একটি চাইল্ড ক্লাস Toyota তৈরি করি যা উত্তরাধিকার সূত্রে অ্যাবস্ট্রাক্ট মেথড calcMiles() কে পায় এবং এতে প্রয়োজনীয় কোড ডিফাইন করিঃ
kt_satt_skill_example_id=665
এখন আমরা অ্যাবস্ট্রাক্ট ক্লাস Truck এর ভিন্ন একটি চাইল্ড ক্লাস তৈরি করবো এবং এখানেও অ্যাবস্ট্রাক্ট মেথড calcMiles() এ কোড ডিফাইন করবো। তবে এক্ষেত্রে গণনা একটু ভিন্ন হবে, কারণ এটি ভিন্ন একটি ট্রাক ক্লাসঃ
kt_satt_skill_example_id=666
এখন আমরা চাইল্ড ক্লাস গুলো থেকে অবজেক্ট তৈরি করবো এবং ফলাফল আউটপুট নিবঃ
kt_satt_skill_example_id=667
Read more