CodeGym /مدونة جافا /Random-AR /التغليف في جافا
John Squirrels
مستوى
San Francisco

التغليف في جافا

نشرت في المجموعة
أهلاً! سنخصص درس اليوم للتغليف في Java ونبدأ بالأمثلة مباشرة خارج البوابة :) هنا لديك آلة توزيع الصودا العادية . لدي سؤال واحد لك: كيف يعمل؟ حاول أن تعطي إجابة مفصلة: من أين تأتي الصودا؟ كيف يتم الحفاظ على درجة الحرارة الداخلية؟ أين يتم تخزين الجليد؟ كيف تعرف الآلة أي شراب يجب إضافته؟ ربما ليس لديك إجابات على هذه الأسئلة. حسنًا، ربما لا يستخدم الجميع هذه الآلات. إنهم لا يتمتعون بشعبية كبيرة في الوقت الحاضر. دعونا نجرب مثالا آخر. شيء تستخدمه بالتأكيد عدة مرات كل يوم. أوه، لدي فكرة! مبادئ التغليف - 2أخبرني كيف يعمل محرك بحث جوجل . كيف بالضبط يبحث عن معلومات حول الكلمات التي تدخلها؟ لماذا هذه النتائج في الأعلى دون غيرها؟ على الرغم من أنك تستخدم Google كل يوم، فمن المحتمل أنك لا تعرف ذلك. ولكن هذا لا يهم. بعد كل شيء، هذا ليس شيئًا تحتاج إلى معرفته. يمكنك استخدام محرك بحث دون التفكير في كيفية عمله بالضبط. يمكنك شراء الصودا من الآلة دون معرفة كيفية تصنيعها. يمكنك قيادة السيارة دون الخوض في كيفية عمل محرك الاحتراق الداخلي ودون حتى معرفة الفيزياء في المدرسة الثانوية. كل هذا ممكن بفضل أحد المبادئ الرئيسية للبرمجة الشيئية: التغليف. عند قراءة مقالات مختلفة حول هذا الموضوع، لا بد أنك واجهت مفهومين برمجيين شائعين: التغليف وإخفاء المعلومات. كما يحدث، يفهم الأشخاص المختلفون كلمة "التغليف" على أنها تعني أشياء مختلفة. سنقوم بفك كلا المصطلحين حتى يكون لديك فهم كامل. في البرمجة، كان المعنى الأصلي للتغليف هو دمج البيانات وطرق العمل مع تلك البيانات في حزمة واحدة ("كبسولة"). في Java، الحزمة المغلفة هي الفئة . يحتوي الفصل على البيانات (الحقول) وطرق العمل مع تلك البيانات. مبادئ التغليف - 3قد يبدو هذا واضحًا بالنسبة لك، لكن كل شيء يتم ترتيبه بشكل مختلف في نماذج البرمجة الأخرى. على سبيل المثال، في البرمجة الوظيفية، يتم فصل البيانات بشكل صارم عن عمليات البيانات. في البرمجة الشيئية (OOP)، تتكون البرامج من كبسولات (فئات) تتكون من البيانات والوظائف للعمل مع البيانات.

الآن دعونا نتحدث عن إخفاء المعلومات

كيف نستخدم جميع أنواع الآليات المعقدة دون أن نفهم كيفية بنائها أو كيفية عملها؟ الأمر بسيط: لقد قدم منشئو هذه البرامج واجهات بسيطة ومريحة. في ماكينة المشروبات الغازية، الواجهة هي الأزرار الموجودة على اللوحة الأمامية. زر واحد يتيح لك اختيار حجم الكوب. اخترت الشراب مع الزر الثاني. والثالث مسؤول عن إضافة الثلج. وهذا كل ما عليك القيام به. لا يهم كيف تبدو الآلة من الداخل. الشيء المهم هو أنه مصمم بحيث يحصل المستخدم على الصودا بالضغط على ثلاثة أزرار. الشيء نفسه ينطبق على السيارة. لا يهم ما يحدث في الداخل. المهم هو أنه عندما تضغط على الدواسة اليمنى تتحرك السيارة للأمام، وعندما تضغط على الدواسة اليسرى تتباطأ السيارة. هذا هو جوهر إخفاء المعلومات. جميع "الأجزاء الداخلية" للبرنامج مخفية عن المستخدم. هذه المعلومات غير ضرورية أو غير ضرورية للمستخدم. يحتاج المستخدم إلى نتيجة نهائية، وليس إلى عملية داخلية. على سبيل المثال، دعونا نلقي نظرة على فئة المركبة :
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();
   }
}
هذه هي الطريقة التي يتم بها إخفاء التنفيذ في برنامج Java. تمامًا كما هو الحال في الحياة الواقعية: يتم تزويد المستخدم بواجهة (طرق). في أحد البرامج، إذا كنت بحاجة إلى سيارة لتنفيذ إجراء ما، فما عليك سوى استدعاء الطريقة المطلوبة. ما يحدث داخل هذه الأساليب لا لزوم له. ما يهم هو أن كل شيء يعمل كما ينبغي. لقد تحدثنا هنا عن إخفاء التنفيذ. تحتوي Java أيضًا على إخفاء البيانات. لقد كتبنا عن ذلك في الدرس حول الحروف والأدوات، لكن التذكير لن يضر. على سبيل المثال، لدينا فئة القط :
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. الحروف والمستوطنين.
نستخدمها للتحقق مما إذا كان شخص ما يحاول إعطاء القطة عمرًا سلبيًا. كما قلنا سابقًا، يشير مؤلفو المقالات المختلفة حول التغليف في الواقع إلى التغليف (دمج البيانات والأساليب) أو إخفاء المعلومات، أو كليهما. تحتوي Java على كلتا الآليتين (ليس هذا هو الحال بالضرورة في لغات OOP الأخرى)، لذا فإن الخيار الأخير هو الأكثر صحة.

يمنحنا التغليف العديد من المزايا المهمة:

  1. مراقبة حالة الكائن الصحيحة. لقد قدمنا ​​أمثلة على ذلك أعلاه: بفضل أداة الضبط والمعدل الخاص ، قمنا بتأمين برنامجنا ضد القطط التي يبلغ وزنها 0.

  2. واجهة سهلة الاستخدام. نترك فقط الأساليب المكشوفة للمستخدم. يحتاج المستخدم ببساطة إلى الاتصال بهم للحصول على نتيجة. وليست هناك حاجة على الإطلاق للخوض في تفاصيل كيفية عملها.

  3. لا تؤثر تغييرات التعليمات البرمجية على المستخدمين. نقوم بإجراء كافة التغييرات داخل الأساليب. هذا لا يؤثر على المستخدمين: لقد كتبوا Vehicle.gas() ‎ لتطبيق الغاز، وهذا ما سيستمرون في فعله. حقيقة أننا قمنا بتغيير شيء ما داخل طريقة الغاز () تظل غير مرئية: كما كان من قبل، فهم ببساطة يحصلون على النتيجة المطلوبة.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION