שעור אחרון עם הכלבים
DESCRIPTION
שעור אחרון עם הכלבים. public class RobDog extends Dog. אוסף הכלבים. תפריט הרובוטים. אוסף הרובוטים. תפריט הכלבים. לכל ביטוי בשפה (טבעית או פורמאלית) ניתן להתייחס בשני אופנים: תחבירי ותוכני. היום יום שבת. הוא משפט נכון מבחינה תחבירית ולא נכון מבחינה תוכנית. - PowerPoint PPT PresentationTRANSCRIPT
שעור אחרון עם הכלבים
אוסף הכלבים
אוסף הרובוטים
public class RobDog extends Dog
תפריט הרובוטים
תפריט הכלבים
לכל ביטוי בשפה )טבעית או פורמאלית( ניתן להתייחס בשני אופנים: תחבירי ותוכני.
היום יום שבת.
הוא משפט נכון מבחינה תחבירית ולא נכון מבחינה תוכנית.
השעור הנוכחי הוא על המתח הזה שבין התוכן לתחביר.
בהינתן ביטוי בשפת תכנות
השאלה התחבירית היא:האם הביטוי חוקי כלומר האם הוא יהודר )יעבור קומפילציה(
השאלה התוכנית היא:מה הביטוי הזה יעשה כשהתוכנית תרוץ.
כמו במקרה של השפה הטבעית התשובות לשתי השאלות האלו עשויות שלא לעלות בדיוק בקנה אחד.
הביטוי
RobDog my_dog = new Dog();
לא יהודר. )…(xהוא מבטיח דבר שאי אפשר לקיימו - שלכל שיטה
ניתן לבצוע.)…(my_dog.x הביטוי RobDogבתפריט של
לעומת זאת הביטוי
Dog my_dog = new RobDog();
יהודר. )…(xהוא מבטיח דבר שאפשר לקיימו – שכן כל שיטה
RobDog מופיעה בתפריט של Dogבתפריט של
האם הביטוי
יהודר?
my_dog.voice)2,20(;
Dog ובתפריט של Dog הוא מטפוס my_dogהמשתנה )voice)int,intאין שיטה
האם הביטוי
יהודר?
my_dog.voice)2(;
Dog ובתפריט של Dog הוא מטפוס my_dogהמשתנה )voice)intיש שיטה
מה יהיה הפלט של הביטוי
my_dog.voice)2(
The robot dog called dog_number0: TOOTOO TOOTOO
כלל ההפניה:השיטה אליה אנו פונים היא היא תמיד השיטה היורשת ולא המורישה.
העצם "אינו יודע" איזה טפוס משתנה הפנה אותנו אליו
כלל התפריט:חוקיות הביטוי נקבעת על פי התפריט של השיטה המורישה
המהדר אינו יכל לדעת אל איזה עצם מפנה המשתנה
באמצעות מנגנון ההשלכה ניתן להתעקש, לומר למהדר שאיננו זקוקים להגנתו
((RobDog) my_dog).voice(2,20);
פלט
The robot dog called dog_number0: TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO TOOTOO
מה יקרה עכשיו?
Dog your_dog = new Dog)(;))RobDog( your_dog(.voice)3,5(;
ועכשיו?
Pack p = new Pack)“River”(;))RobDog( p(.voice)(;
את השיטה Packנוסיף למחלקה
public Dog member_at)int i( { return members[i];}
נקים להקת כלבים ונצרף אליה מספר כלבים ורובוטי כלבים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)(; } }}
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)(; } }}
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)(; } }}
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)(; } }}
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(); } }}
פלט
The dog called Rex: HAAUThe robot dog called RobRex: TOOTOOThe dog called Mitzi: HAAUThe robot dog called RobMitzi: TOOTOO
לתופעה זו, שלמשתנים מאותו טיפוס יכולות להיות התנהגויות שונות, קוראים רב צורתיות )פולימורפיזם(.