PracticU

פייטון Object Oriented - חלק 3

בלי כתוביותעם כתוביות
PracticU › קורס פייתון - Python › פייטון Object Oriented - חלק 3
מילון מושגים:
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
ירושה - מנגנון בתכנות מונחה עצמים שבו מחלקה יורשת תכונות ופעולות ממחלקת אב, ויכולה להרחיב אותן.
חריגה - מצב שגיאה שמתרחש בזמן ריצת התוכנית ומפסיק את המהלך הרגיל, אלא אם הקוד תופס ומטפל בו.

פייטון Object Oriented - חלק 3
השיעור עוסק במחלקות אבסטרקטיות בפייתון, ובדרך לכפות על מחלקות יורשות לממש פונקציות מסוימות. פייתון לא תמכה בזה מלכתחילה, ורק מאוחר יותר נוספה תמיכה דרך המודול abc.
הרעיון
1. תיאור בלבד: מחלקה אבסטרקטית לא נועדה ליצור ממנה אובייקטים, אלא לתאר התנהגות שהיורשים חייבים לקיים.
2. דוגמה: מחלקה לקבצים שמגדירה open, read, write ו-close, ומחלקות יורשות ממשות כל אחת בדרך שלה, למשל write שמוודא שהמידע נכתב.
3. חיקוי ממשקים: בפייתון אין interfaces, אבל אפשר לחקות אותם בעזרת ירושה מרובה ממחלקות אבסטרקטיות.
איך מגדירים
4. ייבוא ומטא-קלאס: מייבאים את המודול abc ומגדירים במחלקה הבסיסית את המטא-קלאס שלו. כך פייתון בודקת את חוקיות המחלקה.
5. סימון הפונקציה: מעל כל פונקציה שמחייבים את היורשים לדרוס מוסיפים @abstractmethod. פונקציה בלי הסימון לא מחייבת דריסה.
מה קורה בפועל
ניסיון ליצור אובייקט מהמחלקה הבסיסית נכשל, כי היא מכילה פונקציה אבסטרקטית. מחלקה יורשת שלא דורסת את הפונקציה נכשלת גם היא, ורק אחרי המימוש היא נוצרת בהצלחה. לפני המודול הפתרון היה לזרוק חריגה מתוך הפונקציות, אבל אז המחלקה הבסיסית עדיין הייתה ניתנת ליצירה, והשגיאה התגלתה רק בזמן הקריאה לפונקציה.
השיעור הבא בקורס: פייטון design pattern factory

פרקי ההרצאה: פייטון Object Oriented - חלק 3

  1. 00:00

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

  2. 00:39

    אין ממשקים בפייתון וירושה מרובה

  3. 01:15

    דוגמה: מנגנון פתיחת קובץ

  4. 02:10

    הצורך באבסטרקט בשפה חופשית כמו פייתון

  5. 02:46

    ייבוא מודול ABC והגדרת מטא-קלאס

  6. 03:24

    סימון פונקציות אבסטרקטיות עם abstractmethod

  7. 04:12

    מחלקת בסיס ומחלקה יורשת

  8. 04:50

    יצירת מופע של מחלקה יורשת

תמלול ההרצאה: פייטון Object Oriented - חלק 3

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

  1. 00:03

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

  2. 00:29

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

  3. 00:46

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

  4. 01:02

    אז דבר ראשון, מה זה Abstract Class? אז כמו שאמרתי, אבסטרקט קלאס זה קלאס שאי אפשר ליצור ממנו עותק, אלא הוא רק בא לתאר איזשהו משהו.

  5. 01:15

    למשל, אתה רוצה לתאר משהו, מנגנון של פתיחת קבצים. אז אתה אומר, אוקיי, כל מי שרוצה לפתוח קובץ צריך שיהיה לו את הפונקציה open, read, write, close.

  6. 01:27

    אז אתה יוצר אבסטרקט קלאס שיש בו את הפונקציות open, read, write ו-close, ואז כל אחד שרוצה ליצור קלאס שמטפל בקבצים אבל בצורה קצת שונה, יורש מהקלאס הזה ומממש את הפונקציות בצורות אחרות.

  7. 01:47

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

  8. 02:03

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

  9. 02:20

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

  10. 02:33

    בואו נראה איך הוסיפו לזה תמיכה. כדי לעבוד עם abstract class ולכפות בעצם על מי שיורש ממני לממש פונקציות, מה שאני צריך לעשות דבר ראשון זה לעשות import לפקאג' מודול שנקרא ABC. בתוך ה-base class אני צריך להוסיף את השורה הזאת.

  11. 02:55

    מה שכתוב כאן זה underscore, underscore, meta class שווה ל-abc.abc.meta. ממש בקטנה אני אסביר ש-meta class זה מה שבעצם מייצר, מתאר את הקלאס.

  12. 03:09

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

  13. 03:32

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

  14. 04:06

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

  15. 04:26

    בואו ננסה דבר ראשון, ניצור אינסטנס של בייס. אז בואו ניצור בייס. אז אנחנו יוצרים בייס. שימו לב לשגיאה, cannot initiate abstract class.

  16. 04:43

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

לקורס המלא: קורס פייתון אונליין למתחילים

ההרצאה הקודמת: פייטון Object Oriented - חלק 2

ההרצאה הבאה: פייטון design pattern factory

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

  • Object Serialization
  • Session object - חלק 1
  • המחלקה Object
  • Powershell object

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

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס PHP - פרויקט מעשי