CodeGym /وبلاگ جاوا /Random-FA /کپسوله سازی در جاوا
John Squirrels
مرحله
San Francisco

کپسوله سازی در جاوا

در گروه منتشر شد
سلام! ما درس امروز را به Encapsulation در جاوا اختصاص می دهیم و با مثال هایی درست خارج از دروازه شروع می کنیم:) در اینجا شما یک دستگاه پخش نوشابه معمولی دارید . من یک سوال از شما دارم: چگونه کار می کند؟ سعی کنید پاسخ دقیق بدهید: نوشابه از کجا می آید؟ دمای داخلی چگونه حفظ می شود؟ یخ در کجا ذخیره می شود؟ چگونه دستگاه می داند که کدام شربت را اضافه کند؟ احتمالاً پاسخی برای این سؤالات ندارید. خوب، شاید همه از این ماشین ها استفاده نکنند. آنها در حال حاضر چندان محبوب نیستند. بیایید مثال دیگری را امتحان کنیم. چیزی که قطعاً روزانه چندین بار از آن استفاده می کنید. اوه، من یک ایده دارم! به من بگویید موتور جستجوی گوگلاصول کپسولاسیون - 2 چگونه کار می کند. دقیقاً چگونه اطلاعات کلماتی را که وارد می کنید جستجو می کند؟ چرا این نتایج در راس هستند و سایر نتایج نیستند؟ حتی اگر هر روز از گوگل استفاده می کنید، احتمالاً نمی دانید. اما این مهم نیست. پس از همه، این چیزی نیست که شما باید بدانید. شما می توانید از یک موتور جستجو بدون فکر کردن به نحوه عملکرد آن استفاده کنید. شما می توانید نوشابه را از دستگاهی بخرید بدون اینکه بدانید چگونه ساخته شده است. شما می توانید بدون بررسی نحوه عملکرد موتور احتراق داخلی و حتی بدون دانستن فیزیک دبیرستان، یک ماشین رانندگی کنید. این همه به لطف یکی از اصول اصلی برنامه نویسی شی گرا امکان پذیر است: کپسوله سازی. در مطالعه مقالات مختلف در این زمینه، حتماً با دو مفهوم برنامه نویسی گسترده مواجه شده اید: کپسوله سازی و پنهان کردن اطلاعات. همانطور که اتفاق می افتد، افراد مختلف کلمه "کپسولاسیون" را به معنای چیزهای مختلف می دانند. ما هر دو اصطلاح را رمزگشایی می کنیم تا درک کاملی داشته باشید. در برنامه نویسی، معنای اصلی کپسولاسیون ترکیب داده ها و روش های کار با آن داده ها در یک بسته ("کپسول") بود. در جاوا، بسته بندی کپسوله سازی کلاس است . کلاس شامل داده ها (فیلدها) و متدهایی برای کار با آن داده است. این ممکن است برای شما بدیهی به نظر برسد، اما در سایر پارادایم های برنامه نویسی همه چیز به گونه ای متفاوت تنظیم شده است. به عنوان مثال، در برنامه نویسی تابعی، داده ها به شدت از عملیات داده جدا می شوند. در برنامه نویسی شی گرا (OOP)، برنامه ها از کپسول ها (کلاس ها) تشکیل شده اند که از داده ها و توابع کار با داده ها تشکیل شده اند.اصول کپسولاسیون - 3

حالا بیایید در مورد پنهان کردن اطلاعات صحبت کنیم

چگونه می‌توانیم از انواع مکانیسم‌های پیچیده استفاده کنیم بدون اینکه بدانیم چگونه ساخته شده‌اند یا چگونه کار می‌کنند؟ این ساده است: سازندگان آنها رابط های ساده و راحت ارائه کردند. در دستگاه نوشابه، رابط دکمه های روی پانل جلویی است. یک دکمه به شما امکان می دهد اندازه فنجان را انتخاب کنید. شربت را با دکمه دوم انتخاب می کنید. یک سوم مسئول اضافه کردن یخ است. و این تنها کاری است که باید انجام دهید. فرقی نمی کند که داخل دستگاه چه شکلی است. نکته مهم این است که طراحی آن به گونه ای است که کاربر با فشار دادن سه دکمه نوشابه دریافت می کند. همین مورد در مورد خودرو نیز صدق می کند. مهم نیست در داخل چه خبر است. نکته مهم این است که وقتی پدال سمت راست را فشار می دهید ماشین به جلو حرکت می کند و وقتی پدال چپ را فشار می دهید سرعت ماشین کاهش می یابد. این ماهیت پنهان کردن اطلاعات است. تمام "مطابقات" یک برنامه از دید کاربر پنهان است. چنین اطلاعاتی برای کاربر اضافی یا غیر ضروری است. کاربر به یک نتیجه نهایی نیاز دارد، نه یک فرآیند داخلی. برای مثال، بیایید نگاهی به کلاس Vehicle بیندازیم :
public class Vehicle {

