ממשקים בשפת ג'אווה

5

-פרסומת-

מחלקות מסוג ממשק

-פרסומת-

ממשק (Interface) בתכנות מונחה עצמים (OOP) הוא מחלקה אשר כל המתודות בה לא ממומשות, כלומר אלו מתודות בעלות גוף ריק. למשל:

public interface Moveable (){

                public void run();

                public void move();

                public void stop();

}

משתמשים במחלקה מסוג זה על מנת שמחלקות יממשו אותה, כלומר יממשו את כל המתודות שבה (כל המתודות בה לא ממומשות, רק מוגדרות).

public class Animal implements Moveable(){

            public void run() {System.out.println("is running");}

-פרסומת-

            public void move() {System.out.println("is moving");}

            public void move() {System.out.println("stopped");}

};

השימוש בממשקים עוזר למתכנתים "להיזכר" אילו פונקציות לממש במחלקות המממשות ממשקים מסויימים (לא ניתן לקמפל את הקוד ללא מימוש כל המתודות של הממשק).

הערות:

 לא ניתן ליצור אובייקט מטיפוס ממשק (כמו שלא ניתן לבנות אובייקט ממחלקה מופשטת), אך ניתן להשתמש בו ליצירת הפניות (רפרנס) לאובייקטים אלה שמממשים אותו!

מחלקה יכולה לממש מספר ממשקים, על מחלקה זו לממש את כל המתודות של הממשקים שהיא מממשת (implements).

ממשק יכול לרשת ממשק והחוקים יהיו כמו בירושה ובפולימורפיזם (רב-צורתיות) בין מחלקות "רגילות"!

בשפת C, קיים שימוש בקבצי  (.h files) header שהם קבצים המכילים, בין השאר, אב טיפוס (prototype) של הפונקציות הקיימות בקובץ C. הדבר דומה לממשק בג'אווה (או בתכנות מונחה עצמים) אך לא מהווה הקבלה שהיא!

ממשק הוא מקרה פרטי של מחלקה אבסטרקטית- מחלקה מופשטת (Abstract Class) אך בניגוד למחלקה מופשטת (שאינה ממשק), כל המתודות בו לא ממומשות! בעת מימוש ממשק יש לממש את כל סט הפונקציות שלו!

-פרסומת-

עשוי לעניין אותך
  1. שי הגיב

    יפה יוסקה היה נחמד לקרוא! 🙂

  2. שגיב הגיב

    יפה יוסי תמשיך ככה! =]

  3. אלה הגיב

    יוסי מה היינו עושים בלעדיך..?! עכשיו לפחות אני יודעת מה זה ממשק!!

  4. אור הגיב

    לא הבנתי מה הרעיון בממשק?
    מה המטרה שלו?

    1. יוסי לישה הגיב

      שלום אור,
      המטרה של ממשק היא להוות "הבטחה" לקיומן של מתודות אצל המחלקות הממשות אותו, שכן ברגע שמחלקה מממשת ממשק, המפתח מחויב לממש את כל פונקציות הממשק בתוך המחלקה המממשת. כל מחלקה והמימוש הייחודי שלה על סמך הפונקציונליות הנדרשת ממנה. באופן זה ממשק יוצר הבחנה ברורה בין המתודה והמימוש שלה – המפתח יודע אילו מתודות יש למחלקה המממשת, ללא התייחסות בכלל לצורת המימוש.
      לא פחות מזה, מחלקה יכולה לממש מכמה ממשקים ולהרחיב את כמות המתודות והטיפוסים שהיא כוללת ומהווה, ובכך ניתן מענה לעובדה שב-Java ובשפות מונחות עצמים נוספות לא ניתן לרשת מכמה מחלקות.

הגב

לא נפרסם את האימייל שלך.

רק לוודא זריז שאתה אנושי *