Abstraction vs Encapsulation in Kotlin – ব্রেইন-ফ্রেন্ডলি ব্যাখ্যা!

 

🧠 Abstraction vs Encapsulation in Kotlin – ব্রেইন-ফ্রেন্ডলি ব্যাখ্যা!

🎯 Abstraction & Encapsulation – পার্থক্য কী?

🔥 দুইটাই OOP-এর গুরুত্বপূর্ণ অংশ!
➡ Encapsulation 🏠 👉 ডাটা লুকিয়ে রাখে (Data Hiding)।
➡ Abstraction 🚗 👉 অপ্রয়োজনীয় ডিটেইল লুকিয়ে শুধু দরকারি জিনিস দেখায়।


🚀 বাস্তব জীবনের উদাহরণ

📌 Encapsulation (ডাটা হাইডিং)

👉 আপনার মোবাইল ফোন

  • ফোনের ভিতরের সার্কিট, ব্যাটারি, প্রসেসর আপনি সরাসরি দেখতে বা পরিবর্তন করতে পারেন না।
  • শুধু পাওয়ার বাটন টিপলেই ফোন চালু হয়!
  • অভ্যন্তরীণ মেকানিজম লুকানো আছে – এটিই Encapsulation!

📌 Abstraction (অপ্রয়োজনীয় ডিটেইল লুকানো)

👉 একটি গাড়ি চালানো

  • গাড়ির ইঞ্জিন কিভাবে কাজ করে, পিস্টন কিভাবে চলে – এসব না জানলেও আপনি গাড়ি চালাতে পারেন!
  • আপনার শুধু ব্রেক, স্টিয়ারিং ও এক্সিলারেটর দরকার!
  • গাড়ির অভ্যন্তরীণ কাজ লুকানো আছে – এটিই Abstraction!

🔹 1️⃣ Encapsulation – ডাটা লুকানো ও নিয়ন্ত্রণ করা

👉 Encapsulation হলো "Private Data + Public Methods"

class BankAccount {
    private var balance: Double = 0.0  // 🔐 Balance private, কেউ সরাসরি এক্সেস করতে পারবে না!

    fun deposit(amount: Double) {
        if (amount > 0) {
            balance += amount
            println("Deposited $amount, New Balance: $balance")
        }
    }

    fun withdraw(amount: Double) {
        if (amount > 0 && amount <= balance) {
            balance -= amount
            println("Withdrew $amount, Remaining Balance: $balance")
        } else {
            println("Invalid withdrawal amount!")
        }
    }

    fun getBalance(): Double {
        return balance
    }
}

fun main() {
    val account = BankAccount()
    account.deposit(1000.0)  // ✅ Balance Updated
    account.withdraw(500.0)  // ✅ Valid Withdrawal
    println("Current Balance: ${account.getBalance()}")  // 🔥 Output: Current Balance: 500.0
}

📌 এখানে:
✅ Balance সরাসরি পরিবর্তন করা যাবে না, কারণ এটি private।
✅ Getter & Setter ব্যবহার করে নির্দিষ্ট নিয়মে এক্সেস ও পরিবর্তন করা যাচ্ছে।
✅ এটি হলো Encapsulation, যেখানে ডাটা হাইড করা হয়েছে।


🔹 2️⃣ Abstraction – শুধু দরকারি অংশ দেখানো

👉 Abstraction মানে "Implementation লুকানো + দরকারি ফাংশন প্রকাশ করা"

abstract class Vehicle {
    abstract fun startEngine()  // 🔥 কোন গাড়ি কিভাবে ইঞ্জিন চালু করবে, সেটা এখানে বলা হয়নি!
    
    fun stopEngine() {
        println("Engine Stopped")
    }
}

class Car : Vehicle() {
    override fun startEngine() {
        println("Car Engine Started with Key!")
    }
}

class Bike : Vehicle() {
    override fun startEngine() {
        println("Bike Engine Started with Kick!")
    }
}

fun main() {
    val myCar = Car()
    myCar.startEngine()  // Output: Car Engine Started with Key!

    val myBike = Bike()
    myBike.startEngine()  // Output: Bike Engine Started with Kick!
}

📌 এখানে:
✅ Vehicle ক্লাস শুধু ঘোষণা করেছে যে "Start Engine" ফাংশন থাকবে, কিন্তু কিভাবে কাজ করবে তা বলেনি!
✅ Car এবং Bike তাদের নিজস্ব উপায়ে ইঞ্জিন চালু করার নিয়ম দিয়েছে!
✅ এটি হলো Abstraction, যেখানে দরকারি ফাংশন প্রকাশ করা হয়েছে, কিন্তু ব্যাকএন্ড ডিটেইলস লুকানো হয়েছে।


🔥 Abstraction vs Encapsulation – মুখোমুখি তুলনা!

বিষয় Abstraction 🚗 Encapsulation 🔐
উদ্দেশ্য অপ্রয়োজনীয় ডিটেইলস লুকিয়ে শুধু দরকারি ফাংশন দেখানো ডাটা সরাসরি পরিবর্তন আটকানো ও প্রাইভেট রাখা
কিভাবে করা হয়? Abstract Class & Interfaces দিয়ে Private Variables + Getter & Setter দিয়ে
উদাহরণ গাড়ি চালানোর সময় ব্রেক, স্টিয়ারিং ইত্যাদি ফোনের ব্যাটারি এবং প্রসেসর
ব্যবহার কিভাবে কাজ করবে তা লুকানো অভ্যন্তরীণ ডাটা ও মেথড লুকানো
ফোকাস Behaviour (কাজ করার পদ্ধতি) Data Security (ডাটা নিয়ন্ত্রণ ও লুকানো)

🎯 সংক্ষেপে:

✔️ Encapsulation 👉 ডাটা private রেখে getter/setter দিয়ে নিয়ন্ত্রিত এক্সেস দেওয়া হয়!
✔️ Abstraction 👉 শুধু দরকারি ফাংশন প্রকাশ করে, অথচ অভ্যন্তরীণ কাজ লুকানো থাকে!
✔️ Encapsulation = "What is hidden?" (কোন ডাটা লুকানো হলো?)
✔️ Abstraction = "What is shown?" (কোন ফাংশন দেখানো হলো?)


🎉 এখন আপনি Abstraction & Encapsulation পুরো বুঝে গেছেন! 🚀🔥

💡 এবার নিজে প্র্যাকটিস করুন! 😎

Comments

Popular posts from this blog

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

🧠 Regex কী?

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