الحزم في لغة جافا packages – الجزء 2

استكمالاً لحديثنا عن الحزم في لغة جافا والذي بدأناه في التدوينة السابقة الحزم في لغة جافا packages – الجزء 1 أواصل الحديث معك عن بعض النقاط المهمة الخاصة بها.

لن أعيد عليك الحديث عن أهمية الحزم، ما ستقرأه في هذه التدوينة يكفي أن تعلم موضع أهميتها في المشاريع خلا عن كونها تمثل مجالاً للتسمية وتساعد في خلق حدود للوصول بالإضافة إلى أنها تساعدك على توزيع برنامجك.

فلْأبدأ معك الحديث عن الحزم..

هل تحتاج إلى تسمية الحزم والأصناف؟ عن صنف بن حزمة قال …

الأصناف في لغة جافا تتعلق بالحزمة الموجودة بها، ولكأنك تقول فلان بن فلان بن فلان!

أبوين مختلفين من الممكن أن يسميان نفس الاسم، محمد بن أحمد والآخر محمد بن علي، ووسيلة التمييز بينهم ذكر سلفهم.

مثال فئات داخل حزم

هذا هو الحال بالنسبة للمترجم الذي لا يعلم شيئاً عن الصنف test والذي يوجد في هذا المثال في حزمتين مختلفتين، يجبُ أن تُسمي الصنف باسمه كاملاً.

افترض أنك تريد أن تُنشئ كائناً من الصنف test الموجود بالحزمة second، عندها يجب أن تكون شفرتك المصدرية كما يلي

تعريف كائن بنفس اسم الصنف من حزمة أخرى
تعريف كائن بنفس اسم الصنف من حزمة أخرى

في العادة تحتوي الحزمة على عشرات الأصناف والأنواع types، وأثناء كتابتك لشفرتك المصدرية ستحتاج إلى التعامل مع عشرات الأصناف الموجودة بحزم أخرى، فهل يجب أن تستخدم طريقة التسمية الكاملة دائماً؟

لا تنسى أن المترجم يجب أن يعلم أين يوجد الصنف الذي تريد استخدامه.

لا يمكن للمترجم أن يكون بتلك الفظاظة، هنالك بعض الأمور المنطقية التي يستطيع الجميع استيعابها!

مثلاً إذا تعاملت مع صنف دون أن تذكر من حزمته ألا يعني ذلك أن تنادي الصنف الأقرب لك؟ هل ينادي أحدهم أخاه بـ فلان بن فلان؟!!

تحسينات في التعامل مع تسمية الأصناف

التحسين الأول:

 هو أنه لا داعي لذكر اسم الحزمة ما دمت تتعامل معه من داخل نفس الحزمة

التعامل مع الصنف من نفس الحزمة
التعامل مع الصنف من نفس الحزمة

التحسين الثاني:

كما أنك لا تحتاج إلى تعريف سلف بعض العناصر الأخرى لتسهيل العملية البرمجية، مثل جميع ما يوجد تحت حزمة java.lang والأنواع الأولية و الصنف String وغيرها الكثير مما يستخدم بصورة متكررة.

التحسين الثالث:

افترض أن لديك حزمة تحتاج إلى استخدام 10 أصنافٍ منها، الحل الوحيد حتى الآن هو كتابة اسم الفئة كاملةً.

التسمية الكاملة للأصناف في داخل الشفرة المصدرية
التسمية الكاملة للأصناف في داخل الشفرة المصدرية

هذه الطريقة لا تبدو عملية، لذلك يوجد هذا التحسين الثالث بحيث تستطيع أن تستخدم كلمة مفتاحية تسمى استيراد import بحيث تستطيع استيراد جميع الأصناف التي تحتاجها مرةً واحدة.

استيراد أنواع محددة من حزمة أخرى
استيراد أنواع محددة من حزمة أخرى

أما من ناحية تنظيمية، من الممكن كتابة جميع عبارات الاستيراد في أعلى الملف لتكون شفرتك المصدرية أكثر تنظيماً.

استيراد جميع الأنواع من حزمة أخرى
استيراد جميع الأنواع من حزمة أخرى

هناك بعض الخدع التي يجب أن تنتبه إليها أثناء عمليات استيراد الحزم.

خدع يجب أن تنتبه لها عند استيراد الحزم

الخدعة رقم 1:

محاولة استيراد صنف من حزمة أخرى له نفس اسم الصنف الذي تكتب به شفرتك المصدرية.

ربما تكون هذه الحالة واضحة لأن المترجم لن يسمح لك بها، ولكن يجبُ أن تنتبه إليها أثناء تسميتك للحزم حتى لا تعاني من هذه المشكلة ويسهل عليك استيراد الملفات مستقبلاً.

استيراد صنف باسم مكرر
استيراد صنف باسم مكرر

الخدعة رقم 2:

من الممكن أن تستخدم صنفاً غير الذي تريده تماماً دون أن تقصد!

عند تكرار اسم الصنف في الحزمة التي توجد بها شفرتك المصدرية وحزمة أخرى فإنه وفق التحسين الأول فإنك تستطيع استخدام الصنف دون ذكر سلفه، ولكن في حال قمت بكتابة عبارة استيراد لصنف من حزمة أخرى يحمل اسما يوجد في نفس الحزمة التي توجد بها شفرتُك المصدرية فإنك قد تتعرض لخدعة!

