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

Slides:



Advertisements
מצגות קשורות
ילדי גן "יסמין" וגן פרפר נחמד" נוטעים יחד עם חיילי סמ"ג חוף
Advertisements

כרטיסי מידע להכרת הציפורים שבקרבת משכנות האדם
الاشكال الهندسية צורות הנדסיות
עמל שפרעם-מודל להתמודדות עם תלמידים תת משיגים
وظائف الفجوة الخلوية وظائف الفجوة المحافظة علي استمرارية ضغط الامتلاء Turger pressure للخلية وهو هام جدا للتركيب الدعامي وللتحكم في حركة الماء.
מגמת ניהול עסקי "קציר".
מיפוי הנשים הפלסטיניות הכותבות אחרי 1948
תמליל מצגת:

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

עמוד 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. התשובה היא : א'  זו הייתה הכוונה אבל בפועל יש שגיאת קומפילציה !!!!

בזמן ריצה 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

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)

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 אבל לא את התוכן

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

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

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

 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

X X v X v

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

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

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

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