English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
لتحسين تنظيم الفئات، يقدم Java ميكانيكية الحزم، التي تستخدم لتمايز مجال الاسم لاسم الفئة.
1、جمع الفئات أو الواجهات التي لها نفس أو علاقة قريبة في نفس الحزمة، مما يجعل البحث عن الفئات واستخدامها أكثر سهولة.
2、مثل مجلد، يستخدم حزمة طريقة تخزين شجرة الدليل. يجب أن تكون أسماء الفئات المختلفة داخل الحزمة، يمكن أن تكون أسماء الفئات المختلفة في الحزم المختلفة متشابهة، عند التعبير عن الفئات التي تحمل نفس الاسم في الحزم المختلفة، يجب إضافة اسم الحزمة للتمييز. لذلك، يمكن للحزمة تجنب衝突 في الأسماء.
3- تحدد الحزمة أيضًا حقوق الوصول، يمكن للكلاسيكيات التي تملك حقوق الوصول إلى الحزمة الوصول إلى الكلاسيكيات في الحزمة.
يستخدم Java ميكانيكية الحزمة (package) لمنع التعارض في الأسماء، التحكم في الوصول، وتقديم البحث والتحديد للكلاسيكيات، الواجهات، الأنواع (enumerations) والتعليقات (annotations).
تنسيق جملة الحزمة (package) هو:
package pkg1[.pkg2[.pkg3...]];
على سبيل المثال، ملف Something.java محتواه
package net.java.util; public class Something{ ... }
ثم يجب أن يكون مسارها net/java/util/Something.java بهذه الطريقة يتم حفظها. وظيفة الحزمة (package) هي تصنيف البرامج المختلفة من java لسهولة استدعاء البرامج الأخرى.
يمكن تعريف حزمة (package) ك مجموعة من الأنواع المترابطة (الكلاسيكيات، الواجهات، الأنواع، التعليقات) التي توفر حماية الوصول وادارة المساحة الإسمية.
إليك بعض الحزم في Java:
java.lang- حزمة الكلاسيكيات الأساسية
java.io- الوظائف التي تحتوي على وظائف إدخال/إخراج
يمكن للمطورين أن يضعوا مجموعة من الكلاسيكيات والواجهات وما إلى ذلك في حزمة ويحددوا حزمتهم الخاصة. وهو أمر يستحق الترويج في التطوير العملي، عند الانتهاء من تنفيذ الكلاسيكيات، يمكن تجميع الكلاسيكيات ذات الصلة لتسهيل تحديد الكلاسيكيات والواجهات والأنواع والتعليقات وما إلى ذلك.
بما أن الحزمة تخلق مساحة إسمية جديدة (namespace)، فإنها لن تكون في تعارض مع أي اسم في حزمة أخرى. باستخدام ميكانيكية الحزمة، يصبح من السهل تحقيق التحكم في الوصول وتسهيل تحديد الكلاسيكيات.
عند إنشاء حزمة، يجب أن تختار اسمًا مناسبًا لهذه الحزمة. بعد ذلك، إذا كان ملف مصدر آخر يحتوي على الكلاسيكيات أو الواجهات أو الأنواع أو التعليقات التي يقدمها هذا الحزمة، يجب وضع إعلان الحزمة في بداية هذا الملف.
إعلان الحزمة يجب أن يكون في السطر الأول من ملف المصدر، يمكن أن يكون هناك إعلان حزمة واحد فقط في كل ملف، ويعمل كل نوع في هذا الملف على تطبيقه.
إذا لم يتم استخدام إعلان الحزمة في ملف المصدر، فإن الكلاسيكيات، الوظائف، الأنواع، التعليقات وما إلى ذلك يتم وضعها في حزمة غير معروفة (unnamed package).
دعونا نرى مثالاً، هذا المثال يخلق حزمة تُدعى animals. عادة ما يتم استخدام الأحرف الصغيرة في التسمية لتجنب التعارض مع الأسماء الكلاسيكية والواجهات.
في حزمة animals إضافة واجهة (interface):
/* اسم الملف: Animal.java */ package animals; interface Animal { public void eat(); public void travel(); }
ثم، أضف تنفيذ هذا الجهاز في نفس الباقة:
package animals; /* اسم الملف: MammalInt.java */ public class MammalInt implements Animal{ public void eat(){ System.out.println("Mammal eats"); } public void travel(){ System.out.println("Mammal travels"); } public int noOfLegs(){ return 0; } public static void main(String args[]){ MammalInt m = new MammalInt(); m.eat(); m.travel(); } }
ثم، قم بتجميع هذه الملفات، وضعهما في مجلد يسمى animals. استخدم الأمر التالي لتشغيله:
$ mkdir animals $ cp Animal.class MammalInt.class animals $ java animals/MammalInt Mammal eats Mammal travel
للاستخدام عضو باقة معينة، يجب على برنامج Java إدراج الباقة بشكل واضح. يمكن استخدام جملة "import" لتحقيق هذا الهدف.
في ملفات المصدر java، يجب أن تكون جملة import بعد جملة package، قبل تعريف جميع الفئات، يمكن أن تكون موجودة أو متعددة، نموذج الجملة كما يلي:
import package1[.package2…].(classname|*);
إذا كانت هناك فئة في باقة، ترغب في استخدام فئة أخرى من نفس الباقة، يمكن توفير اسم الباقة.
الباقة payroll تحتوي بالفعل على فئة Employee،接下来向 باقة payroll إضافة فئة Boss. يمكن استخدام فئة Boss دون استخدام بادئة payroll عند الاستدلال على فئة Employee، مثال فئة Boss كما يلي.
package payroll; public class Boss { public void payEmployee(Employee e) { e.mailCheck(); } }
إذا لم تكن فئة Boss موجودة في حزمة payroll ماذا؟ يجب أن تستخدم فئة Boss إحدى الطرق التالية لاستيراد الفئات من حزم أخرى.
استخدام اسم الكامل للفئة، مثل:
payroll.Employee
باستخدام import استخدام كلمة المفتاحية مع شريط السكاكين "*"
import payroll.*;
استخدام import استخدام كلمة المفتاحية لاستيراد فئة Employee:
import payroll.Employee;
ملاحظة:
يمكن أن يحتوي ملف الفئة على أي عدد من تصريحات الاستيراد. يجب أن تكون تصريحات الاستيراد بعد تصريح الحزمة، وقبل تصريح الفئة.
تكون هناك نتيجتان رئيسيتان لوضع الفئات في الحزم:
يصبح اسم الحزمة جزءًا من اسم الفئة، كما ناقشنا سابقًا.
يجب أن تكون اسم الحزمة متطابقة مع بنية الدلائل التي تحتوي على الكود النصي المكتوب بالبايت.
إليك طريقة بسيطة لإدارة ملفات java الخاصة بك:
ضع مصدر الفئة، والواجهات وأصناف أخرى في نص واحد، ويكون اسم هذا الملف هو اسم هذا النوع، ويضاف إليه امتداد .java. على سبيل المثال:
// اسم الملف : Car.java package vehicle; public class Car { // تحقيق الفئة }
بعد ذلك، ضع ملف المصدر في دليل، يجب أن يكون هذا الدليل مطابق لاسم الحزمة التي يوجد فيها الفئة.
....\vehicle\Car.java
الآن، سيكون الاسم الصحيح للفئة والمسار كما يلي:
اسم الفئة -> vehicle.Car
اسم المسار -> vehicle\Car.java (في نظام ويندوز)
عادةً، يستخدم الشركة شكل عكسي من اسم نطاق الإنترنت الخاص بها كاسم الحزمة. على سبيل المثال: اسم نطاق الإنترنت هو oldtoolbag.com، فإن جميع أسماء الحزم تبدأ بـ com.w3codebox. كل جزء من اسم الحزمة ي对应 دليل فرعي.
على سبيل المثال: هناك com.w3codebox.test حزمة، تحتوي هذه الحزمة على ملف مصدر يسمى w3codebox.java، فإنه يجب أن يكون لديك سلسلة من الدلائل كما يلي:
....\com\w3codebox\test\w3codebox.java
عند التجميع، يخلق محول البرامج ملف خروجي مختلف لكل فئة، واجهة وأصناف أخرى في الحزمة، ويكون اسم ملف الخروج هو اسم هذا النوع، ويضاف إليه امتداد .class كاملاً. مثلاً:
// اسم الملف: w3codebox.java package com.w3codebox.test; public class w3codebox { } class Google { }
الآن، نستخدم خيار -d لترجمة هذا الملف، كما يلي:
$javac -d . w3codebox.java
سيتم وضع ملفات التبريد المكتملة مثل هذا:
.\com\w3codebox\test\w3codebox.class .\com\w3codebox\test\Google.class
يمكنك مثل هذا أن تدخل جميع \com\w3codebox\test\ فيها يتم تعريف الكلاس والواجهات وغيرها:
import com.w3codebox.test.*;
يجب أن تكون ملفات .class التي تم تبريدها مشابهة لملفات .java المصدرية، ويجب أن تكون دليلها متطابقًا مع اسم الحزمة. ومع ذلك، لا يُطلب أن يكون مسار ملفات .class متطابقًا مع مسار ملفات .java. يمكنك تنظيم دليلي الشفرة المصدرية والكلاس بشكل منفصل.
<path-one>\sources\com\w3codebox\test\w3codebox.java <path-two>\classes\com\w3codebox\test\Google.class
بهذه الطريقة، يمكنك مشاركة مجلد كلاساتك مع باقي المبرمجين دون كشف عن شفرتك المصدرية. يمكن أن يساعدك هذا الأسلوب في إدارة ملفات الشفرة المصدرية وملفات الكلاس في العثور على جميع الأنواع المستخدمة في برنامجك.
يُسمى مسار مجلد الكلاسات المطلق بـ مسار class path، يتم تعيينه في متغير النظام CLASSPATH يبنى المبرمج والجافا فيرتوماً مسار ملف .class من خلال إضافة اسم الحزمة إلى مسار class path.
<path- two>\classes هو مسار class path، واسم الحزمة هو com.w3codebox.test، وسيبحث المبرمج والJVM عن ملفات .class في <path-two>\classes\com\w3codebox\test.
قد يحتوي مسار class path على عدة مسارات، ويجب فصل المسارات باستخدام علامة الفصل. بالافتراض، يبحث المبرمج والJVM في الدليل الحالي. يتم وضع ملفات JAR في مسار class path لأنها تحتوي على كلاسات تتعلق بمنصة Java، لذا يتم وضعها بشكل افتراضي في مسار class path.
استخدم الأمر التالي لعرض متغير CLASSPATH الحالي:
منصة Windows (تحت سطر الأوامر DOS): C:\> set CLASSPATH
منصة UNIX (تحت شل Bourne): # echo $CLASSPATH
حذف محتوى متغير CLASSPATH الحالي:
منصة Windows (تحت سطر الأوامر DOS): C:\> set CLASSPATH=
منصة UNIX (تحت شل Bourne): # unset CLASSPATH; export CLASSPATH
إعداد متغير CLASSPATH:
منصة Windows (تحت سطر الأوامر DOS): C:\> set CLASSPATH=C:\users\jack\java\classes
منصة UNIX (تحت شل Bourne): # CLASSPATH=/home/jack/java/classes; export CLASSPATH