המצגת נטענת. אנא המתן

המצגת נטענת. אנא המתן

תרגול ממבחנים.

מצגות קשורות


מצגת בנושא: "תרגול ממבחנים."— תמליל מצגת:

1 תרגול ממבחנים

2 עמוד 16 מצגת overloading:
אופססס: הקוד לא יעבור קומפילציה כי A ו B צריכות להיות מוכרזות אבסטרקטיות וכן... foo(int x) של B חסרת תוכן אז נלך עם ג הרע במיעוטו אם נתקן ל foo(int X){} ב A אזי התשובה הנכונה היא א העמסה עמוד 16 מצגת overloading: The merge model (Java) The scope of the child is merged with the scope of the parent The hierarchical model (C++) Scopes are separate. Search is made for first scope containing name, then for best fit within the scope. התשובה היא : א'  זו הייתה הכוונה אבל בפועל יש שגיאת קומפילציה !!!!

3 בזמן ריצה Java מה יודפס? Output: BA
public static class A { void foo(A x){System.out.println("AA");} void foo(B x){System.out.println("AB");} } public static class B extends A { void foo(A x){System.out.println("BA");} void foo(B x){System.out.println("BB");} } public static void main(String[] argv) { A b = new B(); b.foo(b); } מה יודפס? Output: BA

4

5 d.accept(this) Dror +visit (m: morning) Morning +accept(v: Visitor)
Visited accept(v: Visitor) Visitor +visit (m: morning) +visit (n : Noon) +visit (e: evening) Bird +doSomething(d: DayPart) DayPart +accept(v: Visitor) d.accept(this) Orev +visit (m: morning) +visit (n : Noon) +visit (e: evening) Yona +visit (m: morning) +visit (n : Noon) +visit (e: evening) Dror +visit (m: morning) +visit (n : Noon) +visit (e: evening) Morning +accept(v: Visitor) Noon +accept(v: Visitor) Evening +accept(v: Visitor) v.visit(this)

6 Virtual inheritance class Animal {...};
class Cat : public Animal {...}; class Dog : public Animal {...}; class CatDog : public Cat, public Dog {...}; שאלה 11 [7 נקודות] נתון הקוד הבא ב C++ בעיית היהלום – דו משמעות [1 נק'] ציין בעיה שיכולה להיות בקוד ? [1 נק'] איך ניתן לתקן את הבעיה הנ"ל? [1 נק'] האם בעיה כזו יכולה לקרות ב JAVA , הסבר ? [4 נק'] סמלצו את הקוד למעלה ב JAVA באמצעות תרשים מחלקות. Virtual inheritance לא, אין ירושה מרובה ב JAVA public interface ICat {} public interface IDog {} public class Animal {} public class Cat extends Animal implements ICat {} public class Dog extends Animal implements IDog {} public class CatDog extends Animal implements ICat, IDog{} שימו לב שזה לא בדיוק שקול לקוד ב C++, CatDog יורש רק את חתימות הפונקציות של Cat ושל Dog אבל לא את התוכן

7 מתוך מצגת overloading שקף 12: Substitution as Conversion
אלגוריתם של הקומפיילר לבחירת מטודה בהעמסה: מוצא את כל המתודות שיכולות להיות אפשריות לקריאה של הפונקציה, ואם יש מטודה אחת שתואמת בדיוק לטיפוסי הארגומנטים, נשתמש בה. אחרת, מתוך הקבוצה S של כל המתודות האפשריות ננפה את המתודות באופן הבא: במילים: לכל מתודה m1 נבדוק האם קיימת מתודה אחרת m2 כך שכל טיפוסי הפרמטרים של m2 יורשים/זהים בהתאמה את/ל טיפוסי הפרמטרים של m1 אם כן, מנפים את m1 מקבוצת האפשריות במידה ובקבוצה נשארה רק מתודה אחת, נשתמש בה אחרת זו שגיאת קומפילציה של דו- משמעותיות. i=1 𝑛−𝑝𝑎𝑟𝑎𝑚𝑠 𝑝 𝑚2,𝑖 ≼ 𝑝 𝑚1,𝑖 ∀𝑖,∀(𝑚1,𝑚2)∈𝑆 → 𝑒𝑙𝑖𝑚𝑖𝑛𝑎𝑡𝑒 𝑚 1

8

9 No suitable method found for doTask(A, A)
A and B 1 Reference to doTask is ambiguous both methods doTask(A, B) and doTask(B, A) match 2 C and B 3 No suitable method found for doTask(A, A) C and B

10 False False public abstract class Color {
public abstract boolean equalColor(Color c); public boolean checkRedColor(Color c) {return false; } public boolean checkBlueColor(Color c) { return false;} }  public class Red extends Color{  public boolean equalColor(Color c){ return this.equalRedColor(c); public boolean equalRedColor(Color c){ return c.checkRedColor(this); public boolean checkRedColor(Red c){ return true; } }  public class Blue extends Color{  return this.equalBlueColor(c); public boolean equalBlueColor(Color c){ return c.checkBlueColor(this); public boolean checkBlueColor(Blue c) { } } False False

11  public abstract class Color {
public abstract boolean equalColor(Color c); public boolean checkRedColor(Color c) {return false; } public boolean checkBlueColor(Color c) { return false;} }  public class Red extends Color{  public boolean equalColor(Color c){ return this.equalRedColor(c); public boolean equalRedColor(Color c){ return c.checkRedColor(this); public boolean checkRedColor(Red c){ return true; } }  public class Blue extends Color{  return this.equalBlueColor(c); public boolean equalBlueColor(Color c){ return c.checkBlueColor(this); public boolean checkBlueColor(Blue c) { } } הסבר שלב 1: בזמן קומפילציה הקישור מתבצע לפי הטיפוס הסטטי – Color שלב 2: בזמן ריצה, כאשר נפעיל את הפונקציה, ג'אוה תחפש אם יש איזו פונקציה שדורסת אותה על פי הפרמטר הדינמי אבל במקרה שלנו checkRedColor(Red c) אינה דורסת אותה כיון שהפרמטר שהיא מקבלת שונה.  לכן תישאר עם הפונקציה של Color False False

12 X X v X v

13 מה הבעיה בקוד הבא ואיך ניתן לתקן אותו?
האם בעיה זו תקרה גם ב-JAVA? אם כן, איך נתקן אותה? אם לא, מדוע? זליגת זיכרון לא, ב java יש garbage collector

14 v X X X X בהעברת הודעות בתכנות מונחה עצמים מתווסף ה reciver.
השימוש הכרחי, See visitor patern v X ב C++ ניתן להגדיר אובייקטים במחסנית X See Singleton

15 v X X X הכרחי בגוואה כי אין ירושה מרובה
מבחינת הנדסת תוכנה נרצה שהשגיאות יהיו בזמן קומפילציה ולא בזמן ריצה (חסיכת עלויות). X הדינאמיות מתקשר לבדיקה של הטיפוסים הן בזמן הידור(גאווה) או בזמן ריצה(python). v

16 בהצלחה במבחנים וחופשה נעימה


הורד את "ppt "תרגול ממבחנים.

מצגות קשורות


מודעות Google