הצעות לתרגול נוסף בנושא מחלקות

תגיות:

disclaimer
כל מה שכתוב כאן זו דעתי האישית, וייתכן שסגל הקורס לא מסכים (אם אקבל הערות בנושא אשמח לתקן / לערוך / לעדכן בהתאם)

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

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

כיוון המחשבה האישי שלי על בסיס מחברת מס’ 1 בשבוע 7 (בלבד) וייתכן שישתנה בהמשך, הוא שימוש במחלקות לצרכים הבאים:

  1. טיפול באובייקטים רבים שיש להם תכונות משותפות, או התנהגות שדומה מבחינות מסוימות, ושנוטים להזדקק לפעולות דומות. מעבר ליכולת ליצור אובייקטים שמתקיימים במקביל וניתן לגשת אליהם ב"גמישות" מבחינת זמן, סדר הפעולות שנעשות עליהם וכו’ יש גם אפשרות לטפל בכל האובייקטים במחלקה בבת אחת ע’י הענקת תכונות משותפות וכן הלאה (בעיני זה השימוש שהכי קל להבנה מבחינת מחלקות) את השימוש הזה קל לראות הדוגמת היוזרים במחברת, ומתרגיל “סקרנות” במחברת - נניח שחברת הסקרים שלנו מריצה 500 סקרים שונים עבור לקוחות שונים במקביל, זה נוח להסתכל על הקוד מזווית הראייה של סקר בודד.
  2. מחלקות בפייתון מגיעות עם מספר “פעולות קסם” שלעיתים עושות את החיים קלים יותר (פה הכרותי עם פעולות אלו עדיין קטנה מאוד, ומה שעשיתי באופן אישי זה לגשת לתיעוד בנושא, אין לי הרבה מה לתרום כאן)
  3. סידור הקוד, חלוקת הקוד, איגוד פונקציות שקשורות אחת לשניה מבחינת סוג המשתנים שאליהם אנחנו מייעדים אותן. בנושא זה גם קראתי בתיעוד של פייתון, ונראה לי שיש יתרונות שנובעים מריבוי מחלקות בקוד בכך שפעולות והגדרות מסוימות בתוך מחלקה לא “זולגות החוצה” למחלקות אחרות, ובכך מתאפשר שימוש בשמות עם חשש מינימלי ל’דריסה’ של קטעי קוד אחרים, בייחוד כשחלקי קוד ממקורות ויוצרים שונים מתערבבים ביחד. אני חושבת שחלק מזה אפשר לראות בשימוש במודולים.

כיוון ששימוש (1) הוא הקל לי ביותר לתפוס, חשבתי על מספר תרגילים שהכי קשורים לזה, בתקווה שתרגול שימוש במחלקות למטרה כלשהיא יהפוך את הנושא ל"זורם" יותר בשבילי, ובכך אוכל בהמשך להבין ולהשתמש במחלקות גם לשימושים האחרים שלהן. אז ככה:

מתוך שבוע 4, מחברת 3:

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

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

“הקינוח הכי זול” - בתרגיל ‘חתכת עוגה’ (שבוע 5, מחברת 2) חישבנו את עלות הכנת העוגה. אני אוהבת לשמור חוברת מתכונים, בה כל מתכון לקינוח הוא מופע, וכשמתחשק לי לבשל, אני רוצה לדעת מה עלות המתכון ע"פ עלות המוצרים בחנות של קשטן היום (הוא מפרסם את רשימת המוצרים ועלותם ל-100 גר’ באתר האינטרנט של החנות שלו מדי יום. ניתן להוריד את הרשימה מהאתר כמילון, או כקובץ CSV אם בא לכם לתרגל עוד משהו)

3 לייקים

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

נכון שכמה שנעמיק בנושא יהיה ברור יותר אבל היסודות חשובים ולכן אני אישית ממליץ לתרגל
כל אחד עם עצמו… סתם ליצור מחלקות של דברים ולראות איך הדברים עובדים כדי לחזק את הבסיס.

כל מה שיתווסף רק יהפוך את זה להיות “מורכב” יותר ואם היסודות של הבניין לא טובים …
#אסוןורסאי.

2 לייקים

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

לייק 1

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

מממ אני לא בטוח שאני מסכים עם זה ^^"
בסופו של דבר קוד קשור באבסטרקציה של דברים.

אפשר גם לשאול למה צריך פונקציות, כי גם שם זה נטו עניין של ארגון.
יש הרבה דברים שאפשר להסתדר בלעדיהם, וטכנית משבוע 3 (גג 5) הייתם יכולים לכתוב חללית אם ממש הייתם רוצים.
אני מסכים שההבנה של למה צריך מחלקות מתחדדת כשלומדים עוד פיצ’רים שלהם, אבל אני חושב שהיא צריכה להתגבש עוד לפני. כי כשלומדים ירושה עולה השאלה של “למה צריך ירושה” :slight_smile:

בנוגע ל"איך" – כמו שציינתי לפני, ממש חשוב להבין איך בונים מחלקה לפני שנמשיך הלאה (ולכן נגה עובדת על תרגול נוסף כרגע)

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

לייק 1

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

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

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