recent
أخبار ساخنة

التجريد والإنترفيس في لغة جافا Java الدرس|22|

الصفحة الرئيسية
الإنترفيس في الجافا

الكلاسات المجردة abstract جافا

التجريد abstraction عندما نقوم بتعريف كلاس مجرد abstract هذا يعني أن هذا الكلاس مخصص فقط للإعلان أو التصريح عن الدوال و المتغيرات فقط و لا نستطيع بناء كود داخل الكلاس المجرد abstract.

هذا هو تعريفه بإختصار و يتم الإعلان عنه بإستخدام الكلمة abstract ثم اسم الكلاس.

حتى الدوال و المتغيرات الذي تكون داخل الكلاس المجرد abstract يجب أن تسبقها كلمة abstract لتعريفه أنه مجرد.

الشكل العام لكتابة abstract في جافا

package ****;
abstract class هنا نكتب اسم الكلاس
{
    abstract void names();  names هو اسم الدالة
}
public class ****{

إذا قمت بتعريف الكلاس على أنه مجرد abstract فهذا الأمر يعني أن الكلاس لا يمكن إنشاء كائنات منه.

مثال 1

package cara;
abstract class car
{
    abstract void names()
    {
        System.out.println("sajo");
    }
}
public class CarA{
     public static void main(String []args){
        System.out.println("Hello World");
     }
}

نلاحظ في هذا المثال أننا أنشانا كلاس مجرد بإسم car و كان بداخله دالة ايضاً سبقتها الكلمة abstract التي تعرفّها أنها مجرد.

و عندما فتحنا القوسين اسفلها لنُعطي أمر طباعة سوف يعطينا خطأ سيظهر سطر لونه أحمر اسفل الدالة لأن من الشروط لا يمكن إنشاء كود بداخله و مخصص فقط للتصريح عن الدوال.


الهدف من إستخدام التجريد abstract في جافا

الهدف هو لتنفيذ نمط معّين بشكل إجباري يعني مثال لدينا دوال مهمة إثنان, ثلاث, أربع و نريد تنفيذها في كل كلاس أو في اكثر من كلاس و نريد تنفيذها بشكل إجباري حتى لا ننساها.

ستواجهنا مشكلة النسيان مثلاً قُمنا ببناء الكلاس و نسينا تنفيذ دالة مهمة يجب تنفيذها و لتفادي النسيان نقوم ببناء كلاس مجرد ثم نقوم بالتصريح عن هذه الدوال المهمة.

و بعد ذلك عند إنشاء الكلاس نجعله يرث من الكلاس المجرد لكي يتم إجباره إلزامياً بتنفيذ كافة الدوال المعرّفة داخل الكلاس.


مثال 2

package cara;
abstract class car
{
    abstract void color();
    abstract void speed();
}
class carB extends car
{
    void color()
    {
        System.out.println("bink");
    }
    void speed()
    {
        System.out.println("90k");
    }
}
public class CarA{
     public static void main(String []args){
        System.out.println("Hello World");
     }
}

أنشأنا كلاس مجرد إسمه car و به دالتين نوع void و هما اللون color و السرعة speed.

ثم أورثنا كلاس إسمه carB من الكلاس الأب وورث الدوال اللون و السرعة ثم طبعهم عبر امر الطباعة المعروف System.out.println و هنا إستطعنا الإعلان عن الدوال الذي في الكلاس الأب.


التجريد Abstraction هو أسلوب يتم إستخدامه من أجل إخفاء تفاصيل تنفيذ البرنامج

الإنترفيس Interface في الجافا

الإنترفيس interfaces يسمى في اللغة العربية الواجهة Interface و هو شبيه من حيث البنية بالكلاس و يحتوي دوال مجردة من نوع abstract.

و ذكرنا أن كلمة مجرد abstract تعني أن الدالة أو الكلاس الذي نوعه مجرد abstract أنه لا يحتوي كود فيستخدم للتصريح فقط.

والإنترفيس Interface هو شبيه بالكلاس المجرد أي أنه يحتوي على دوال مجردة من نوع abstract و لا يمكن أن تقبل بناء كود بداخلها.

ويطلق على Interface في بعض المراجع مصطلح نمط أي أن الكلاس الذي سيعرّف من Interface مُلزَم. بتنفيذ كافة الدوال الموجودة داخل Interface.

و هو شبيه بالكلاس abstract سوى أن الفرق بينه و بين Interface أنه يقبل الوراثة المتعددة.


الفرق بين Interface و abstract في جافا

  1. يمكن أن يحتوي الكلاس من نوع abstract على دوال مجردة و غير مجردة بينما الكلاس من نوع Interface يحتوي على دوال مجردة فقط يعني مسبوقة بكلمة abstract.
  2. الكلاس من نوع abstract لا يدعم الوراثة المتعددة كما هو الحال في بقية الكلاسات بينما Interface يدعم الوراثة المتعددة.
  3. الكلاس من نوع abstract يمكن أن يحتوي على متغيرات ثابتة و متغيرة بينما Interface يحتوي على متغيرات ثابتة فقط.
  4. الكلمة المحجوزة abstract تُستخدَم للكلاس و الدوال بينما كلمة Interface تستخدم للواجهة فقط.

 

ماذا يحتوي الـ Interface في الجافا؟

يحتوي الإنترفيس على دوال مجردة فقط, و يجب على الكلاس الوارث أن يقوم بتنفيذ كافة الدوال الموجودة في Interface.

و هذا يجعلنا نفهم أن الإنترفيس Interface يتحكم بمسار البرنامج لذلك يُطلق عليه في بعض المراجع مصطلح نمط او المسار المرسوم. بحيث أنه يقيّد البرنامج بمسار مُعيَّن وهو أن كل الكلاسات الوارثة من Interface تقوم بتنفيذ كافة الدوال في Interface والمتغيرات الثابتة.


طريقة وراثة الكلاس من Interface جافا

تعلمنا في الدروس السابقة أن الكلاس عندما يُريد أن يَرِث من كلاس آخر يُستخدَم الكلمة extends و لكن. عندما يريد كلاس أن يَرِث من Interface فإننا نَستخدِم الكلمة المحجوزة implements.

الشكل العام لوراثة كلاس من Interface جافا

class A implements P

يعني لدينا كلاس إسمه A و ورث Interface بواسطة الكلمة implements.


مثال 3

package c1;
interface A1
{
    void print();
}
public class C1 implements A1{
    public void print()
    {
        System.out.println("welcome course java")
    }
     public static void main(String []args){
        C1 c=new C1();
        c.print();
     }
}

أنشأنا Interface بإسم A1 و به دالة إسمها print و أورثنا كلاس إسمه C1 من الـ Interface الذي إسمه A1.

وإستدعينا الدالة الموجودة بداخله ووضعنا لها كود طباعة جملة welcome course java.

ودخلنا للبرنامج الرئيسي و أنشأنا كائن من الكلاس C1 و إستدعينا الدالة print عن طريق الكائن c.


الفرق بين extends و implements في جافا

  • كلمة extends تعني وراثة ونقوم بإستخدامها لجعل الكلاس يرث من كلاس أو من أجل جعل إنترفيس يرث من interface أو أكثر.
  • كلمة implements تعني التنفيذ نقوم بإستخدامها لأجل جعل كلاس ينفذ interface أو أكثر.


متغيرات من نوع إنترفيس Interface تعتبر معرّفة كـ public final static حتى لو لم نقم بتعريفها كذلك

google-playkhamsatmostaqltradent