Presentation is loading. Please wait.

Presentation is loading. Please wait.

ממשקים - interfaces איך לאפשר "הורשה מרובה".

Similar presentations


Presentation on theme: "ממשקים - interfaces איך לאפשר "הורשה מרובה"."— Presentation transcript:

1 ממשקים - interfaces איך לאפשר "הורשה מרובה"

2 בעיה אנחנו מעונינים להגדיר את המחלקות הבאות במסגרת האוניברסיטה: אנשים
מתרגל מרצה סטודנט

3 איך נתייחס למתרגל? מצד אחד המתרגל הוא מרצה כי הוא מלמד חומר באוניברסיטה מצד שני הוא סטודנט כי הוא לומד באוניברסיטה אז למעשה הוא צריך לרשת גם ממרצים וגם מסטודנטים. איך ניתן לפתור את הבעיה? /Java C#אינם מאפשרים הורשה מרובה ולכן יש למצוא פתרון שמאפשר קשר בין המחלקה של מתרגל לבין המחלקות סטודנט ומרצה

4 interface מאחר וניתן לרשת רק ממחלקה אחת, יש להגדיר משהו שיאפשר קשר בין המחלקות השונות. Interface מגדיר רשימת שיטות שחייבים להיות קיימים במחלקה המחליטה לרשת מה-interface. הוא בעצם הגדרת מחלקה אבסטרקטי טהור – כלומר הגדרת פעולות שאין עבור אף פעולה מימוש! נגדיר שעבור מרצה אנחנו חייבים להגדיר כמה שעות מלמד ואיזה מקצוע הוא מלמד ולכן נגדיר את הפעולות הבאות: public void setTeachingHours ( int hours); public int getTeachingHours( ); public String getTeachingSubject ( ); public void setTeachingSubject(String subject);

5 תחביר ה-interface interface Teach{ void setTeachingHours ( int hours);
int getTeachingHours( ); string getTeachingSubject ( ); void setTeachingSubject(string subject); } כעת נחבר בין מחלקת מתרגל לבין ממשק Teach C# class Instructor :Student,Teach{ //אבל קבעתי חוזה עם הממשק ויש חובה לממש את כל השיטות private int teachingHours; private string subject; public Instructor (string name, int id, string dept, int year, string subject) : base (name,id,dept,year){ this.subject = subject; public void setTeachingHours(int hours) {this.teachingHours = hours;} public int getTeachingHours ( ) {return teachingHours; } public string getTeachingSubject ( ) { return subject;} public void setTeachingSubject (string subject) { this.subject = subject;}

6 ג'אוה תחביר ה-interface
interface Teach{ public void setTeachingHours ( int hours); public int getTeachingHours( ); public String getTeachingSubject ( ); public void setTeachingSubject(String subject); } כעת נחבר בין מחלקת מתרגל לבין ממשק Teach class Instructor extends Student implements Teach{ / // יש כאן הורשה מרובה – מצד אחד אני מקושר עם המחלקה //ומצד שני גם מקושר למרצהPerson //אבל קבעתי חוזה עם הממשק ויש חובה לממש את כל השיטות private int teachingHours; private String subject; public Instructor (String name, int id, String dept, int year, String subject){ super (name,id,dept,year); this.subject = subject; public void setTeachingHours(int hours) {this.teachingHours = hours;} public int getTeachingHours ( ) {return teachingHours; } public String getTeachingSubject ( ) { return subject;} public void setTeachingSubject (String subject) { this.subject = subject;}

7 מה ניתן להגדיר בממשק ניתן להגדיר:
כותרת שיטות: כל שיטה המופיע בתוך הממשק, חייבים להיות ממומשים בתוך המחלקה הגדרת קבועים סטאטים (רק java) מה אין במימשק אין מאפיינים אין מימוש של שיטות הממשק מאפשר לייצור חוזה מחייב שבו מי שיורש ממשק חייב לממש את הפעולות ואם לא – הבעיה אינה בעיה לוגית אלא הופכת להיות בעיה תחבירית.

8 שימושים בממשק לא ניתן לייצור אובייקט מסוג מימשק אבל מותר לשמור אובייקט בתוך ממשק. לדוגמא: Person p = new Person (“Jack”,1); Person p1 = new Student (“Tom”,2,”Comp”, 2005); Person p2 = new Lecturer (“Sam”,3, “databases”,4); Person p3 = new Instructor (“Ruth”,4,”Comp”, 2003,”programming”,2); Teach[] teacher = {p2,p3}; דבר זה מתאפשר בגלל שהם שייכים לאותה "קבוצה" המכילה את הפעולות הקשורות למורה" הפעולות האפשריות לביצוע על ידי teacher הם כל פעולות הממשק בלבד

9 דוגמא נוספת אנחנו מעונים לבנות מחלקה המאפשרת מיון אובייקטים. סוגי האובייקטים שיכולים להיות בתוך המערך הוא מגוון. זה יכול להיות – שבר כאשר יהיה ממויין לפי הערך המספרי זה יכול להיות – סטודנטים כאשר המיון יהיה לפי הציונים זה יכול להיות – מטבעות כאשר המיון יהיה ערך שלהם מול הדולר מה משותף לכולם? האיברים במערך הם איברים שניתן למיין אותם

10 מציאת המשותף ניתנים למיון 1/5

11 תרגיל הגדר מחלקות – fraction, Comparable, SortArray

12 הורשה בממשקים גם בממשקים יש אפשרות שממשק יירש ממשק אחר.
ממשק שיורש ממשק אחר – כלומר הוא כולל גם את החתימות של הממשק הראשון וגם את הממשקים של הממשק האחר. לדוגמא: interface ISmartTeach extends Teach{ // interface ISmartTeach : Teach public void setIQ (int iq); public int getIQ ( ); }

13 הורשת ממשקים פירוש הדבר הוא class Professor implements ISmartTeach
// class Professor:ISmartTeach {…} המחלקה מממשת את כל הפעולות של Teach ועוד הפעולות החדשות שנוספו


Download ppt "ממשקים - interfaces איך לאפשר "הורשה מרובה"."

Similar presentations


Ads by Google