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-এ ভেরিয়েবল ঘোষণা করার দুই উপায়