C++ Encapsulation

کپسوله‌سازی یکی از اصول مهم OOP است که داده‌ها (متغیرها) و توابعی که روی آن داده‌ها عمل می‌کنند را داخل یک کلاس واحد قرار می‌دهد.
به این ترتیب جزئیات داخلی پنهان می‌مانند و فقط از طریق توابع مشخص (اینترفیس) قابل دسترسی‌اند.

🎯 هدف‌های کپسوله‌سازی

  • مخفی‌سازی داده‌ها (Data Hiding)

  • کنترل دسترسی به متغیرها

  • امکان تغییر پیاده‌سازی داخلی بدون تغییر کدهای دیگر

  • افزایش امنیت و جلوگیری از تغییرات غیرمجاز

🔑 پیاده‌سازی در C++

کپسوله‌سازی با استفاده از:

  • اعضای private یا protected برای داده‌ها

  • توابع public (Getter/Setter) برای دسترسی و تغییر داده‌ها

🟢 مثال ساده

#include <iostream> using namespace std; class BankAccount { private: double balance; // ✅ متغیر خصوصی (پنهان) public: // سازنده BankAccount(double initialBalance) { if (initialBalance >= 0) balance = initialBalance; else balance = 0; } // متد واریز (Setter) void deposit(double amount) { if (amount > 0) balance += amount; } // متد برداشت (Setter) void withdraw(double amount) { if (amount > 0 && amount <= balance) balance -= amount; } // متد دریافت موجودی (Getter) double getBalance() const { return balance; } }; int main() { BankAccount account(1000); account.deposit(500); // ✅ افزایش موجودی account.withdraw(200); // ✅ برداشت cout << "Balance: " << account.getBalance() << endl; // account.balance = 10000; // ❌ خطا: دسترسی مستقیم ممنوع return 0; }

🖨️ خروجی:

Balance: 1300

🏷️ نکات کلیدی

  1. متغیرها private می‌شوند تا از تغییر مستقیم جلوگیری شود.

  2. توابع public کنترل می‌کنند که داده‌ها چگونه تغییر کنند (قوانین اعتبارسنجی).

  3. این کار همان Data Hiding است که بخشی از کپسوله‌سازی محسوب می‌شود.

💡 تفاوت با Abstraction (انتزاع)

  • Encapsulation: مخفی کردن داده‌های داخلی و مدیریت دسترسی.

  • Abstraction: مخفی کردن پیاده‌سازی منطق و نمایش فقط قابلیت‌ها.

✅ خلاصه

مفهومتوضیح
تعریفترکیب داده و توابع در یک واحد (کلاس)
هدفامنیت، کنترل دسترسی، سادگی تغییرات
ابزارprivate/protected + public getters/setters

نتیجه: کپسوله‌سازی به شما کمک می‌کند داده‌های حساس را ایمن کنید و کنترل کامل روی نحوه‌ی دسترسی و تغییر آن‌ها داشته باشید.