   public void gas() {

       /* Some complicated things happen inside a car.
       As a result, it moves forward */
   }

   public void brake() {

       /* Some complicated things happen inside a car.
       As a result, it slows down */
   }

   public static void main(String[] args) {

       Vehicle vehicle = new Vehicle();

       // How everything looks to the user

       // Press one pedal, the car moves
       vehicle.gas();

       // Press the other pedal, the car brakes
       vehicle.brake();
   }
}
به این ترتیب پیاده سازی در یک برنامه جاوا پنهان می شود. درست مانند زندگی واقعی: یک رابط (روش ها) به کاربر ارائه می شود. در یک برنامه، اگر برای انجام یک عمل به ماشین نیاز دارید، به سادگی روش مورد نظر را فراخوانی می کنید. اتفاقی که در داخل این روش ها می افتد زائد است. مهم این است که همه چیز همانطور که باید کار کند. در اینجا ما در مورد پنهان سازی پیاده سازی صحبت کرده ایم. جاوا همچنین دارای مخفی کردن داده ها است. ما در مورد آن در درس در مورد گیرنده و تنظیم کننده نوشتیم، اما یادآوری ضرری ندارد. به عنوان مثال، ما یک کلاس Cat داریم:
public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }


}
شاید از یک درس گذشته به یاد داشته باشید که مشکل این کلاس چیست؟ اگر نه، بیایید به یاد بیاوریم. مشکل این است که داده ها (فیلدهای) آن برای همه باز است. یک برنامه نویس دیگر به راحتی می تواند یک گربه بی نام با وزن 0 و سن -1000 سال ایجاد کند:
public static void main(String[] args) {

   Cat cat = new Cat();
   cat.name = "";
   cat.age = -1000;
   cat.weight = 0;

}
در این شرایط، می‌توانید با دقت پیگیری کنید که آیا یکی از همکارانتان در حال ایجاد اشیاء با حالت نامعتبر است یا خیر، اما بسیار بهتر است که حتی امکان ایجاد این اشیاء نامعتبر را نیز از بین ببرید. اصول کپسولاسیون - 4ما به مخفی کردن داده ها با کمک:
  1. اصلاح کننده های دسترسی ( خصوصی، محافظت شده، پیش فرض بسته
  2. گیرنده و تنظیم کننده
ما از آنها برای بررسی اینکه آیا کسی سعی دارد به گربه سن منفی بدهد استفاده می کنیم. همانطور که قبلاً گفتیم، نویسندگان مقالات مختلف در مورد کپسوله سازی در واقع به کپسوله سازی (ترکیب داده ها و روش ها) یا پنهان کردن اطلاعات یا هر دو اشاره می کنند. جاوا هر دو مکانیسم را دارد (الزاما در سایر زبان های OOP اینطور نیست)، بنابراین گزینه آخر صحیح ترین است.

کپسولاسیون چندین مزیت مهم به ما می دهد:

  1. نظارت بر وضعیت صحیح شی نمونه‌هایی از این را در بالا آوردیم: به لطف تنظیم‌کننده و اصلاح‌کننده خصوصی ، ما برنامه خود را در برابر گربه‌هایی با وزن 0 ایمن کرده‌ایم.

  2. رابط کاربر پسند. ما فقط روش ها را در معرض دید کاربر قرار می دهیم. کاربر فقط باید با آنها تماس بگیرد تا نتیجه بگیرد. و نیازی به بررسی جزئیات نحوه کار آنها نیست.

  3. تغییرات کد بر روی کاربران تأثیر نمی گذارد. ما همه تغییرات را در روش ها ایجاد می کنیم. این روی کاربران تأثیری نمی‌گذارد: آنها برای اعمال گاز ()vehicle.gas نوشتند ، و این همان کاری است که به انجام آن ادامه می‌دهند. این واقعیت که ما چیزی را در متد gas() تغییر دادیم نامرئی می ماند: مانند قبل، آنها به سادگی نتیجه مورد نیاز را دریافت می کنند.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION