דילוג לתוכן הראשי

19-20.4.23 ימים ד' ו- ה', (חוף, אשכול ב') - תרגול והערות לבגרות

   בכיתה 

1. תרגיל "חימום והיזכרות" בנושא מחלקות
    תרגיל ClassA ClassB ClassC מעקב (עמ' 116 בספר) כאן
    פתרון כאן.

2.  תרגיל מחלקות One-Two
     
תרגיל 3: ניתוח, תיעוד ומעקב. המחלקות One-Two
     (עמ' 118 בספר, שם נכתב בטעות בכותרת - המחלקות A-B).
     חלק ראשון - 6 שאלות + 6 שאלות נוספות כאן.
     חלק שני - 3 תרגילי השלמות החסר כאן.
     כדי לוודא שהפתרונות שלכם נכונים, הריצו הכל במחשב.
     פתרון שרטוט עצמים כאן.
 
     
פתרון מעקב השאלות המסומנות ב- #, המרות מעלה/מטה, הסבר שגיאות
     ופלט הדפסת כל העצמים שנוצרו ב- Main: כאן.
     פתרון שאלות 1-6 כאן.
     פתרון 6 השאלות הנוספות ("רן") כאן.

3. תרגיל One-Two (תרגיל שונה מזה שבסעיף הקודם)
    הנושא: המרות ותקין/לא-תקין כאן.                                                                                                     
4. תזכורת - הפעולה Equals
    *
מדובר בפעולה וירטואלית הנמצאת במחלקה Object, מחלקת השורש של #C,
       ממנה כל המחלקות יורשות.
    * - אם קיימים שני ייחוסים: mc1, mc2 ושניהם מטיפוס המחלקה MyClass, ובמחלקה לא קיימת
         פעולה בשם Equals, ומבוצע הזימון (cm1.Equals(cm2, הרי שיוחזר true אם שני הייחוסים
         מפנים לאותו העצם, אחרת יוחזר false.
      - אם במחלקת MyClass קיימת הפעולה הדורסת Equals, ובוצע הזימון (cm1.Equals(cm2,
         הרי שיוחזר ערך בוליאני (true/false) בהתאם לתנאים שבבלוק הפעולה Equals הנמצאת
         במחלקה MyClass.
      - אם המחלקה MyClassB יורשת ממחלקת MyClass, וקיימים שני ייחוסים מטיפוס MyClassB
        ששמותיהם mcb1 ו- mcb2, וידוע כי במחלקת MyClassB לא קיימת הפעולה Equals, הרי
        שהזימון (mcb1.Equals(mcb2 יחזיר ערך בוליאני בהתאם לקוד הפעולה Equals הנמצאת
        במחלקת MyClassA (מכיוון שמחלקת MyClassB יורשת מ- MyClassA).

5. תזכורת - ייחוס מטיפוס ממשק
    * ייחוס מטיפוס ממשק יכול להפנות לכל עצם מטיפוס מחלקה המממשת את הממשק,
       ויכול להפנות גם לכל עצם מטיפוס המחלקות היורשות ממחלקה זו.  

5. תזכורת - המרות
    * כאשר נוצר עצם באמצעות מלת-המפתח new, העצם יהיה מטיפוס המחלקה ששמה כשם הבנאי.
      למשל, ()Student t = new Student. (בנאי בשם Student יוצר עצם מטיפוס המחלקה Student).
    *
אין המרה שמסוגלת לשנות את העצם להיות עצם מטיפוס אחר כלשהו. עצם אשר "נולד" כעצם
      מטיפוס Student, לעולם יישאר עצם מטיפוס Student.
    * אם מחלקת Student יורשת ממחלקת Person, ויצרנו מערך מטיפוס Person בשם arr, הרי שכל
      תא במערך arr יכול להפנות לעצם מטיפוס Person או לעצם מטיפוס Student.
    * נניח שבמחלקת Student קיימים האלמנטים: התכונה grade (מספר שלם) בהרשאה protected,
      השומרת ציון כלשהו, והפעולה ()GetGrade שהרשאתה public המחזירה את ערך התכונה grade.
    * נניח שבתא הראשון במערך (אינדקס 0) קיים עצם מטיפוס Student. האם השורה הבאה חוקית:
      ()arr[0].GetGrade ?
      התשובה היא שלא, כיוון שייחוס מטיפוס אב לא יכול לגשת לאלמנטים (תכונות/פעולות) אשר
 
      הוגדרו במחלקת הבן.

        המצב ההפוך כמובן אפשרי: ייחוס מטיפוס בן יכול לגשת לכל אלמנט
        (בהרשאת protected או public) שהוגדרת במחלקת האב, כיוון שהוא יורש אותם מהאב.

    * ידוע לנו שבמיקום [arr[0 קיים עצם מטיפוס Student. איך בכל זאת נוכל לדעת מה הציון שלו?
      מכיוון שהייחוס של המערך הוא Person, ואין אפשרות למחלקת אב לגשת לאלמנטים של עצם
      ממחלקת הבן, אפילו שייחוס זה יכול להפנות לעצם ממחלקת הבן (להפנות אך לא לגשת),
      יש צורך בהמרה.
    *
שורת הקוד הבאה תקינה: ()Student)arr[0]).GetGrade)).
      הסיבה לתקינות היא שבוצע המרה לייחוס של [arr[0 מ- Person ל- Student. הדבר אפשרי
      כיוון שבמיקום זה קיים עצם מטיפוס Student.
שימו לב שבוצעה המרה של הייחוס [arr[0 להיות
      ייחוס מטיפוס Student
ולא המרה של העצם עצמו, אליו מפנה [arr[0, להיות מטיפוס Student.      

6. תרשים UML - סימון הורשה, הכלה וממשק
    תזכורת: הורשה - עם קו-רציף וחץ בעל ראש מלא לכיוון מחלקת האב.
                הכלה   - עם קו-רציף וחץ בעל ראש מעוין (יהלום) לכיוון המחלקה המכילה (לא המוכלת).
                ממשק  - עם קו-מקווקו וחץ בעל ראש מלא לכיוון הממשק.
    דוגמאות:
    תיקון טעות, במקום המשפט: "מחלקת Animal מממשת את הממשק IPet"
                                     צ"ל: "מחלקת Dog מממשת את הממשק IPet".
                               
הסיבה: לא כל חיה היא גם חיית-מחמד. אבל ספציפית כלב הוא חיית מחמד.




לבית
תרגול - בקרוב אעלה לכאן קישורים לסרטונים, תרגילים נוספים, תרגילי בגרויות ופתרונות.
1סרטונים של פתרון בגרויות מאת אריאל בר-יצחק כאן.

בשיעורים הבאים
1המשך תרגול לקראת הבגרות.