PracticU

פרויקט מעשי ב-#C - תוכנת צייר - חלק 24

בלי כתוביותעם כתוביות
PracticU › פרויקט מעשי ב-#C - תוכנת צייר › פרויקט מעשי ב-#C - תוכנת צייר - חלק 24
מילון מושגים:
ירושה - מנגנון בתכנות מונחה עצמים שבו מחלקה יורשת תכונות ופעולות ממחלקת אב, ויכולה להרחיב אותן.
לולאה - מבנה בקרה שחוזר על קטע קוד שוב ושוב כל עוד תנאי מתקיים או עבור כל פריט באוסף.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
טופס - אזור בממשק שבו המשתמש מזין נתונים בשדות ושולח אותם, למשל טופס הרשמה או התחברות.
פולימורפיזם - עיקרון בתכנות מונחה עצמים שבו אובייקטים ממחלקות שונות מגיבים לאותה פעולה כל אחד בדרכו.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
קומפיילר - תוכנה שממירה קוד מקור שנכתב בשפת תכנות לקוד שהמחשב יכול להריץ, ומדווחת על שגיאות תחביר.
הרשאה - קביעה אילו פעולות ומשאבים מותרים למשתמש או לתהליך לאחר שזהותו אומתה. שולטת במי רשאי לעשות מה.

פרויקט מעשי ב-#C - תוכנת צייר - חלק 24
בשיעור הזה מחלקים את הקוד לקבצים נפרדים, ומשתמשים בירושה כדי ש-Line ו-Freehand יחלקו בסיס משותף בשם Shape. הפונקציה Draw נקראת לכל הצורות בלולאה אחת, בלי לבדוק את הטיפוס.
השלבים העיקריים
1. קובץ לכל מחלקה: Line ו-Freehand מועברים לקבצים נפרדים, עם הוספת הפניות (using) הנדרשות. אין סיבה שהמחלקות יישבו בתוך המחלקה של הטופס.
2. מחלקת בסיס Shape: מחלקה חדשה מכילה את הפונקציה Draw כאבסטרקטית, כלומר בלי מימוש. Line ו-Freehand יורשים ממנה ודורסים את Draw במימוש משלהם, בעזרת המילה override.
3. פולימורפיזם: רשימת הצורות מכילה אובייקטים מסוג Shape. בלולאה foreach קוראים s.Draw(g), והקומפיילר מפעיל את הפונקציה של הטיפוס האמיתי בזמן ריצה.
4. מחלקה אבסטרקטית: אי אפשר ליצור ממנה אובייקט, כי אין לה מימוש ל-Draw. מילת המפתח abstract מונעת את זה.
5. הרשאות גישה: המילה internal מגדירה שהמחלקה נגישה לכל הפרויקט, ולא מחוצה לו.
טעויות נפוצות
- כשהמחלקה Shape מכילה פונקציה אבסטרקטית, היא חייבת להיות אבסטרקטית בעצמה. הקומפיילר מודיע על כך.
- בלי using System.Drawing הקומפיילר לא מכיר את הטיפוס Color, כי השם המלא שלו כולל את המרחב.
- דריסה של פונקציה בלי המילה override גורמת לשגיאת קומפילציה.
בסיום השיעור התלמיד מבין איך ירושה ופולימורפיזם מחליפים בדיקות טיפוס רבות בקריאה אחת, ואיך מחלקה אבסטרקטית מגדירה חוזה משותף.
השיעור הבא בקורס: פרויקט מעשי ב-#C - תוכנת צייר - חלק 25

פרקי ההרצאה: פרויקט מעשי ב-#C - תוכנת צייר - חלק 24

  1. 00:00

    המשך סידור הקוד לפי מחלקות

  2. 00:43

    פיצול המחלקות לקבצים נפרדים

  3. 03:07

    בדיקת סוג האובייקט בלולאה

  4. 04:37

    מחלקת בסיס Shape ומתודה אבסטרקטית

  5. 06:29

    ציור כל צורה בלולאה אחת

  6. 08:23

    הרשאות Internal במקום Private

  7. 09:49

    תיקון שגיאות הקומפיילר והוספת using

  8. 10:38

    מחלקה אבסטרקטית כדרישת הקומפיילר

תמלול ההרצאה: פרויקט מעשי ב-#C - תוכנת צייר - חלק 24

