Presentation is loading. Please wait.

Presentation is loading. Please wait.

יסודות מדעי המחשב – תרגול 6

Similar presentations


Presentation on theme: "יסודות מדעי המחשב – תרגול 6"— Presentation transcript:

1 יסודות מדעי המחשב – תרגול 6
אובייקטים וממשקים

2 מהלך התרגול הרשאות המחלקה Object דריסת פונקציות ממשקים

3 תזכורת מה הבעיה במחלקה הנ"ל?

4 חידוש כיצד נפתור את הבעיה?

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

6 דוגמא ל-getters

7 דוגמא ל-setters לצורך הדוגמא, נחזור למחלקה Letter שלמדנו בשבוע שעבר.
נזכיר את משתני המחלקה: גם כאן נרצה לשמור אותם כמשתנים פרטיים, וניצור להם getters. מה לגבי setters? לאלו נרצה לאפשר שינוי? האם יש לנו מגבלות על תוכן המשתנים?

8 דוגמא ל-setters (המשך)
יש משתנים אותם לא נרצה לאפשר לשנות כלל (כמו תאריך יצירה) יש משתנים אותם לרצה לאפשר לשנות רק בתנאי שהמייל עוד לא נשלח או עוד לא התקבל (כמו למשל – נושא, יעד, גוף המייל) לצורך כך נגדיר עוד שני משתנים במחלקה: כעת נראה כיצד נכתוב את ה-setters:

9 דוגמא ל-setters (המשך)
מה לגבי חתימות הזמן שלנו? ל-Date יש constructor שמאפשר יצירת אובייקט Date שהינו העתק של אובייקט Date קיים. נשתמש בו על מנת להעתיק את חותמת הזמן שנשלחה ולשמור אותה באובייקט שלנו, מבלי לאפשר גישה מבחוץ.

10 מהי Object? עד כה ראינו מחלקות שונות המגדירים אובייקטים שונים, אך בסופו של דבר כל אחת מהן מייצגת אובייקט ב-java. קיימת מחלקה ב-java שמהווה מעין שלד לכל האוביקטים האלה. מחלקת Object. ראינו בשיעור כי כל אובייקט שניצור הוא גם Object. על ידי שימוש במשתנה מסוג Object, ניתן להחזיק כתובת של כל אובייקט שניצור. Object anything; anything = new Book(); anything = “Hello World!”; anything = new Letter(); בצורה זאת ניתן לעבוד עם כל אובייקט גם בלי לדעת מה טיפוסו. מה הבעיה שנוצרת? האם ניתן לבצע anything.addText(“hello”)? מה לגבי anything.toString()?

11 דריסת פונקציות קיימות מספר פונקציות ב-Object שאוטומטית קיימות בכל אובייקט שנתכנן. (equals, toString) מה קורה אם הפונקציות הללו לא מתאימות לאוביקט שלנו? נבצע את מה שכתוב בכותרת השקף. על מנת לדרוס פונקציה, נצטרך לכתוב פונקציה חדשה בתוך המחלקה שלנו שהיא בעלת אותה חתימה ואותו טיפוס מוחזר כמו הפונקציה אותה אנו רוצים לדרוס. ראינו את חתימת toString וכיצד דורסים אותה. מה לגבי equals? public boolean equals(Object arg0) מה בודקת פונקציה זו?

12 דריסת פונקציית equals

13 ממשקים מהו ממשק (Interface)? למה הוא משמש? כיצד ממשים ממשק?
הגדרת התנהגות זהה לקבוצת האובייקטים שיממשו את הממשק. למה הוא משמש? לאפשר כתיבת פונקציות הפועלות באופן דומה על מגוון אובייקטים ללא צורך בכתיבתן מחדש עם שינויים קלים עבור כל אובייקט. כיצד ממשים ממשק? ממשק מגדיר התנהגות (פונקציות) אשר מחייבת את כל מי שממש אותו. דגומא - Comparable מחייב מכל מחלקה להגדיר יחס השוואתי בין אובייקטים. public int compareTo(Object other) הפונקציה תחזיר 0 עבור שוויון, שלילי אם this קטן מ-other וחיובי אם other קטן מ-this.

14 הגדרת ממשק חדש ניתן ליצור ממשק חדש אשר יגדיר התנהגות שתתאים לנו.
מחלקה שתרצה להיות Shelfable תכתב בצורה הבאה: Public <class> implements Shelfable מרגע זה, המחלקה תצטרך להכיל את שתי הפונקציות המוגדרות בממשק

15 מחלקת Shelf הגדרנו ממשק המחייב מחלקות הממשות אותו להגדיר לעצמן משקל ומקום (נפח). כעת, נכתוב מחלקה המנצלת עובדה זו ותוכל להכיל אובייקטים הממשים את Shelfable. המחלקה תייצג מדף ותחזיק בתוכה עצמים שונים. במקום להחזיק מגבלת מקום בצורת תאים במערך, מגבלת המקום תוגדר על ידי מגבלת נפח ומשקל שיש למדף. עבור אובייקטים שנרצה לשמור במדף, נצטרך להתחייב שאנו ממשים בהם את הממשק Shelfable ולממשו.


Download ppt "יסודות מדעי המחשב – תרגול 6"

Similar presentations


Ads by Google