|
حزم الجافا
(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.*;¹.
¹ النجمة (*) تدل على
استدعاء الحزم الفرعية و الفئات الموجودة تحت هذه الحزمة.
ا.هـ.
|