کپسوله سازی یا همان Encapsulation در جاوا
یکی از مفاهیم مهمی که در کلاس های درس برنامه نویسی در دانشگاه و یا آموزشگاه های آزاد در مورد آن احتمالا بارها شنیده اید بحث کپسوله سازی یا همان Encapsulation است. در این مقاله قصد دارم که به مفهوم Encapsulation در جاوا بپردازم تا در کنار یکدیگر روش استفاده از آن را در جاوا یاد بگیریم.
کپسوله سازی در جاوا
به طور کلی Encapsulation به فرایند قرار دادن کدها و اطلاعات در واحدهای یکتا گفته می شود. بهترین مثال هم برای آن همان کپسول قرص است. اگر یک کپسول قرص را از هم باز کنید مواد دارویی را مشاهده می کنید که احتمالا هر کدام از آنها کار خاصی را در بدن شما انجام می دهند. شما هم می توانید با تبدیل سطح دسترسی تمام متغیرهای نمونه و متدهای یک کلاس به private همانند یک کپسول قرص آنها را در محیط کلاس خود کپسوله کنید. سوالی که بوجود می آید این است که اگر من یک متغیر نمونه یا همان instance variable را با سطح دسترسی private تعریف کنم چگونه می توانم به اطلاعات آن دسترسی پیدا کنم؟ پاسخ متد های getter و setter هستند.
متدهای getter و setter
اصولا برنامه نویسان جاوا متغیرهای نمونه (متغیرهایی که در بدنه کلاس تعریف می شوند و نه متد) را به صورت private تعریف می کنند. این امر سبب می شود که سایر کلاس ها و متدهای آنها به راحتی نتوانند مقدار این متغیرها را تغییر دهند. در عوض آنها مجبورند که از متدهای getter و setter که سطح دسترسی public دارند برای مقدار دهی و دستیابی به مقادیر متغیرهای نمونه استفاده کنند. ممکن است از خودتان بپرسید خوب چه فرقی می کند که متغیرهای نمونه را مستقیما مقدار دهی کنم یا از متدهاد getter و setter استفاده کنم؟
جواب این است که شما با استفاده از متدهای getter و setter می توانید مقادیری که به متغیرهای نمونه ارسال می شود را کنترل کنید و از ارسال و دریافت ورودی هایی که معتبر نیستند جلوگیری کنید. بگذارید با ذکر یک مثال مسئله را برایتان روشن کنم. فرض کنید می خواهید در نرم افزارتان سن کاربر را دریافت کنید. آن شخص یک عدد منفی را در نرم افزار وارد می کند و خوب همه می دانیم که سن یک شخص نمی تواند منفی باشد. اینجاست که باید پیام خطایی را به کاربر نمایش دهیم و به او بگوییم که سن خود را درست وارد نکرده است. این اتفاق از طریق قوانینی که در متد setter خودمان تعیین کرده ایم اتفاق می افتد. حال تصور کنید اگر سطح دسترسی public به متغیر نمونه خود داده بودیم چه اتفاقی می افتاد، مقدار منفی به جای سن آن شخص به راحتی قرار می گرفت!
نوشتن یک اپلیکیشن با استفاده متدهای getter و setter
بگذارید که با استفاده از متدهای getter و setter یک اپلیکیشن ساده با جاوا بنویسیم تا کاربرد این دو متد پر استفاده برای شما بیشتر مشخص شود. قرار نیست که در این اپلیکیشن اتفاق خاصی بیفتد. قرار است که اسم و سن یک نفر را بپرسیم و پیام خوش آمدگویی را با توجه به اطلاعاتی که وارد کرده است به او نمایش بدهیم. خوب پس شروع می کنیم.
public class UserTest {
private String username;
private int userAge;
public void setUsername(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public void setUserAge (int userAge) {
if (userAge > 0)
this.userAge = userAge;
else
System.out.println("\nYou entered invalid value, your age initialized with 0");
}
public int getUserAge() {
return userAge;
}
}
در این کلاس ما دو متغیر نمونه به نام های username و userAge تعریف کرده ایم و برای هر کدام یک متد getter و یک متد setter تعریف کرده ایم. در متد setUserAge قانونی را تعیین کرده ایم که در صورتی که داده ورودی برای سن کمتر از ۰ بود برنامه پیام خطایی را نمایش دهد.
توجه داشته باشید که معمولا متدهای setter مقداری را به عنوان ورودی دریافت می کنند ولی هیچ مقداری را بازگشت نمی دهند. این در حالی است که متدهای getter معمولا هیچ مقداری را دریافت نمی کنند و فقط مقداری را برگشت می دهند.
import java.util.Scanner;
public class mainClass {
public static void main(String[] args) {
UserTest amin = new UserTest();
Scanner input = new Scanner(System.in);
System.out.print("please enter your name: ");
amin.setUsername(input.next());
System.out.print("please enter your age: ");
amin.setUserAge(input.nextInt());
System.out.println("\nWelcome " + amin.getUsername() + " to learning java");
System.out.printf("You are %d !!! it's cool!", amin.getUserAge());
}
}
در متد main خود یک نمونه از کلاس UserTest ساخته ایم و نام آن را amin قرار داده ایم و پس از آن به مقدار دهی متغیرهای نمونه UserTest با متدهای setUsername و setUserAge با استفاده از مقادیری که کاربر وارد کرده است پرداخته ایم. در انتها پیام خوش آمد گویی به همراه نام کاربر و همچنین پیام مربوط به سن کاربر روی صفحه نمایش چاپ شده است.
سخن پایانی
در نهایت فایل مربوط به کدهایی که در بالا مشاهده می کنید را با کامنت های فارسی از طریق این لینک می توانید دانلود کنید و روی کامپیوتر خودتان از آن استفاده کنید.
سوالات خودتان را هم به ایمیل من amin.compani@gmail.com ارسال کنید. همچنین صفحه اینستاگرام من رو هم به آدرس https://www.instagram.com/java_pedia فراموش نکنید.
مطلبی دیگر از این انتشارات
آموزش زبان برنامهنویسی Rust – قسمت 2: انواع دادههای عددی و عملگرهای آنها
مطلبی دیگر از این انتشارات
آموزش زبان برنامهنویسی Rust – قسمت۱۳- شروع کار با Enumeration ها
مطلبی دیگر از این انتشارات
Laravel Share: پکیجی برای به اشتراک گذاری دادهها در ریکوئست