অ্যাবস্ট্রাক্ট ক্লাস এবং মেথড
এটি একটি অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং কৌশল। এই পদ্ধতিতে একজন প্রোগ্রামার প্রাসঙ্গিক তথ্য ছাড়া সব কিছুই লুকিয়ে রাখতে পারে। যেমন- প্যারেন্ট ক্লাসের কিছু নির্দিষ্ট মেথডে চাইল্ড ক্লাস এক্সেস নিতে পারবে এমন অঙ্গীকার করার জন্য আমরা abstract class ব্যবহার করি। কিন্তু আমরা এই অঙ্গীকার করি না যে, মেথডের মধ্যে কি ধরণের কোড থাকবে।
আরও স্পষ্ট করে বললেঃ আমরা অ্যাবস্ট্রাক্ট(abstract) ক্লাস এবং মেথড তখনই ব্যবহার করি যখন আমরা প্যারেন্ট ক্লাস এর কিছু মেথডকে চাইল্ড ক্লাস থেকে ইনহেরিট করতে বাধ্য করি।
অ্যাবস্ট্রাক্ট(abstract) ক্লাস এবং মেথড
- অ্যাবস্ট্রাক্ট(abstract) ক্লাস - অ্যাবস্ট্রাক্ট ক্লাসে কমপক্ষে একটি অ্যাবস্ট্রাক্ট মেথড থাকে। অ্যাবস্ট্রাক্ট ক্লাস থেকে আমরা কোনো অবজেক্ট তৈরি করতে পারি না, বরং এর পরিবর্তে অ্যাবস্ট্রাক্ট ক্লাসের চাইল্ড ক্লাস এর মধ্যে আমরা অ্যাবস্ট্রাক্ট মেথডসমুহকে ডিফাইন করবো এবং প্রয়োজন অনুযায়ী চাইল্ড ক্লাস এর অবজেক্ট তৈরি করবো।
- অ্যাবস্ট্রাক্ট(abstract) মেথড - অ্যাবস্ট্রাক্ট মেথড শুধুমাত্র অ্যাবস্ট্রাক্ট ক্লাসের মধ্যেই ব্যবহার করা যায়। অ্যাবস্ট্রাক্ট মেথডের মধ্যে কোনো কোড ডিফাইন করা থাকে না। শুধুমাত্র মেথডের নাম এবং আর্গুমেন্টসমূহ ডিক্লেয়ার করা থাকে। এই জন্য আমরা অ্যাবস্ট্রাক্ট ক্লাস থেকে কোনো অবজেক্ট তৈরি করতে পারি না।
অ্যাবস্ট্রাক্ট ক্লাস এবং মেথড ডিক্লেয়ার
অ্যাবস্ট্রাক্ট ক্লাস ডিক্লেয়ার করার জন্য আপনাকে নিম্নের মত abstract
কীওয়ার্ড ব্যবহার করতে হবেঃ
abstract class ClassName {}
এখন আমরা অ্যাবস্ট্রাক্ট ক্লাসের মধ্যে একটি অ্যাবস্ট্রাক্ট মেথড তৈরি করবো। অ্যাবস্ট্রাক্ট মেথড তৈরি করার জন্য মেথডের নামের পূর্বে নিম্নের মত abstract
কীওয়ার্ড ব্যবহার করতে হবেঃ
abstract class ClassName {
// অ্যাবস্ট্রাক্ট মেথড ঘোষণা
abstract public function methodName();
}
এখন আমরা একটি অ্যাবস্ট্রাক্ট ক্লাস এবং মেথডের উদাহরণ দেখবোঃ
<?php
abstract class Truck {
// অ্যাবস্ট্রাক্ট মেথড ডিক্লেয়ার
abstract public function calcMiles();
}
?>
একটি অ্যাবস্ট্রাক্ট ক্লাসে সাধারন মেথড থাকতে পারে কি?
হ্যাঁ, অবশ্যই। একটি অ্যাবস্ট্রাক্ট ক্লাসের মধ্যে সাধারন মেথড থাকতে পারে এবং সাধারন প্রোপার্টিও থাকতে পারে।
চলুন আমাদের উদাহরণে একটি protected
প্রোপার্টি $tankValue এবং একটি public
মেথড setTankValue() যুক্ত করিঃ
<?php
abstract class Truck {
// অ্যাবস্ট্রাক্ট ক্লাসের মধ্যে সাধারন প্রোপার্টি
protected $tankValue;
// অ্যাবস্ট্রাক্ট ক্লাসের মধ্যে সাধারন মেথড
public function setTankValue($value) {
$this->tankValue = $value;
}
// অ্যাবস্ট্রাক্ট মেথড
abstract public function calcMiles();
}
?>
কিভাবে অ্যাবস্ট্রাক্ট ক্লাসের চাইল্ড ক্লাস তৈরি করবেন?
যেহেতু অ্যাবস্ট্রাক্ট ক্লাসের কোনো অবজেক্ট তৈরি করা যায় না, তাই আমাদের একটি চাইল্ড ক্লাসের প্রয়োজন হবে যা অ্যাবস্ট্রাক্ট ক্লাস থেকে প্রোপার্টি এবং মেথড ইনহেরিট করতে পারবে। আমরা সাধারন ক্লাসের মতই extends
কীওয়ার্ড ব্যবহার করে অ্যাবস্ট্রাক্ট ক্লাসেরও চাইল্ড ক্লাস তৈরি করতে পারি। কিন্ত অ্যাবস্ট্রাক্ট ক্লাসের চাইল্ড ক্লাসগুলো একটু ভিন্ন হয়। কারণ, অ্যাবস্ট্রাক্ট মেথডসমুহের কোড চাইল্ড ক্লাসে ডিফাইন করতে হয়।
চলুন Truck ক্লাস এর একটি চাইল্ড ক্লাস Toyota তৈরি করি যা উত্তরাধিকার সূত্রে অ্যাবস্ট্রাক্ট মেথড calcMiles()
কে পায় এবং এতে প্রয়োজনীয় কোড ডিফাইন করিঃ
class Toyota extends Truck {
public function calcMiles() {
return $this->tankValue * 20;
}
}
এখন আমরা অ্যাবস্ট্রাক্ট ক্লাস Truck এর ভিন্ন একটি চাইল্ড ক্লাস তৈরি করবো এবং এখানেও অ্যাবস্ট্রাক্ট মেথড calcMiles()
এ কোড ডিফাইন করবো। তবে এক্ষেত্রে গণনা একটু ভিন্ন হবে, কারণ এটি ভিন্ন একটি ট্রাক ক্লাসঃ
class Mahindra extends Truck {
public function calcMiles() {
return $this->tankValue * 18;
}
}
এখন আমরা চাইল্ড ক্লাস গুলো থেকে অবজেক্ট তৈরি করবো এবং ফলাফল আউটপুট নিবঃ
// চাইল্ড ক্লাসের অবজেক্ট তৈরি
$toyota = new Toyota();
$mahindra = new Mahindra();
// ট্যাঙ্কের ভ্যালু নির্ধারন
$toyota->setTankValue(10);
$mahindra->setTankValue(10);
// ফলাফল
echo $toyota->calcMiles();
echo "<br>";
echo $mahindra->calcMiles();
200
180