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

Popular posts from this blog

AI (Artificial Intelligence) সহজভাবে বোঝার জন্য একদম মস্তিষ্ক-বান্ধব ব্যাখ্যা 🧠🤖

🧠 Regex কী?

Kotlin-এ ভেরিয়েবল ঘোষণা করার দুই উপায়