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

تنفيذ الواجهات (Interfaces)

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

لاستخدام واجهة، يجب على class تنفيذها باستخدام الكلمة المفتاحية implements. ثم توفّر class تطبيقات ملموسة لجميع method المعلنة في الواجهة:

public interface Drawable {
    void draw();
}

public class Circle implements Drawable {
    private double radius;
    
    public Circle(double radius) {
        this.radius = radius;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing a circle with radius " + radius);
    }
}

إذا كان class ينفّذ interface لكنه لا يوفّر تطبيقات لجميع method الخاصة به، فسيُصدر المصرّف خطأً. التعليق التوضيحي @Override اختياري، لكنه موصى به لأنه يساعد على اكتشاف الأخطاء.

تمامًا كما هو الحال مع الفئات المجرّدة، يمكنك استخدام interface كنوع مرجعي. يتيح ذلك تعدد الأشكال، حيث يمكن التعامل مع الفئات المختلفة التي تطبّق interface نفسه بطريقة موحّدة:

Drawable shape1 = new Circle(5.0);
Drawable shape2 = new Rectangle(4.0, 3.0);

shape1.draw();  // رسم دائرة بنصف قطر 5.0
shape2.draw();  // رسم مستطيل 4.0 x 3.0

هذا أمر قوي لأن الشيفرة التي تعمل مع مراجع Drawable لا تحتاج إلى معرفة نوع الفئة المحدد. كل ما يهمها هو أن الكائن يمكن رسمه.

في الدرس التالي، سترى كيف يمكن لفئة واحدة أن تنفذ عدة واجهات في الوقت نفسه.

challenge icon

التحدي

سهل

لنبنِ نظامًا للمتحدثين يوضّح كيفية تنفيذ الفئات للواجهات. ستنشئ واجهة تحدد ما يمكن لأي متحدث القيام به، ثم ستبني نوعين مختلفين من المتحدثين، يطبّق كلٌّ منهما هذا العقد بطريقته الخاصة.

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

  • Speaker.java: عرّف واجهة باسم Speaker تصرّح بما يجب أن يتمكن أي متحدث من فعله. يجب أن يمتلك كل متحدث طريقة speak() تُرجع قيمة من النوع String. هذا هو العقد الذي يجب على جميع الفئات المنفِّذة استيفاؤه.
  • Human.java: أنشئ فئة تنفّذ الواجهة Speaker. لدى Human حقل name من النوع String. أضف constructor لتهيئة الاسم، ونفّذ طريقة speak() لإرجاع: [name] says: Hello everyone!
  • Robot.java: أنشئ فئة أخرى تنفّذ الواجهة Speaker. لدى Robot حقل model من النوع String. أضف constructor لتهيئة الطراز، ونفّذ طريقة speak() لإرجاع: Robot [model] says: Beep boop!
  • Main.java: اجمع كل شيء باستخدام تعدد الأشكال القائم على الواجهة. ستتلقى مدخلين: اسم إنسان وطراز روبوت. أنشئ Human وRobot، ثم خزّنهما في array من مراجع Speaker. نفّذ Loop عبر array واطبع result استدعاء speak() لكل متحدث.

ستتلقى مدخلين: اسم الإنسان (String) وطراز الروبوت (String).

يجب أن يعرض ناتجك سطرين: سطرًا لكل متحدث. لاحظ كيف يمكن التعامل مع كلٍّ من Human وRobot بطريقة موحّدة من خلال واجهة Speaker، رغم أنهما يتحدثان بطرق مختلفة تمامًا!

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // قراءة المدخلات
        String humanName = scanner.nextLine();
        String robotModel = scanner.nextLine();
        
        // TODO: إنشاء كائن Human بالاسم المعطى
        
        // TODO: إنشاء كائن Robot بالطراز المعطى
        
        // TODO: إنشاء مصفوفة من مراجع Speaker تحتوي على كلا الكائنين
        
        // TODO: التكرار عبر المصفوفة وطباعة نتيجة speak() لكل متحدث
    }
}
quiz iconاختبر نفسك

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

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

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