سؤال

أنا مبتدئ تعلمت أنه إذا حددت القول

package my.first.group.here;
...

ثم سيتم وضع ملفات Java الموجودة في هذه الحزمة تحت my/first/group/here الدليل.

ما هو الغرض الرئيسي من وضع بعض ملفات Java في حزمة؟ أيضا، إذا اخترت اعتماد هذا، كيف يجب علي جمعها؟

شكرا لك


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

هل كانت مفيدة؟

المحلول

لنبدأ بتعريف "حزمة Java"، كما هو موضح في ويكيبيديا المادة:

حزمة Java هي آلية لتنظيم فصول Java إلى مساحات أسماء مشابهة لاحتلات المعدلة. يمكن تخزين حزم Java في ملفات مضغوطة تسمى ملفات JAR، مما يسمح للفئات بتنزيل أسرع كمجموعة بدلا من واحدة في كل مرة. عادة ما يستخدم المبرمجون حزم لتنظيم الفئات التي تنتمي إلى نفس الفئة أو توفير وظيفة مماثلة.

حتى بناء على ذلك، عبوات في Java هي ببساطة آلية تستخدم لتنظيم الطبقات ومنع تصادمات اسم الفصل. وبعد يمكنك تسميته أي شيء تريده، لكن الشمس قد نشرت بعضها اتفاقيات التسمية انه انت ينبغي استخدام عند تسمية الحزم:

حزم

يتم دائما كتابة بادئة اسم حزمة فريدة من نوعها في أحرف ASCII صغيرة الحجم ويجب أن تكون واحدة من أسماء النطاقات ذات المستوى الأعلى أو COM حاليا أو EDU أو GOV أو MIL أو NET أو ORG أو أحد رموز اللغة الإنجليزية ذات حرفين تحديد البلدان على النحو المحدد في ISO Standard 3166، 1981.

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

أمثلة:

  • com.sun.eng.

  • com.apple.quicktime.v2.

  • edu.cmu.cs.bovik.cheese.

نصائح أخرى

أنا تطبيق كبير، لا بد أن يكون لديك اثنين من الملفات المسمى بالضبط نفس الشيء (java.util.date و java.sql.date)، خاصة عند البدء في جلب في جارس الطرف الثالث. لذلك في الأساس، يمكنك استخدام الحزم لضمان التفرد.

الأهم من ذلك، في رأيي، تعبأ التعبئة والتغليف في شرائح ذات مغزى. لذلك تحتوي حزمة SQL الخاصة بي على رمز مرتبط SQL، وحزمة المسجل الخاصة بي مقابض التسجيل.

إنها تتيح للبرنامج أن يتكون البرنامج من برامج / مكونات / مكتبة مختلفة، بحيث لن يتعارض أسماء فئاتهم وستتعارض المكونات في تنظيمها. يرى http://java.sun.com/docs/Books/tutorial/java/package/index.html.

في Java إنها عرفة لتسمية الحزم كأسماء النطاقات العكسية. على سبيل المثال، إذا كان مجال شركتك هو "Initech.com" وأنت تقوم بإجراء برنامج يسمى "Gizmo"، فإن أسماء الحزم مسبقا عادة "com.initech.gizmo"، مع subpackages لمكونات البرنامج المختلفة.

بالإضافة إلى NameSpacing المذكورة في إجابات أخرى، يمكنك تحديد الوصول إلى الأساليب والحقول بناء على النطاق المعلن بهذا العضو. أعضاء مع عامة إن النطاق يمكن الوصول إليه بحرية، للحد من الوصول الذي تحدده عادة نشر (أي مخفية خارج الفصل). يمكنك أيضا استخدام محمي النطاق للحد من الوصول إلى النوع وأطفاله. هناك أيضا إفتراضي النطاق (عضو مع عدم وجود مؤهل لديه النطاق الافتراضي) الذي يسمح بأنواع الأطفال وأنواع الأطفال في نفس الحزمة الوصول إلى العضو. يمكن أن تكون هذه طريقة فعالة لمشاركة الحقول والأساليب دون توفرها على نطاق واسع، ويمكن أن تساعد في الاختبار.

على سبيل المثال، ستكون الطريقة أدناه مرئية لجميع الأعضاء الآخرين في نفس الحزمة.

public class Foo {
    int doSomething() {
        return 1;
    }
}

لاختبار الطريقة التي يمكنك تحديد نوع آخر في نفس الحزمة (ولكن ربما موقع مصدر مختلف)، فإن هذا النوع سيكون قادرا على الوصول إلى الطريقة.

