Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مقدمة في الواجهات (Interfaces)

جزء من قسم البرمجة كائنية التوجه في رحلة Java على Coddy. الدرس 34 من 87.

لقد رأيت كيف تُعرِّف الفئات abstract العقود التي يجب أن تتبعها الفئات الفرعية. ولكن ماذا لو أردتَ من فئة أن تتبع عقودًا متعددة؟ لا تسمح Java لفئة بأن ترث من فئات متعددة، لكنها تحل هذه المشكلة باستخدام interfaces.

interface هي عقد يحدد ما يمكن لـ class القيام به، من دون تحديد كيفية قيامه بذلك. بخلاف الفئات abstract، تحتوي interface فقط على تواقيع method (افتراضيًا) من دون تنفيذ:

public interface Drawable {
    void draw();
}

public interface Resizable {
    void resize(int width, int height);
}

فكّر في interface على أنها وعد. عندما تنفّذ class واجهةً، فإنها تعد بتوفير تطبيقات لجميع methods المُعلنة في تلك الواجهة. تحدد الواجهة القدرة، بينما توفّر class السلوك.

يتم تعريف interfaces باستخدام الكلمة المفتاحية interface بدلًا من class. جميع methods في interface تكون ضمنيًا public وabstract، لذلك لا تحتاج إلى كتابة هذه الكلمات المفتاحية:

public interface Playable {
    void play();    // public abstract ضمنياً
    void pause();
    void stop();
}

يمكن لـ interfaces أيضًا أن تقوم بـ declare constants، والتي تكون implicitly public static final:

public interface GameConstants {
    int MAX_PLAYERS = 4;  // ضمناً public static final
}

في الدرس التالي، ستتعلّم كيف تنفّذ الفئات الواجهات باستخدام الكلمة المفتاحية implements.

challenge icon

التحدي

سهل

لنبنِ نظامًا للتحكم في الأجهزة من خلال تعريف interfaces تصف ما يمكن للأجهزة المختلفة القيام به. يركّز هذا التحدي على إنشاء interfaces: وهي العقود التي تحدد الإمكانات دون تحديد كيفية عملها.

ستنظّم شفرتك عبر ثلاثة ملفات:

  • Switchable.java: أنشئ interface يعرّف معنى أن يكون الجهاز قابلًا للتبديل. يجب أن يتمكن أي جهاز قابل للتبديل من التشغيل والإيقاف. Declare اثنين من methods: turnOn() وturnOff(). Remember، methods الخاصة بـ interface تكون ضمنيًا public وabstract، لذلك تحتاج فقط إلى تواقيع methods.
  • Adjustable.java: أنشئ interface آخر يعرّف معنى أن يكون الجهاز قابلًا للضبط. يجب أن يتمكن الجهاز القابل للضبط من تعيين مستواه. Declare method باسم setLevel(int level). أدرج أيضًا constant باسم MAX_LEVEL بقيمة 100: Remember أن constants في interfaces تكون ضمنيًا public static final.
  • Main.java: اعرض أن interfaces الخاصة بك معرّفة بشكل صحيح من خلال طباعة information عنها. ستتلقى input واحدًا: قيمة level من النوع (int). اطبع الأسطر الثلاثة التالية:
    • Switchable methods: turnOn, turnOff
    • Adjustable methods: setLevel
    • Max level constant: [MAX_LEVEL value] (يمكنك الوصول إلى constant من interface ‏Adjustable)
    ثم اطبع: Setting level to: [input level]

ستتلقى input واحدًا: قيمة level من النوع (int).

يركّز هذا التحدي حصريًا على تعريف interfaces: وهي المخططات التي تصف الإمكانات. في الدرس التالي، ستتعلّم كيف تطبّق الفئات هذه interfaces فعليًا لتوفير السلوك الحقيقي!

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int level = scanner.nextInt();
        
        // TODO: اطبع معلومات حول الواجهات
        // Print: "Switchable methods: turnOn, turnOff"
        // Print: "Adjustable methods: setLevel"
        // Print: "Max level constant: " followed by Adjustable.MAX_LEVEL
        // Print: "Setting level to: " followed by the input level
        
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Java عبر الإنترنت