JavaRush /مدونة جافا /Random-AR /مبادئ التغليف في جافا

مبادئ التغليف في جافا

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

   public void gas() {

       /*some complicated things are happening inside the car
       as a result of which it goes forward*/
   }

   public void brake() {

       /*some complicated things are happening inside the car
       as a result of which it slows down*/
   }

   public static void main(String[] args) {

       Auto auto = new Auto();

       // How everything looks to the user

       //pressed one pedal - went
       auto.gas();

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

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

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