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