حزم الجافا (Java Packages) - ماهي حزم الجافا؟
- لماذا نحتاج حزم الجافا؟
- كيف نستطيع انشاء حزم الجافا؟
ماهي حزم الجافا؟التعريف:حزم الجافا هي مجموعة من الفئات المترابطة، و كل مجموعة من الفئات تنظم تحت حزمة معينة لأجل تحديد الهوية. و الحزمة تتكون من:
- حزم فرعية تحت الحزمة الأم.
- مجموعة من الفئات المتعلقة بالحزمة الأم.
بعض الأمثلة: الحزمة Java تحتوي على حزم فرعية منها applet, io, alng, net, awt & util و لو أخذنا الحزمة الفرعية Java.awt لحصلنا على حزمة فرعية من awt مثل image و يكون الامتداد لها Java.awt.image
لماذا نحتاج حزم الجافا؟ مبرمجي الجافا يعتمدون على الحزم لتكوين فئات مترابطة داخل هذه الحزم و الأسباب هي:
- العثور على الفئات بشكل سريع و استخدامها بالبرامج.
- تنحدر الفئات تحت الحزم لكي لا تتعارض اسماء الفئات مع بعضها البعض.
- للتحكم بالفئات بشكل كامل.
مسميات الحزم و الحزم الفرعية و الفئات: الحزمة تتكون من حزم فرعية و فئات متفرعة، لكن لا نستطيع تسمة الحزمة أو الحزم الفرعية أو احدى الفئات باسم واحد. و مثال على ذلك: الحزمة java.awt لديها حزمة فرعية بالاسم image. لكن لا نستطيع تسمية احدى الفئات بالاسم image، لأن الاسم محجوز للحزمة الفرعية و العكس صحيح.
كيف نستطيع انشاء حزم الجافا؟ لنرى مجموعة من الفئات و التي نستطيع وضعها في حزمة معينة. نفترض اننا كتبنا فئات عن النقاط و الدائرة و المستطيل و المربع.
public class Point {
int_x coord;
int_y coord;
public Point() {
x_coord = 0;
y_coord = 0;
}
public Point(int x, int y) {
x_coord = x;
y_coord = y;
}
}public class Rectangle extends Point
{
double width;
double height;
public Rectangle(int x, int y, double w, double h)
{
super(x, y);
width = w;
height = h;
}
}public class Circle extends Point
{
double radius;
public Circle(int x, int y, double r)
{
super(x, y);
radius = r;
}
}public class Square extends Point
{
double edge;
public Square(int x, int y, double e)
{
edge = e;
}
}
الآن نود أن نضع هذه الفئات مع بعضها البعض في حزمة لعدة أسباب:
- نستطيع نحن و المبرمجين الآخرين أن نجد هذه الفئات لأنها مترابطة.
- نستطيع نحن و المبرمجين الآخرين أن نعرف كيف نجد هذه الفئات لأنها دوال رسم مترابطة.
- اسماء الفئات السابقة لن تتعارض مع اسماء الفئات من الحزم الاخرى لأنها سوف تكون تحت حزمة جديدة من انشائك، مثال على ذلك:
package geometry; public class Point {
int_x coord;
int_y coord;
public Point() {
x_coord = 0;
y_coord = 0;
}
public Point(int x, int y) {
x_coord = x;
y_coord = y;
}
}
package geometry; public class Rectangle extends Point
{
double width;
double height;
public Rectangle(int x, int y, double w, double h)
{
super(x, y);
width = w;
height = h;
}
}
package geometry; public class Circle extends Point
{
double radius;
public Circle(int x, int y, double r)
{
super(x, y);
radius = r;
}
}
package geometry; public class Square extends Point
{
double edge;
public Square(int x, int y, double e)
{
edge = e;
}
}
نلاحظ هنا اننا اضفنا السطر
package geometry في كل الفئات ( كل فئة توجد في ملف مستقل ). لكن لو فرضنا اننا نريد استخدام الفئة Rectangle موجودة بالحزمة java.awt مع الفئة الموجود بالحزمة geometry بنفس البرنامج الذي نريد كتابته، فماذا نفعل ؟
استدعاء فئتين بنفس المسمى: نستطيع ذلك باستخدام
fully qualified name و هو كتابة المسار الكامل للفئة، مثال على ذلك:
java.awt.Rectangle rec1 = new java.awt.Rectangle(...); // استخدمنا المسار الكامل للفئة geometry.Rectangle rec2 = new geometry.Rectangle(...); // و هنا ايضاً
كيفية استدعاء فئة معينة من الحزمة الخاصة بها: تستطيع استدعاء الفئات من الحزم عن طريق ثلاث طرق:
- استدعائها عن طريق كتابة المسار الكامل ( كما المثال السابق ).
- استدعائها فقط عن طريق الحزمة java.awt.Rectangle
- استدعاء الحزمة كاملة بما فيها من فئات اخرى java.awt.*;¹.
¹ النجمة (*) تدل على استدعاء الحزم الفرعية و الفئات الموجودة تحت هذه الحزمة.