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
Post a Comment