همه برنامههای ++C متشکل از عناصر بنیادین زیر هستند.
- دستورات برنامه (کد): بخشی از برنامه است که عملیات را انجام میدهد و تابع نامیده میشود.
- داده برنامه: داده اطلاعات برنامه است که توابع برنامهی آن را تغییر میدهند.
محصورسازی مفهومی از برنامهنویسی شیگرا است که داده و توابع تغییردهنده دادهها را به هم مربوط کرده و هردوی آنها را دربرابر تداخل و سوء استفاده خارجی امن نگه میدارد. محصورسازی داده به یک مفهوم مهم شیگرایی، یعنی مخفیسازی داده (data hiding) منجر میشود.
محصورسازی داده سازوکار ایجاد داده و توابع به کارگیرندهی آنها، و چکیدهسازی داده سازوکار بروز دهنده رابط خارجی و مخفی سازی جزئیات از کاربر میباشد.
++C خواص محصورسازی و مخفیسازی داده را از طریق ساخت نوع دادههای ساخته کاربر، یعنی کلاسها پشتیبانی میکند. تا اینجا متوجه شدهایم که یک کلاس میتواند حاوی اعضای خصوصی، محافظت شده یا عمومی باشد. به صورت پیشفرض، همهی آیتمهای تعریف شده در یک کلاس خصوصی هستند.برای مثال:
class Box { public: double getVolume(void) { return length * breadth * height; } private: double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box };
متغیرهای length، breadth و height خصوصی هستند. بدین معنی که تنها اعضای دیگر کلاس Box به آنها دسترسی دارند، و دیگر بخشهای برنامه چنین دسترسی ندارند. این روشی است که محصورسازی از طریق آن بدست میآید.
برای عمومی کردن بخشهای یک کلاس (قابل دسترسی از همه بخشهای برنامه)، باید آنها را بعد از کلیدواژه public اعلان کنید. همه متغیرها یا توابعی که بعد از public تعریف شوند، از طریق دیگر توابع برنامه قابل دسترسی میباشند.
تبدیل یک کلاس به عنوان یک دوست برای یک کلاس دیگر، جزئیات پیادهسازی را برای آن آشکار کرده و محصورسازی را کاهش میدهد. حالت ایدهآل این است که تا جای ممکن، بیشتر جزئیات هر کلاس از دیگر کلاسها مخفی باشد.
مثال محصورسازی داده
هر برنامه ++Cای که یک کلاس با اعضای عمومی و خصوصی را پیادهسازی کند، نمونهای از محصورسازی داده و چکیدهسازی داده میباشد. مثال زیر را ملاحظه کنید.
#include <iostream> using namespace std; class Adder { public: // constructor Adder(int i = 0) { total = i; } // interface to outside world void addNum(int number) { total += number; } // interface to outside world int getTotal() { return total; }; private: // hidden data from outside world int total; }; int main() { Adder a; a.addNum(10); a.addNum(20); a.addNum(30); cout << "Total " << a.getTotal() <<endl; return 0; }
با اجرای این کد، خروجی زیر حاصل میشود.
Total 60
کلاس بالا دو عدد را باهم جمع کرده و حاصل جمع را برمیگرداند. اعضای عمومی، addNum و getTotal رابط میانجی به دنیای خارج از کلاس بوده و کاربر برای استفاده از کلاس باید با آنها آشنا شود. عضو خصوصی total چیزی است که کاربر نیازی به آشنایی با آن ندارد، اما برای عملکرد صحیح کلاس ضروری است.
استراتژی طراحی
همه ما آموختهایم که اعضای یک کلاس را به صورت پیشفرض و تا جایی که واقعاً نیاز نباشد، خصوصی تعریف کنیم. این کار برای محصورسازی مناسب است.
این روش بیشتر برای دادههای عضو اعمال میشود، اما برای همه اعضا ازجمله توابع مجازی نیز باید اعمال گردد.
منبع: ترجمه از سایت tutorialspoint.com
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.