مفهوم encapsulation در جاوا
Encapsulation مفهومی است که با استفاده از آن کد ها و داده های یک کلاس را در مقابل سوء استفاده Interface های دیگر مصون میدارد. در این مقاله قصد داریم تا با این مفهوم بیشتر آشنا شویم.
در نگاه اول این تصور ایجاد میشود که Encapsulation برای جلوگیری از دسترسی آزادانه به کلاس استفاده میشود. در حقیقت این مفهوم کد ها و داده های ما را در قالب یک unit نگهداری میکند. به این ترتیب متغیر های کلاس از دسترس کلاس های دیگر خارج میشوند و تنها از طریق متد ها قابل دسترسی میباشند. این مفهوم به عنوان data hiding نیز شناخته میشود. برای Encapsulate کردن یک کلاس باید باز این قواعد پیروی کنیم:
- دسترسی متغیر ها به صورت private باشد
- متد های getter و setter برای دسترسی به این متغیر ها تعریف شود
قطعه کد زیر نمونه ای از Encapsulate کردن یک کلاس و یا data hiding است:
public class Article { private String title; private String content; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
همانطور که مشاهده میکنید, تمام متغیر ها به صورت private تعریف شدهاند. برای مقدار دهی به متغیر ها از متد setter استفاده شده است. برای مثال متد setContent یک مقدار از نوع String دریافت میکند و مقدار متغیر content درون کلاس را برابر با آن قرار میدهد. برای دریافت مقدار نیز از متد getter استفاده شده است. وقتی میخواهیم از مقدار title استفاده کنیم, متد getTitle را فراخوانی میکنیم و مقدار title را بر میگرداند.
سطوح دسترسی
هریک از متغیر ها و متد های یک کلاس ممکن است به صورت public و یا private باشد. وقتی یک متد و یا متغیر از نوع public است, امکان استفاده از آن در خارج از کلاس مهیا میشود. در مقابل وقتی یک متد یا متغیر از نوع private است, تنها از طریق درون کلاس قابل دسترس میباشد. به این ترتیب هر قطعه کدی که در خارج از کلاس باشد, نمیتواند از این متغیر ها و یا متد ها استفاده کند. بنابراین میتوانیم این اطمینان را داشته باشیم که فرآیند دور از انتظاری بر روی متغیر های private انجام نمیپذیرد. شکل زیر مشخص کننده نوع دسترسی به داده های public و private را مشخص میکند:
دایره فوق نشان دهنده یک کلاس است. یکسری متد ها به صورت مثلث های تو خالی نمایش داده شدهاند که متد های public کلاس هستند. در دایره داخلی این کلاس, مثلت های توپر به عنوان متد های private و دایره های تو پر به عنوان متغیر های private در نظر گرفته شدهاند. در خارج نیز دایره هایی وجود دارد که متد های دیگر کلاس ها که از این کلاس استفاده میکنند را مشخص میکند. دایره داخلی نشان دهنده این است که متد های خارجی امکان استفاده از آن ها را ندارند. همچنین هیچ متغیری به صورت public و در دایره بزرگتر تعریف نشده است. تنها متد های public از خارج کلاس قابل دسترسی هستند.
مزیت استفاده از Encapsulation
مزیت استفاده از چنین روشی این است که کلاس بر روی متغیر های خود تسلط کامل دارد و عملا مقدار خارج از انتظاری برای متغیر های آن تعیین نمیشود. همچنین میتوانیم یک متغیر را به عنوان read-only و یا write-only تعریف کنیم. با استفاده از این روش, میتوانیم قابلیت استفاده مجدد کلاس را افزایش دهیم. برای مثال فرض کنید میخواهیم پس از تعیین مقدار متغیر content یکسری دستورات بر روی آن اجرا کنیم. در چنین پیاده سازی, میتوانیم این قطعه کد ها را در متد setContent قرار دهیم با این تفاوت که تغییری در ساختار استفاده از کلاس رخ نمیدهد. در نهایت میتوانیم فرآیند پردازش را مخفی نگه داریم. در این روش تنها مقدار ارسالی به متد مشخص میشود و استفاده کننده از فرآیند درون متد اطلاعی ندارد.
چنین روشی برای پیاده سازی کلاس های یک API بسیار مناسب است.
در این مقاله سعی بر این شد تا با مفهوم Encapsulation در جاوا آشنا شویم. این مبحث یکی از مباحث مهم شی گرایی است.
با ما همراه باشید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.