public class FooTest {
    @Test
    int testDoSomething() {
        Foo foo = new Foo();
        assertEquals(1, foo.doSomething());
    }
}

الحزم مهمة لإعطاء مرونة لفصل الفصول الدراسية. يمكن استخدامها ل:

  • فصل المشاريع
  • فصل الوحدات
  • فصل طبقات التطبيق (الأعمال التجارية، الويب، DAO)
  • مزيد من أدق دفتر رمز الحبيبات

علي سبيل المثال

com.mycompany.thisproject.thismodule.web

يمكن أن تشير إلى طبقة الويب من بعض الوحدة.

في نهاية المطاف، هناك 3 أسباب أساسية نريد استخدام حزم في Java.

1) صيانة أسهل

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

2) توفير الحزمة الأمن

الحزم تسمح الوصول الخارجي إلى فقط public وصول المعدلات على الأساليب في الفصول الموجودة. باستخدام protected أو لا يوجد معدل يمكن الوصول إليه إلا للفصول الدراسية داخل نفس الحزمة. لمزيد من المعلومات، انظر المشاركة:أي تعديل Access Java يسمح للعضو بالوصول إليه فقط من قبل الفئات الفرعية في حزمة أخرى؟

3) تجنب تسمية مماثلة

على غرار أسماء الأسماء .NET، يتم احتواء أسماء الفئات في نطاق حزمة المحتويات الخاصة بهم. هذا يعني أن حزمتين حصريتين متبادلتين يمكن أن تحتوي على فئات بنفس الاسم. وذلك لأن الحزم نفسها لها أسماء مختلفة وبالتالي، فإن الأسماء المؤهلة بالكامل مختلفة. لمزيد من المعلومات، راجع البرنامج التعليمي [تسمية الحزمة: دروس Java] [3].

من ويكيبيديا الصفحة في الموضوع:

"حزمة Java هي آلية لتنظيم فئات Java في مساحات أسماء مشابهة لاحتلات المعدو. يمكن تخزين حزم Java في ملفات مضغوطة تسمى ملفات JAR، مما يسمح للفئات بتنزيل أسرع كمجموعة بدلا من واحد في وقت واحد. مبرمجون أيضا استخدم حزم لتنظيم الفئات التي تنتمي إلى نفس الفئة أو توفير وظيفة مماثلة. "

أيضا، إذا اخترت اعتماد هذا، كيف يجب علي جمعها؟

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

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

الجواب، بالطبع، هو أن الحزم توفر المنظمة. جزء من البرنامج الذي واجهات قاعدة البيانات يختلف عن جزء من البرنامج الذي يعرض UI للمستخدم، لذلك سيكونون في حزم مختلفة.

مثل الدلائل، فإنه يوفر أيضا طريقة لحل النزاعات الاسم. يمكنك الحصول على temp.txt في إشارة بضع دلائل مختلفة بنفس الطريقة التي يمكن أن يكون لديك فئتين تظهر في حزم مختلفة. يصبح هذا مهم (1) عند بدء الجمع بين التعليمات البرمجية مع أشخاص آخرين هناك على الإنترنت أو (2) حتى ندرك كيفية عمل التحميل في Java.

شيء مهم آخر عن الحزم هو محمي عضو في التحكم في الوصول.

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

جافا بالضبط في تنفيذها. لا يغادر المجال في الإغراق حقا.

إذا كان الجميع يستخدمون نفس الحزمة، فسيتعين عليهم العثور على بعض "World Wide" لضمان عدم جمع أسماء فئة من أي وقت مضى.

يتيح ذلك كل فئة واحدة مكتوبة من أي وقت مضى تتناسب مع "مكان" الخاص بها والتي لا تضطر إلى إلقاء نظرة عليها إذا كنت لا ترغب في ذلك.

قد يكون لديك كائنات مختلفة "نقطة" محددة في 4 أماكن مختلفة على نظامك، لكن فصلك سيستخدم فقط الشخص الذي تتوقعه (لأنك تقوم باستيراد ذلك واحد).

الطريقة التي يضمنونها أن كل شخص لديه مساحة خاصة بهم هو استخدام المجال العكسي الخاص بك، لذلك يكون لي "TV.Kress.bill". أنا أملك هذا المجال - في الواقع أشاركها مع أخي "TV.Kress.doug" وحتى رغم أننا نشارك نفس المجال، لا يمكننا الحصول على تصادم.

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top