قد تتوقع أن الشفرة المصدرية قد تعمل وفق التحسين الأول، وهو غير صحيح، فلأنك كتبت عبارة الاستيراد ستكون الأولوية للصنف من الحزمة الأخرى بدلاً عن الصنف الموجود بنفس الحزمة.

إذا تُهت بين الكلمات السابقة شاهد الصورة وستتضح لك المشكلة

تكرار اسم الصنف في حزمتين وأثره على الاستيراد
تكرار اسم الصنف في حزمتين وأثره على الاستيراد

لا تعتقد بأن استيراد جميع العناصر بالحزمة سيجعل برنامجك أبطأ، فعلياً عملية الاستيراد هي عملية تسمية فقط لا أكثر ولا تؤدي لاستيراد جميع الشفرات المصدرية الموجودة بالحزمة فعلياً.

ماذا عن التحكم في الوصول ونشر برنامجك بعد الانتهاء منه؟!

من ناحية أخرى، للحزم تأثير مباشر على الأصناف، فالأصناف عادةً لا تُنشأ لتُستخدم في نفس الملف فقط، بل تُستخدم من قبل ملفات مصدرية أخرى.

هذه الملفات المصدرية قد تكون موجودة في نفس الحزمة أو حزم أخرى.

كما ذكرتُ سابقاً، الحزم تساعد على التحكم في الوصول إلى الملفات، مثلاً إذا كان هنالك صنفٌ خاص private ولكن في نفس الوقت يجب أن يُستخدم من قبل ملف مصدري في حزمة أخرى فإنك ستحتاج إلى إعادة هيكلة الملفات داخل الحزم أو التغيير في الملف نفسه.

ولأهمية الحزم، يوجد نوع محدد من أنواع الوصول يسمى protected، عندما يسند هذا المعرف إلى النوع بطريقة مباشرة أو غير مباشرة يصبح قابلاً للوصول في داخل الحزمة فقط.

اطلع على مفاهيم 6 أساسية حتى تبدأ التعامل مع الدوال في جافا.

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

كما تعلم، برامج جافا تعمل في جميع البيئات ما دامت بيئة تشغيل جافا JRE منصبة على تلك البيئة، والبرنامج التنفيذي لجافا يكون بالامتداد JAR.

فعلياً في البرامج البسية، بعد انتهاء التطوير والتأكد من عمل البرنامج بالطريقة المطلوبة تستطيع اصدار ملف JAR ومشاركته مع من سيستخدم برنامجك.. ولكن..

قبل الحديث عن ملف JAR سأخبرك شيئاً:

من الممكن أن تعتمد طريقةً تقليدية في نشر ملفات برنامجك، وذلك عبر نسخ الملف الرئيسي لملفات .class (الملفات بالامتداد class هي ترجمة للملفات المصدرية) بعد ذلك يستطيع أي شخص آخر عبر سطر الأوامر تشغيل البرنامج بالانتقال إلى حيث يوجد الصنف الرئيسي main class و استخدام الأمر java.

ملفات الحزم في برنامج جافا
ملفات الحزم في برنامج جافا

ولكن بدلاً عن ذلك -وهنا نواصل الحديث عن ملف JAR- تكفيك مشاركة ملف JAR والذي يحتوي على نفس الملفات التي كنت ستنسخها بطريقةٍ تقليدية.

لتتأكد من ذلك بإمكانك فك الضغط عن ملف JAR ومشاهدة الملفات الموجودة فيه. الطريقتان تعملان ولكن طريقة ملف JAR أسهل.

مصطفى الطيب

صديقٌ لنُظمِ المعلُومات و عُلومِ الحَاسِب و مُختصٌ بهما، مُحبٌ للعِلمِ و نَشرِه. أُشاركُ معارفي و تَجاربي و خِبراتي في تَدويناتٍ و دوراتٍ من خلال مُدونةِ عُلوم.

‫4 تعليقات

  1. هل من الممكن ترجمة (للحزم تأثير مباشر على الأصناف، فالأصناف عادةً لا تُنشأ لتُستخدم في نفس الملف فقط، بل تُستخدم من قبل ملفات مصدرية أخرى.) حيث سيساعد كثيرا فى فهم المقال.. وشكرا

    1. بما أن البرامج في لغة جافا لا تنشأ في العادة عبر إنشاء صنف واحد، بل يتم إنشاء عدة أصناف ذات علاقة، ويتم تنظيم هذه الأصناف في داخل حزم، ولا يمكن الوصول إلى هذه الأصناف بصورة صحيحة إلا بعد معرفة في أي حزمة تقع، بما أن كل ذلك يحدث، فإن للحزم تأثير مباشر وقوي جداً على الأصناف وطريقة التعامل معها.
      بالتأكيد الأصناف عبارة عن ملفات مصدرية.

      أتمنى أن يكون هذا الشرح وضَح المقصود.

  2. ان اصبحت مبرمجا لتطبيقات الاندرويد فهل لذلك علاقه بكوني مخترق للهواتف الاندرويد و كذلك المواقع هل هنالك علاقه بين انشاء موقع او اختراقه

    1. مرحباً يوسف،

      نعم توجد علاقة وثيقة، فالمبرمج بكتابته للشفرة المصدرية القابلة للاختراق يوفر للمخترق ثغرات لاختراق موقعه أو تطبيقه. لذا فالمبرمج يجب أن يعلم كيف يستطيع المخترق اختراق البرامج التي يعمل عليها حتى يتلافى ذلك.
      مع ملاحظة أن تلك المعرفة لن يتحصل عليها المبرمج إلا إذا بحث عنها، فهي لا تتوفر لكل المبرمجين.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق