مفهوم کپسولهسازی در برنامهنویسی شیگرا چیست
خلاصه
1404/08/28
کپسولهسازی (Encapsulation) یکی از چهار مفهوم اصلی برنامهنویسی شیءگرا (OOP) است (به همراه وراثت، چندریختی و انتزاع). به طور خلاصه، کپسولهسازی به معنای **پنهان کردن دادهها و
کپسولهسازی (Encapsulation) یکی از چهار مفهوم اصلی برنامهنویسی شیءگرا (OOP) است (به همراه وراثت، چندریختی و انتزاع). به طور خلاصه، کپسولهسازی به معنای **پنهان کردن دادهها و روشهای داخلی یک کلاس از دنیای بیرون و در عین حال ارائه یک رابط (interface) مشخص برای دسترسی و تعامل با آن دادهها و روشها است.**
**به عبارت دیگر:**
* **بستهبندی:** کپسولهسازی به معنای بستهبندی دادهها (attributes یا fields) و روشها (methods) که بر روی آن دادهها عمل میکنند، در داخل یک واحد واحد به نام کلاس است.
* **پنهانسازی (Data Hiding):** کپسولهسازی به معنای مخفی کردن جزئیات پیادهسازی داخلی یک کلاس از دید کاربران خارجی است. این کار با استفاده از سطوح دسترسی (access modifiers) مانند `private`، `protected` و `public` انجام میشود.
* **کنترل دسترسی:** کپسولهسازی به شما امکان میدهد کنترل کنید که کدام بخشهای کلاس در دسترس دنیای بیرون باشند و کدام بخشها فقط برای استفاده داخلی طراحی شدهاند.
**چرا کپسولهسازی مهم است؟**
* **افزایش امنیت:** با پنهان کردن دادههای حساس و جلوگیری از دسترسی مستقیم به آنها، میتوان از تغییرات ناخواسته یا مخرب در وضعیت شیء جلوگیری کرد.
* **بهبود قابلیت نگهداری:** تغییرات در پیادهسازی داخلی یک کلاس (که به خوبی کپسولهسازی شده است) نباید بر کد خارجی که از آن کلاس استفاده میکند تأثیر بگذارد، زیرا رابط (interface) ثابت باقی میماند.
* **افزایش قابلیت استفاده مجدد:** کلاسهای کپسولهشده را میتوان به راحتی در پروژههای دیگر مورد استفاده مجدد قرار داد، زیرا جزئیات پیادهسازی آنها از دید کاربر پنهان است.
* **کاهش پیچیدگی:** با مخفی کردن جزئیات غیرضروری، کد خواناتر و قابل فهمتر میشود.
**مثال:**
فرض کنید کلاسی به نام `BankAccount` دارید که نشاندهنده یک حساب بانکی است.
* `balance` (موجودی حساب) یک attribute مهم است که باید محافظت شود.
* `deposit()` (واریز وجه) و `withdraw()` (برداشت وجه) methodهایی هستند که بر روی `balance` عمل میکنند.
با استفاده از کپسولهسازی، میتوانیم `balance` را به عنوان `private` تعریف کنیم و از دسترسی مستقیم به آن از بیرون کلاس جلوگیری کنیم. به جای آن، میتوانیم `deposit()` و `withdraw()` را به عنوان `public` تعریف کنیم و از طریق این methodها به `balance` دسترسی کنترل شده داشته باشیم.
**کد نمونه (فرضی):**
```python
class BankAccount:
def __init__(self, account_number, initial_balance):
self.__account_number = account_number # private attribute
self.__balance = initial_balance # private attribute
def deposit(self, amount):
if amount > 0:
self.__balance += amount
print(f"مبلغ {amount} واریز شد. موجودی جدید: {self.__balance}")
else:
print("مبلغ واریزی نامعتبر است.")
def withdraw(self, amount):
if amount > 0 and amount <= self.__balance:
self.__balance -= amount
print(f"مبلغ
برخی از محصولات شرکت مهندسی آبان رایان البرز
سایر مقالات آموزشی شرکت نرم افزاری آبان رایان البرز :
- تفاوت بین زبان تفسیری و کامپایلی چیست
- نقش کامپایلر در ترجمه کد چیست
- چگونه از پایگاه داده در اپلیکیشنهای موبایل استفاده میشود
- تفاوت بین نرمافزار دسکتاپ و نرمافزار تحت وب چیست
- چگونه یک برنامه را در محیط لینوکس اجرا کنیم
- Docker چیست و چه مزایایی دارد
- نقش Kubernetes در مدیریت نرمافزارهای ابری چیست
- مفهوم مجازیسازی در زیرساختهای نرمافزاری چیست
- فایروال نرمافزاری چگونه عمل میکند
- چه تفاوتی بین الگوریتم AES و RSA وجود دارد
- چگونه دادهها را رمزنگاری و رمزگشایی کنیم
- نقش تست نفوذ در امنیت نرمافزار چیست
- مفهوم UX و UI در طراحی نرمافزار چیست
- نقش مستندسازی در پروژههای نرمافزاری چیست
- چگونه نسخههای مختلف نرمافزار را مدیریت کنیم
- چگونه امنیت APIها را تأمین کنیم