حزم الجافا (Java Packages)

حزم الجافا (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.*;¹.

¹ النجمة (*) تدل على استدعاء الحزم الفرعية و الفئات الموجودة تحت هذه الحزمة.

 

ا.هـ.

 

 

 

 


Copyright © www.kettaneh.net