روی خط زندگی

گشت و گذار من در هنر نرم افزار

روی خط زندگی

گشت و گذار من در هنر نرم افزار

کپسوله سازی (Encapsulation)

پنجشنبه, ۱۴ اسفند ۱۳۹۳، ۰۷:۰۱ ب.ظ

یک مانیتور را تجسم کنید. برای روشن کردن این مانیتور چه می کنید؟ آیا کاری با خازن ها و برد الکترونیکی آن دارید؟ مسلما نه! تنها کاری که باید انجام دهید فشردن یک دکمه است و مانیتور به تبع آن روشن می شود!

کپسوله سازی، همان طور که از نامش پیداست به معنای دسته بندی و جمع کردن یک مجموعه از ویژگی ها و رفتار ها در قالب یک مجموعه واحد می باشد. اما این تمام ماجرا نیست. جمع کردن این موارد در کنار هم به تنهایی مفهوم کپسوله سازی را نمی دهد. نکته ای که این مفهوم را تکمیل می کند، نحوه دسترسی و دستیابی به اعضای داخلی این مجموعه است. یک شی یا یک کلاس به عنوان یک کپسول، سعی می کند تمام ارتباطات با اعضای داخلی خود را محدود کند و در واقع جهان بیرون از مجموعه از ارتباطات و اعضای داخل این مجموعه خبر نداشته باشند (به این مهم Information Hiding می گویند). یک کپسول تنها چیزهایی را به دنیایی بیرون ارائه می دهد که واقعا نیاز باشد. توجه داشته باشید در دنیای برنامه نویسی منظور از جهان بیرون، لزوما استفاده کنندگان از نرم افزار نمی باشد. مثلا وقتی یک کامپوننت (Component) را کپسوله می کنیم، استفاده کنندگان از این کامپوننت سایر کامپوننت ها و کلاس های دیگر می باشند و نه کاربر نهایی.


در یک کلاس، پیاده سازی سطوح دسترسی به اجزای کلاس را توسط Access Modifier ها نظیر public، private، protected اعمال می کنیم. برای انجام یک عمل مانند خاموش روشن کردن مانیتور، تنها به یک متد که کل این فرآیند را مدیریت می کند اجازه می دهیم که از بیرون قابل دسترسی باشد و سایر جزییات را از دید بیرون مخفی می کنیم. این عمل مصداق کامل ایجاد یک جعبه سیاه (Black Box) است. اگر تکنولوژی روشن و خاموش کردن مانیتور عوض شود ( به طور مثال تغییر تکنولوژی از پلاسما به LCD و بعد به LED) دکمه خاموش و روشن کردن مانیتور همچنان همان کار قبلی را می کند، بدون آنکه ما دغدغه ای از بابت این تغییر داشته باشیم.


شاید برای شما هم این سوال پیش بیاید که چرا باید کد هایی را که خودم نوشته ام از دید خودم یا دوستان همکارم پنهان کنم. توجه داشته باشید که مخفی کردن اجزای داخلی یک کلاس از جهان بیرونی، به منظور حفظ امنیت صورت نمی گیرد، بلکه دغدغه اصلی اینجا کاهش وابستگی (Dependency) اجزا یا کامپوننت های مختلف یک سیستم از یکدیگر است. 


موافقین ۰ مخالفین ۰ ۹۳/۱۲/۱۴
حسین گویا

Encapsulation

OOP

شی گرایی

نظرات  (۱)

عالی... 👍👍

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی