Kotlin-এ Abstraction – ব্রেইন-ফ্রেন্ডলি ব্যাখ্যা!
🧠 Kotlin-এ Abstraction – ব্রেইন-ফ্রেন্ডলি ব্যাখ্যা!
🎯 Abstraction মানে কি?
👉 Abstraction (অ্যাবস্ট্রাকশন) হলো একটি প্রক্রিয়া যেখানে আমরা শুধুমাত্র দরকারি বিষয়গুলো দেখাই এবং অপ্রয়োজনীয় ডিটেইল লুকিয়ে রাখি।
🚀 বাস্তব জীবনের উদাহরণ:
🛵 আপনি যখন একটি মোটরবাইক চালান, তখন শুধু "START" বাটন চাপেন বা "KEY" ঘুরান – ব্যস, বাইক চালু হয়ে যায়!
❌ কিন্তু আপনি বাইকের ইঞ্জিনের ভিতরের জটিল প্রসেস নিয়ে চিন্তা করেন না!
✔️ এটাই হলো Abstraction – যেখানে আপনি শুধু দরকারি জিনিস দেখেন, কিন্তু জটিল ডিটেইল লুকিয়ে থাকে।
🛠️ Kotlin-এ Abstraction কিভাবে কাজ করে?
🔹 1️⃣ Abstract Class (আধা-সম্পূর্ণ ক্লাস)
👉 একটি ক্লাস যেখানে কিছু মেথডের বডি থাকে, আবার কিছু মেথড কেবল ডিক্লেয়ার করা হয়, কিন্তু বাস্তবায়ন (implementation) দেওয়া হয় না।
📌 নিয়ম:
✔️ abstract ক্লাস তৈরি করতে abstract কিওয়ার্ড ব্যবহার করতে হয়।
✔️ abstract ক্লাসের abstract মেথডগুলোকে অবশ্যই সাবক্লাস (child class) override করতে হবে।
✔️ abstract ক্লাস থেকে সরাসরি অবজেক্ট তৈরি করা যায় না!
✅ Example: Abstract Class (গাড়ি নিয়ে উদাহরণ)
abstract class Car {
abstract fun startEngine() // 🔥 Abstract Method - কোনো বাস্তবায়ন নেই!
fun stopEngine() {
println("Engine Stopped") // ✅ Non-Abstract Method - বাস্তবায়ন আছে
}
}
class BMW : Car() {
override fun startEngine() { // ✅ Abstract Method Override করতে হবে!
println("BMW Engine Started!")
}
}
fun main() {
val myCar: Car = BMW()
myCar.startEngine() // Output: BMW Engine Started!
myCar.stopEngine() // Output: Engine Stopped
}
📌 এখানে:
Carহলো Abstract Class, যেখানেstartEngine()Abstract Method।BMWক্লাস এটাকে Override করেছে।Carথেকে সরাসরি অবজেক্ট তৈরি করা যায় না!
🔹 2️⃣ Interface (একদম খালি খোলস)
👉 Interface হলো সম্পূর্ণ অ্যাবস্ট্রাকশন, যেখানে শুধু মেথড ডিক্লেয়ার করা হয়, কোনো বাস্তবায়ন থাকে না!
📌 নিয়ম:
✔️ Interface-এ থাকা মেথডের default implementation থাকতে পারে, আবার নাও থাকতে পারে।
✔️ একটি ক্লাস একাধিক ইন্টারফেস implement করতে পারে!
✔️ Interface-এ properties থাকতে পারে, কিন্তু এগুলো abstract হয়!
✅ Example: Interface (উড়তে পারে এমন যানবাহন)
interface Flyable {
fun fly() // 🔥 Abstract Method - বাস্তবায়ন নেই
}
class Airplane : Flyable {
override fun fly() { // ✅ Override করতে হবে!
println("Airplane is flying!")
}
}
fun main() {
val plane = Airplane()
plane.fly() // Output: Airplane is flying!
}
📌 এখানে:
Flyableহলো Interface, যেখানেfly()মেথড শুধু ডিক্লেয়ার করা হয়েছে।Airplaneএটাকে implement করেছে এবং মেথডের বাস্তবায়ন দিয়েছে।
🔥 Abstract Class vs Interface – পার্থক্য
| বৈশিষ্ট্য | Abstract Class | Interface |
|---|---|---|
| কোথায় ব্যবহার করা হয়? | যদি কিছু মেথডের বাস্তবায়ন (implementation) থাকে, কিছু না থাকে | সম্পূর্ণ abstract behavior এর জন্য |
| Constructor থাকে? | ✅ থাকে | ❌ থাকে না |
| ফিল্ড (Fields) থাকে? | ✅ থাকে (non-final variables) | ✅ থাকে (final variables) |
| Multiple Inheritance? | ❌ না (একটাই abstract class extend করা যায়) | ✅ হ্যাঁ (একাধিক interface implement করা যায়) |
| কোথায় বেশি ব্যবহার করা হয়? | কমন বৈশিষ্ট্য শেয়ার করতে | Behavior define করতে |
🏆 কোথায় কি ব্যবহার করবো?
✅ যদি কোনো ক্লাস কিছু মেথডের বাস্তবায়ন দেয় এবং কিছু অ্যাবস্ট্রাক্ট রাখে, তাহলে abstract class ব্যবহার করুন।
✅ যদি কোনো ক্লাসের মধ্যে শুধু behavior define করতে হয়, তাহলে interface ব্যবহার করুন।
✅ যদি অনেকগুলো ভিন্ন ভিন্ন behavior দরকার হয়, তাহলে interface ভালো, কারণ multiple interfaces implement করা যায়।
🎯 সংক্ষেপে:
✔️ Abstraction হলো অপ্রয়োজনীয় ডিটেইল লুকিয়ে রেখে দরকারি ফাংশনালিটি দেখানো।
✔️ Abstract Class: কিছু মেথডের বাস্তবায়ন থাকে, কিছু থাকে না।
✔️ Interface: শুধুমাত্র মেথড ডিক্লেয়ার করা হয়, কোনো বাস্তবায়ন থাকে না।
✔️ Interface multiple classes implement করতে পারে, কিন্তু Abstract Class একটিই extend করা যায়।
🎉 এখন আপনি Kotlin-এর Abstraction পুরোপুরি বুঝে গেছেন! 🚀🔥
💡 এবার প্র্যাকটিস শুরু করুন এবং নিজে কোড লিখুন! 😎
Comments
Post a Comment