1 / 29

שעור אחרון עם הכלבים

שעור אחרון עם הכלבים. public class RobDog extends Dog. אוסף הכלבים. תפריט הרובוטים. אוסף הרובוטים. תפריט הכלבים. לכל ביטוי בשפה (טבעית או פורמאלית) ניתן להתייחס בשני אופנים: תחבירי ותוכני. היום יום שבת. הוא משפט נכון מבחינה תחבירית ולא נכון מבחינה תוכנית.

lukas
Download Presentation

שעור אחרון עם הכלבים

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. שעור אחרון עם הכלבים

  2. public class RobDog extends Dog אוסף הכלבים תפריט הרובוטים אוסף הרובוטים תפריט הכלבים

  3. לכל ביטוי בשפה (טבעית או פורמאלית) ניתן להתייחס בשני אופנים: תחבירי ותוכני. היום יום שבת. הוא משפט נכון מבחינה תחבירית ולא נכון מבחינה תוכנית. השעור הנוכחי הוא על המתח הזה שבין התוכן לתחביר.

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

  5. הביטוי RobDog my_dog= new Dog(); לא יהודר. הוא מבטיח דבר שאי אפשר לקיימו - שלכל שיטה x(…) בתפריט של RobDog הביטוי my_dog.x(…) ניתן לבצוע.

  6. לעומת זאת הביטוי Dog my_dog= new RobDog(); יהודר. הוא מבטיח דבר שאפשר לקיימו – שכן כל שיטה x(…) בתפריט של Dog מופיעה בתפריט של RobDog

  7. האם הביטוי יהודר? my_dog.voice(2,20);

  8. המשתנה my_dog הוא מטפוס Dog ובתפריט של Dog אין שיטה voice(int,int)

  9. האם הביטוי יהודר? my_dog.voice(2);

  10. המשתנה my_dog הוא מטפוס Dog ובתפריט של Dog יש שיטה voice(int)

  11. מה יהיה הפלט של הביטוי my_dog.voice(2)

  12. The robot dog called dog_number0: TOOTOO TOOTOO

  13. כלל ההפניה: השיטה אליה אנו פונים היא היא תמיד השיטה היורשת ולא המורישה.

  14. העצם "אינו יודע" איזה טפוס משתנה הפנה אותנו אליו

  15. כלל התפריט: חוקיות הביטוי נקבעת על פי התפריט של השיטה המורישה

  16. המהדר אינו יכל לדעת אל איזה עצם מפנה המשתנה

  17. באמצעות מנגנון ההשלכה ניתן להתעקש, לומר למהדר שאיננו זקוקים להגנתו

  18. ((RobDog) my_dog).voice(2,20);

  19. פלט The robot dog called dog_number0: TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTO O TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOO TOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO T OOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTO O TOOTOO TOOTOO TOOTOO TOOTOO

  20. מה יקרה עכשיו? Dog your_dog = new Dog(); ((RobDog) your_dog).voice(3,5);

  21. ועכשיו? Pack p = new Pack(“River”); ((RobDog) p).voice();

  22. נוסיף למחלקה Pack את השיטה public Dog member_at(int i) { return members[i]; }

  23. נקים להקת כלבים ונצרף אליה מספר כלבים ורובוטי כלבים public class Pack_driver { public static void main(String[] args) { Pack mixed_pack = new Pack(“mixed”); mixed_pack.add_member(new Dog(“Rex”)); mixed_pack.add_member(new RobDog(“RobRex”)); mixed_pack.add_member(new Dog(“Mitzi”)); mixed_pack.add_member(new RobDog(“RobMitzi”)); for (idog = 0; idog<mixed_pack.size(); idog++{ mixed_pack.member_at(idog).voice(); } } }

  24. public class Pack_driver { public static void main(String[] args) { Pack mixed_pack = new Pack(“mixed”); mixed_pack.add_member(new Dog(“Rex”)); mixed_pack.add_member(new RobDog(“RobRex”)); mixed_pack.add_member(new Dog(“Mitzi”)); mixed_pack.add_member(new RobDog(“RobMitzi”)); for (idog = 0; idog<mixed_pack.size(); idog++{ mixed_pack.member_at(idog).voice(); } } }

  25. public class Pack_driver { public static void main(String[] args) { Pack mixed_pack = new Pack(“mixed”); mixed_pack.add_member(new Dog(“Rex”)); mixed_pack.add_member(new RobDog(“RobRex”)); mixed_pack.add_member(new Dog(“Mitzi”)); mixed_pack.add_member(new RobDog(“RobMitzi”)); for (idog = 0; idog<mixed_pack.size(); idog++{ mixed_pack.member_at(idog).voice(); } } }

  26. public class Pack_driver { public static void main(String[] args) { Pack mixed_pack = new Pack(“mixed”); mixed_pack.add_member(new Dog(“Rex”)); mixed_pack.add_member(new RobDog(“RobRex”)); mixed_pack.add_member(new Dog(“Mitzi”)); mixed_pack.add_member(new RobDog(“RobMitzi”)); for (idog = 0; idog<mixed_pack.size(); idog++{ mixed_pack.member_at(idog).voice(); } } }

  27. public class Pack_driver { public static void main(String[] args) { Pack mixed_pack = new Pack(“mixed”); mixed_pack.add_member(new Dog(“Rex”)); mixed_pack.add_member(new RobDog(“RobRex”)); mixed_pack.add_member(new Dog(“Mitzi”)); mixed_pack.add_member(new RobDog(“RobMitzi”)); for (idog = 0; idog<mixed_pack.size(); idog++({ mixed_pack.member_at(idog).voice(); } } }

  28. פלט The dog called Rex: HAAU The robot dog called RobRex: TOOTOO The dog called Mitzi: HAAU The robot dog called RobMitzi: TOOTOO

  29. לתופעה זו, שלמשתנים מאותו טיפוס יכולות להיות התנהגויות שונות, קוראים רב צורתיות (פולימורפיזם).

More Related