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

الواجهات المتعددة

جزء من قسم Object Oriented Programming في رحلة Dart على Coddy — الدرس 48 من 110.

تعد إحدى أكبر مزايا الواجهات (interfaces) مقارنة بالوراثة (inheritance) هي أن الفئة (class) يمكنها تنفيذ واجهات متعددة. فبينما تقيدك Dart بتوسيع فئة واحدة فقط، يمكنك تنفيذ أي عدد تحتاجه من الواجهات.

abstract class Printable {
  void printContent();
}

abstract class Saveable {
  void save();
}

abstract class Shareable {
  void share(String recipient);
}

class Document implements Printable, Saveable, Shareable {
  String content;
  
  Document(this.content);
  
  @override
  void printContent() {
    print('Printing: $content');
  }
  
  @override
  void save() {
    print('Saving document...');
  }
  
  @override
  void share(String recipient) {
    print('Sharing with $recipient');
  }
}

عند تنفيذ واجهات متعددة، يجب عليك تقديم تنفيذات لجميع الأساليب من كل واجهة. يجب أن يفي الصنف بجميع العقود التي يعد بدعمها.

يمكنك أيضاً دمج extends مع عدة implements:

class Report extends Document implements Printable, Shareable {
  Report(String content) : super(content);
  
  // لا يزال يتعين تنفيذ جميع أساليب الواجهة
  // (موروثة بالفعل من Document في هذه الحالة)
}

تتيح لك هذه المرونة تصميم فئات تناسب أدواراً متعددة. يمكن لـ SmartPhone تنفيذ واجهات Camera و Phone و MusicPlayer، مما يضمن قدرته على القيام بكل ما تتطلبه كل واجهة مع الحفاظ على تنفيذه الفريد الخاص.

challenge icon

التحدي

سهل

لنقم ببناء نظام أجهزة ذكية يوضح كيف يمكن لفئة واحدة تنفيذ واجهات متعددة للجمع بين قدرات مختلفة. ستقوم بإنشاء فئات واجهة (interface classes) منفصلة لميزات الأجهزة المختلفة، ثم بناء جهاز يمكنه القيام بكل ذلك.

ستقوم بتنظيم الكود الخاص بك في ملفين:

  • devices.dart: قم بتعريف الواجهات والفئة المنفذة هنا:
    • فئة Connectable مع طريقة connect() تطبع Connecting to network...
    • فئة Chargeable مع طريقة charge() تطبع Charging battery...
    • فئة Displayable مع طريقة showScreen(String content) تطبع Displaying: [content]
    • فئة Tablet تنفذ جميع الواجهات الثلاث: Connectable، و Chargeable، و Displayable. أضف خاصية String brand مع منشئ (constructor). يجب أن تطبع تنفيذاتك [brand] tablet connecting to WiFi لـ connect، و [brand] tablet charging via USB-C لـ charge، و [brand] screen: [content] لـ showScreen
  • main.dart: قم باستيراد ملف الأجهزة الخاص بك ووضح كيف تلبي فئة Tablet جميع عقود الواجهات الثلاثة:
    • أنشئ Tablet بماركة 'Galaxy'
    • استدعِ connect()
    • استدعِ charge()
    • استدعِ showScreen('Welcome Home')

يجب أن توفر فئة Tablet الخاصة بك تنفيذها الخاص لكل طريقة من جميع الواجهات الثلاث. يوضح هذا كيف يسمح تنفيذ واجهات متعددة لفئة واحدة بالوعد بقدرات متعددة مع الحفاظ على كل تنفيذ فريدًا للجهاز.

المخرجات المتوقعة:

Galaxy tablet connecting to WiFi
Galaxy tablet charging via USB-C
Galaxy screen: Welcome Home

جرّب بنفسك

import 'devices.dart';

void main() {
  // TODO: أنشئ Tablet بالعلامة التجارية 'Galaxy'
  
  // TODO: استدعِ connect()
  
  // TODO: استدعِ charge()
  
  // TODO: استدعِ showScreen('Welcome Home')
  
}
quiz iconاختبر نفسك

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

جميع دروس Object Oriented Programming