Menu
Coddy logo textTech

שימוש במספר מיקסינים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 52 מתוך 110.

בדיוק כפי שאפשר לממש כמה ממשקים, אפשר גם להחיל כמה mixins על מחלקה אחת. פשוט יש לרשום אותם אחרי מילת המפתח with, כשהם מופרדים בפסיקים.

mixin Swimming {
  void swim() => print('Swimming');
}

mixin Flying {
  void fly() => print('Flying');
}

mixin Walking {
  void walk() => print('Walking');
}

class Duck with Swimming, Flying, Walking {
  void quack() => print('Quack!');
}

void main() {
  var duck = Duck();
  duck.swim();   // מתוך המיקסין Swimming
  duck.fly();    // מתוך המיקסין Flying
  duck.walk();   // מתוך המיקסין Walking
  duck.quack();  // מתוך המחלקה Duck
}

סדר המיקסינים חשוב כשיש להם מתודות עם אותו שם. המיקסין האחרון ברשימה הוא שקובע:

mixin A {
  void greet() => print('Hello from A');
}

mixin B {
  void greet() => print('Hello from B');
}

class MyClass with A, B {}

void main() {
  MyClass().greet();  // פלט: Hello from B
}

מכיוון ש־B מופיע אחרי A, המתודה greet() שלו מקבלת קדימות. התנהגות השכבות הזו מאפשרת לך להרכיב מחלקות עם היכולות המדויקות הדרושות לך, ולשלב פונקציונליות ממקורות שונים ללא היררכיות ירושה מורכבות.

challenge icon

אתגר

קל

בואו נבנה מערכת של מכשירי בית חכם שמשלבת יכולות רבות באמצעות mixins. תיצרו mixins שונים שמייצגים מגוון תכונות חכמות, ואז תבנו מכשיר שמשתמש בכולם יחד.

תארגנו את הקוד בשני קבצים:

  • smart_features.dart: הגדירו שלושה mixins שמספקים יכולות שונות לבית חכם:
    • mixin בשם VoiceControl עם מתודה voiceCommand(String command) שמדפיסה Voice: [command]
    • mixin בשם WiFiEnabled עם מתודה connectWiFi(String network) שמדפיסה Connected to [network]
    • mixin בשם PowerSaver עם מתודה enterSleepMode() שמדפיסה Entering sleep mode... ומתודה wakeUp() שמדפיסה Waking up!
    לאחר מכן צרו מחלקה בשם SmartSpeaker שמשתמשת בכל שלושת ה-mixins. הוסיפו מאפיין String name עם בנאי, וכללו מתודה playMusic(String song) שמדפיסה [name] playing: [song]
  • main.dart: ייבאו את קובץ התכונות החכמות והדגימו כיצד הרמקול משלב את כל היכולות:
    • צרו SmartSpeaker בשם 'Echo'
    • קראו ל-connectWiFi('HomeNetwork')
    • קראו ל-voiceCommand('Play jazz')
    • קראו ל-playMusic('Smooth Jazz Mix')
    • קראו ל-enterSleepMode()
    • קראו ל-wakeUp()

המחלקה SmartSpeaker מקבלת מתודות מכל שלושת ה-mixins באמצעות סעיף with יחיד, וכך מדגימה כיצד mixins מרובים מאפשרים לכם לשלב בדיוק את היכולות הדרושות לכם, ללא ירושה מורכבת.

הפלט הצפוי:

Connected to HomeNetwork
Voice: Play jazz
Echo playing: Smooth Jazz Mix
Entering sleep mode...
Waking up!

נסו בעצמכם

import 'smart_features.dart';

void main() {
  // TODO: צור SmartSpeaker בשם 'Echo'
  
  // TODO: קרא ל־connectWiFi('HomeNetwork')
  
  // TODO: קרא ל־voiceCommand('Play jazz')
  
  // TODO: קרא ל־playMusic('Smooth Jazz Mix')
  
  // TODO: קרא ל־enterSleepMode()
  
  // TODO: קרא ל־wakeUp()
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Dart אונליין