הטקסט המלא של הדקות הראשונות בהרצאה «פרויקט מעשי ב-#C - תוכנת צייר - חלק 24» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:05

    טוב, אז בהרצאה הקודמת בעצם התחלנו לנקות את הקוד ולסדר אותו. טוב, בואו נמשיך. אז אנחנו עכשיו בשלב שאנחנו רק רוצים לסדר את הקוד, זאת אומרת אנחנו לא רוצים להוסיף פונקציונליות, אלא רק לעשות שהקוד יהיה יותר מסודר. אז בואו נסתכל על הקוד.

  2. 00:41

    האמת היא שיש לנו פה קלאס ליין וקלאס פרי-הנד, והאמת היא שאין שום סיבה שהם יהיו בתוך קלאס פורם אחד. אפשר אולי להוציא אותם בעצם החוצה.

  3. 00:56

    אז בשביל כך נעצור את התוכנית ונגדיר שני קבצים, אחד שנקרא Line ואחד שנקרא Re-Hand וניגש לקלאס המרכזי שלנו ואת קלאס Line ניקח ונשים אותו בקובץ Line, נדרוש את קלאס ליין שיש פה ונסגור את זה וניגש לקלאס הפורום אחד שלנו ניקח את קלאס פרי-הנד ונדרוש את קלאס פרי-הנד ונסגור וזהו זה היה נחמד אבל זה לא באמת לא יקר אז מה שאנחנו

  4. 02:23

    רוצים עכשיו זה בואו נסתכל על הקלאסים שלנו זה קלאס פרי-הנד זה קלאס ליין וכשאני עובר בין שני הקלאסים אני שם לב לדמיון מאוד גדול ביניהם לשניהם יש דרור ושני אפדייטים באופן אופייה אבל בוא נגיד ששני האפדייטים אני לא יודע עד כמה אני יכול להועיל אבל לגבי הדרור אני חושב שאני יכול להועיל למה?

  5. 03:07

    בוא נסתכל פאנל ווייטבורד ככה האמת היא שאנחנו עוברים פה על כל האובייקטים בשייק פה אנחנו בודקים אם O הוא מסוג freehand אז בואו נטפל בו כfreehand ונקרא לה draw שלו אם O הוא line אז בואו נמיר אותו ללין ונקרא לה draw שלו אבל למעשה אם היינו יכולים להגדיר את שני הקלאסים אז מה שאנחנו שמים לב זה שה-draw

  6. 03:44

    הזה וה-draw הזה בוא נגיד ככה אם freehand ו-line אם היינו יכולים להתייחס ל-freehand ול-line כאל בעצם אל אותו טיפוס, טיפוס אחד שנקרא שייפ, אז היינו יכולים לחסוך בעצם את האיף הזה, את שני האיפים האלה.

  7. 04:10

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

  8. 04:49

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

  9. 05:34

    הפסקת אבסטרקט ווייד דרו ונגיד שליין בסך הכל דורס את דרו, הוא מממש כאילו את דרו.

  10. 06:09

    אותו דבר לגבי פריאן, פריאן גם הוא יורש מ-shape ומממש או דורס את דרו. מה זה נותן לי המנגנון הזה של ירושה? המטרה היא שאני אהיה מסוגל להגיד for each shape s in shape ובלי לבדוק שום דבר אני פשוט אגיד s נקודת draw אבל draw צריכה להיות זמינה אנחנו נגדיר אותו כinternal עוד בהמשך נחזור

  11. 07:04

    מה זה internal ומה זה private ומה זה public אז זאתי draw יותר מזה אני לא צריך להגיד כלום אם בזמן מתברר שs הוא בעצם אובייקט מסוג freehand אז הדרו freehand תופעל ואם מתברר שs הוא line אז הדרו של line תופעל וזה הקוד של pain בואו נזכר מה היה הקוד של pain בהתחלה כשרק הוספנו את freehand ואת line pain גלשה מהמסך עכשיו pain בקלות נכנסת למסך עם עוד פונקציה שלמה אחרת, עם מה הוסף.

  12. 07:59

    זה בהחלט הופך את הקוד להרבה יותר קריא. בואו נראה את זה רע. מה השגיאה? Classline הוא פרייבט, אנחנו נחזור למילה פרייבט, בינתיים נגדיר את זה כאינטרנל.

  13. 08:30

    וכנראה שגם את shape נגדיר כאינטרנל, וגם את freehand נגדיר כאינטרנל. ננסה להריץ, די נורא, אוקיי.

  14. 08:55

    color לא מוכר בקובץ נפרד כי בקובץ הזה אין את היוזינגים המתאימים זאת אומרת color אם נבקש מהצ'ופצ'יק להשלים לנו אז הוא אומר שצריך להוסיף את שם המשפחה שלו system drawing אם לא נוסיף את שם המשפחה שלו אז הקומפיילר בזמן קומפילציה בזמן שאנחנו ננסה להריץ את התוכנית והקומפיילר ינסה להבין מה כתוב כאן הוא יחפש

  15. 09:24

    את זה הוא ינסה להדביק לו את זה ינסה להדביק לו את זה, נסה להדביק לו את זה. אם הוא לא ינסה להדביק לו את זה, הוא לא ימצא את הדבר הזה.

  16. 09:35

    כי השם המלא, השם האמיתי של קלר זה system.drone.car זה השם האמיתי שלו. הקומפייר לא יכיר אותו כקלר סתם, הוא חייב גם את התוספת הזו.

  17. 09:49

    אני מניח שבפרי-הנד זו אותה בעיה. ננסה שוב להאריך, עדיין יש בעיה. הרייליסט אינו מוכר, שוב ננסה להאריך. רפיקס אינו מוכר בשייפ.

  18. 10:18

    עדיף לו את ה-using ושוב ננסה להעריץ, עדיין לא מוכר, draw, שייפ אם אני לא נותן מימוש, אם אין לי מימוש ל-draw אז הקומפיילר אומר לי אתה חייב שגם הקלאס המכיל יהיה אבסטרקטי, תכף נבין מה זה אבסטרקטי, מה זה אינטרנל, כל המילים השמורות תכף נעבור עליהן, יפה.

  19. 10:58

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

לקורס המלא: פרויקט מעשי ב‑#C אונליין

ההרצאה הקודמת: פרויקט מעשי ב-#C - תוכנת צייר - חלק 23

ההרצאה הבאה: פרויקט מעשי ב-#C - תוכנת צייר - חלק 25

הרצאות קשורות מקורסים אחרים

  • תרגיל 24 - תוכנת צ'אט - חלק 1
  • פרויקט מעשי ב-#C - ספר טלפונים - חלק 1
  • תרגיל מעשי Delegate Event
  • שדרוג צייר שלנו על canvas

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס תכנות מתקדם - #Advanced .NET C
  • קורס WCF - תקשורת למתקדמים בדוט-נט