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

تنفيذ واجهات متعددة

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

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

لتنفيذ واجهات متعددة، اذكرها بعد الكلمة المفتاحية implements، وافصل بينها بفواصل:

public interface Drawable {
    void draw();
}

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

public class Rectangle implements Drawable, Resizable {
    private int width, height;
    
    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing rectangle " + width + "x" + height);
    }
    
    @Override
    public void resize(int width, int height) {
        this.width = width;
        this.height = height;
    }
}

يجب على class أن implement all methods من كل interface تعلنها. يمكنك أيضًا الجمع بين الوراثة وinterfaces متعددة:

public class Square extends Shape implements Drawable, Resizable {
    // يجب تنفيذ الدوال من كلا الواجهتين
    // يمكن أيضاً استخدام الأعضاء الموروثة من Shape
}

تتيح لك هذه المرونة تصميم فئات تؤدي أدوارًا متعددة. يمكن لـ SmartPhone أن يطبّق واجهات Callable وMessageable وBrowsable، حيث تحدد كل واجهة قدرات مختلفة يدعمها الهاتف.

challenge icon

التحدي

سهل

لنبنِ نظامًا لأجهزة ذكية يمكن أن تتمتع فيه الأجهزة بقدرات متعددة. ستنشئ SmartTV يمكن تشغيله وإيقاف تشغيله والتحكم في مستوى صوته: مما يوضح كيف يمكن لفئة واحدة تنفيذ واجهات Powerable وVolumeControl متعددة للوفاء بأدوار مختلفة.

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

  • Powerable.java: عرّف واجهة للأجهزة التي يمكن تشغيلها. يجب أن تعلن عن طريقتين: powerOn() وpowerOff()، وكلتاهما تعيدان void.
  • VolumeControl.java: عرّف واجهة للأجهزة التي تتضمن تحكمًا في مستوى الصوت. يجب أن تعلن عن طريقة setVolume(int level) التي تعيد void، وطريقة getVolume() التي تعيد قيمة int.
  • SmartTV.java: أنشئ فئة تنفذ واجهتي Powerable وVolumeControl. يجب أن تحتوي SmartTV على حقل brand (String)، وحقل isOn (boolean، قيمته initially هي false)، وحقل volume (int، قيمته initially هي 0). أدرج constructor يستقبل اسم brand. نفّذ جميع methods المطلوبة:
    • يجب أن تضبط powerOn() قيمة isOn إلى true وتطبع: [brand] TV is now ON
    • يجب أن تضبط powerOff() قيمة isOn إلى false وتطبع: [brand] TV is now OFF
    • يجب أن تحدّث setVolume(int level) مستوى الصوت وتطبع: [brand] TV volume set to [level]
    • يجب أن تعيد getVolume() مستوى الصوت current
  • Main.java: اجمع كل شيء معًا لإظهار تنفيذ واجهات متعددة. ستتلقى مدخلين: اسم brand (String) ومستوى الصوت (int). أنشئ SmartTV باستخدام brand المعطى، ثم:
    • استدعِ powerOn()
    • استدعِ setVolume() باستخدام المستوى المعطى
    • اطبع: Current volume: [volume] باستخدام getVolume()
    • استدعِ powerOff()

ستتلقى مدخلين: brand التلفاز (String) ومستوى الصوت (int).

يجب أن يعرض الناتج أربعة أسطر توضّح كيف تفي SmartTV بعقدي الواجهتين. يمكن تشغيلها مثل أي جهاز Powerable والتحكم في مستوى صوتها مثل أي جهاز VolumeControl!

جرّب بنفسك

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // قراءة المدخلات
        String brand = scanner.nextLine();
        int volumeLevel = scanner.nextInt();
        
        // TODO: إنشاء SmartTV بالعلامة التجارية المعطاة
        
        // TODO: استدعاء powerOn()
        
        // TODO: استدعاء setVolume() بالمستوى المعطى
        
        // TODO: Print: Current volume: [volume] using getVolume()
        
        // TODO: استدعاء powerOff()
        
    }
}
quiz iconاختبر نفسك

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

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

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