Menu
Coddy logo textTech

מימוש ממשקים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 35 מתוך 87.

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

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);
    }
}

אם מחלקה מממשת ממשק אך אינה מספקת מימושים לכל המתודות שלו, המהדר יציג שגיאה. ההערה @Override היא אופציונלית, אך מומלצת כי היא עוזרת לזהות טעויות.

בדומה למחלקות מופשטות, אפשר להשתמש בממשק כסוג ייחוס. כך מתאפשר פולימורפיזם שבו אפשר להתייחס באופן אחיד למחלקות שונות שמממשות את אותו ממשק:

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). הוסיפו בנאי לאתחול השם, וממשו את המתודה speak() כך שתחזיר: [name] says: Hello everyone!
  • Robot.java: צרו מחלקה נוספת שמממשת את הממשק Speaker. למחלקת Robot יש שדה model (String). הוסיפו בנאי לאתחול הדגם, וממשו את המתודה speak() כך שתחזיר: Robot [model] says: Beep boop!
  • Main.java: חברו את כל החלקים יחד באמצעות פולימורפיזם המבוסס על ממשקים. תקבלו שתי קלטים: שם של אדם ודגם של רובוט. צרו Human ו-Robot, ואז אחסנו אותם במערך של הפניות מסוג Speaker. עברו בלולאה על המערך והדפיסו את התוצאה של קריאה ל-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 אונליין