OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה...

58
שיעור10 : תכנות מונחה עצמיםOOP 1 ברק גונן

Transcript of OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה...

Page 1: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

OOPתכנות מונחה עצמים : 10שיעור

1

ברק גונן

Page 2: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

מבוא ל-OOP- בשביל מה זה טוב?

כתיבתclass בסיסי

בנייתclass משופר

ירושהinheritance

פולימורפיזם

2 ברק גונן

Page 3: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

עד עכשיו כתבנו קוד שקרא לפונקציות ◦ Procedural Programming

מדי פעם עשינוimport למודולים

כעת נלמד לכתוב כאלה בעצמנו ◦ Object Oriented Programming

עולם האמיתי"ככה בדרך כלל עובדים ב"

ברק גונן 3

Page 4: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

4 ברק גונן

תוכנה שמחשבת ממוצע ציוני

:תלמידים תלמידים בבית הספר 200◦

מקצועות 10◦

נדרשים אלפי משתנים◦

נשתמש ברשימה? מסובך לעבוד עם אינדקס לכל מקצוע◦

Page 5: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

אז מהו אובייקט? ישות תוכנה שמכילה מידע ופונקציות

Membersהמידע נקרא ◦ Methodsהפונקציות נקראות ◦ הפונקציות עובדות עם המידע◦

תנו דוגמה לאובייקט כלשהו

Members-ו methodsהמציאו לו ◦

5 ברק גונן

Members

Methods

Object

Page 6: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

אפשר לקרוא בקלות ל-members ולמתודות של כל אובייקט

מתודות ואפשר לשנות-members של אובייקט בלי לשנות את

שמשתמש באובייקטהקוד

6 ברק גונן

Object

קוד תוכנית

Page 7: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

class ,הוא קטע תוכנה שמגדיר את כל ה, מחלקה-members

של אובייקט methods-וה

נמחיש: שבתאי הוא כוכב לכת אחד מתוך רבים◦

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

Planet, אפשר להגדיר מחלקה של כוכב לכת◦

תכיל את המאפיינים המשותפים לכל כוכבי הלכת Planetהמחלקה ◦

7 ברק גונן

Page 8: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

מחלקה מתארת את המאפיינים של אובייקט

המחלקה משמשת ליצירת אובייקטים בזיכרון , כשהתוכנית רצה

המחשב

התבנית לעוגיות אינה . נוצרת מתבנית לעוגיות עוגיה: המחשה

.אבל היא מתארת את הצורה של כל העוגיות, עוגיה

8 ברק גונן

Page 9: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

כל אובייקט הואinstance של המחלקה ממנה נוצר

לדוגמה: של תבנית העוגיות instanceהיא עוגיהכל ◦

Planetשל המחלקה instanceשבתאי הוא ◦

9 ברק גונן

Page 10: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

הסבירו את ההבדל ביןClass, Instance, Object

ל"השלימו את התבניות הבאות תוך שימוש במושגים הנ:

________ של _________ הוא_________

_______ הוא תבנית של________

יש ________ של ________ לכלdata attributes משלו

נלמד איך להגדיר מחלקהכעת

10 ברק גונן

Page 11: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

אנחנו מפעילים מגדל פיקוח וצריכים למנוע

אבל כל הטייסים השתגעו . התנגשויות מטוסים

משימתנו לעקוב ... וטסים בכיוונים אקראיים

אחרי המיקום של כל המטוסים

11 ברק גונן

Page 12: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

ניצורclass בשםCrazyPlane:

12 ברק גונן

-מקובל ששם הclass יתחיל באות

גדולה

x, y- data attributes של ה-class

מיד נסביר מה זה __init__

מיד נסביר מה זה self

Page 13: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

המתודה__init__ רצה אוטומטית בכל פעם שנוצר

instance שלCrazyPlane בזיכרון המחשב

בתוכה נהוג לשים אתחול של ה-data attributes

בשפת פייתון ידועה בשםinitializer

בנאי, OOP :constructor-באופן כללי בעולם ה◦

13 ברק גונן

Page 14: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

איך פייתון יודע על איזה אובייקט להפעיל את המתודה? classים של אותו instanceהרי יכולים להיות הרבה ◦

תשובה :self מצביע על האובייקט שעליו המתודה פועלת

לכן מוסיפים למתודות את הפרמטרself

14 ברק גונן

Page 15: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

המתודהupdate_position משנה את קואורדינטות המטוס

import randomנדרש ◦

המתודהget_position מאפשרת לקרוא את מיקום המטוס

15 ברק גונן

Page 16: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

המשתנהi "רק " חי

for-בתוך לולאת ה

x ו- y חיים כל עוד

-האובייקט קייםmembers

16 ברק גונן

Page 17: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

הקוד הבא יוצר אובייקט בשםplane1 ומשתמש בו:

17 ברק גונן

מה יהיה ערכם של -חישבוxpos, ypos?

CrazyPlaneשל instanceשהוא plane1יצרנו אובייקט ◦

מופעלת אוטומטית ויוצרת משתנים CrazyPlaneשל __init__-מתודת ה◦

plane1.x, plane1.y

מחזירה את ערכי plane1שפועלת על האובייקט get_positionמתודת ◦

plane1.x ו-plane1.y

Page 18: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

ל-class יש משתניםx, y

האם תקין לכתוב כך בתוכנית הראשית?

המשתנים . כןx, y אינם המשתנים

plane1.x ו-plane1.y , ששייכים לאובייקט

plane1

()idאין להם את אותו ◦

לא ישתנה plane1.xאז xאם נשנה את ◦

18 ברק גונן

Page 19: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

תוצאת ההרצה:

19 ברק גונן

מסמן המשך \התו

בשורה הבאה (לא הכרחי)

Page 20: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

כיתבוclass של החיה האהובה עליכם(Cat, Dog etc)

הוסיפו ל-class מתודת__init__ שתכלול:

(*Kermitלדוגמה )שם החיה ◦

(0-מתחיל מ)גיל החיה ◦

הוסיפו ל-class מתודות: ◦birthday- 1-תעלה את הגיל ב

◦get_age- ערך החזרה הוא גיל החיה

בהמשך נלמד איך לאפשר לתת שם שונה לכל חיה*

20 ברק גונן

Page 21: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

כעת נלמד לבנותclass

:משופר "מוסתרים"ניצור משתנים ◦

למודול class-נהפוך את ה◦

importשניתן לייבא עם

נלמד לקבוע ערכים התחלתיים ◦ class-לאובייקט חדש ב

ניצור פקודת הדפסה מיוחדת ◦ שלנו class-ל

-ו accessorניצור מתודות ◦

mutator

21 ברק גונן

Page 22: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

קטע הקוד הבא דורס את נתוני המיקום של המטוס

התוצאה עלולה להיות התנגשות קטלנית, בעולם האמיתי

22 ברק גונן

Page 23: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

אז איך אפשר למנוע טעויות שיגרמו להתנגשות מטוסים?

"את המשתנים בעזרת תחילית " נסתיר__

◦__x

◦__y

23 ברק גונן

Page 24: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

כעתx ו-y ממי שכותבים קוד שמשתמש ב* נסתרים-class שלנו

לפני:

אחרי:

24 ברק גונן

מיד נראה –עדיין ניתן לגשת אליהם *

Page 25: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

בשפות עיליות ישנו מושגprivate

class-משתנים או מתודות שאי אפשר לגשת אליהם מחוץ ל◦

יש דרך גישה נסתרת: פייתון שפה מיוחדת...

25 ברק גונן

Page 26: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

מה יקרה כשנבצעdir על אובייקטcrazy_plane?

"משתנים" נגלה :

בידקו מה מבצעת הפקודה:

26 ברק גונן

Page 27: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

אז איך ניגשים למשתנים של אובייקט? מתאימותהמתכנת צריך לדאוג למתודות ◦

27 ברק גונן

Accessor- מתודה שמאפשרת קריאה

”get“-נהוג שהשם מתחיל ב◦

מאפשרת קריאת המיקום, get_positionהמתודה : דוגמה◦

Mutator- מתודה שמאפשרת שינוי

”set“-נהוג שהשם מתחיל ב◦

שמשנה את המיקום set_positionאפשר לממש מתודה בשם ◦

Page 28: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

יש טיעונים בעד ונגדaccessor, mutator

חשוב להכיר את השיטות, לא נכריע בדיון מיקום של -לדוגמה) members-שליטה בערכים של ה -בעד◦

(מטוס לא יהיה שלילי

קוד מסובך יותר –נגד ◦

28 ברק גונן

Page 29: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

נוכל לשמור את ה-class (מודול)שכתבנו בקובץ נפרד

( לדוגמה)שם הקובץcrazy_plane.py

29 ברק גונן

class-הקוד של ה

הסרנו , נותר זהה main-את ה

Page 30: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

נבצע לו , כדי להשתמש במודולimport בקובץ הראשי-

30 ברק גונן

class-שם ה (הקובץ)שם המודול

Page 31: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

ניתן לעשותimport למודול בדרכים נוספות:

שאנחנו רוצים class-לייבא את ה◦

שבקובץ classes-לייבא את כל ה◦

כעת נוכל לכתוב קוד מקוצר:

31 ברק גונן

אין . בלבדclass -שם ה

.צורך בשם המודול

Page 32: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

וחלק מהמטוסים 5,5פתחנו שדה תעופה נוסף במיקום

ממריאים ממנו

נאפשר ל-CrazyPlane לקבל מיקום התחלתי

32 ברק גונן

Page 33: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

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

33 ברק גונן

Page 34: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

לפעמים נרצה שאובייקט יקבל ערך ברירת מחדל

הקוד הבא מכניס את ערכי ברירת המחדל אם לא הועבר

:פרמטר

34 ברק גונן

Page 35: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

נלמד איך להדפיס בקלות מידע של אובייקט קסם"נוסיף מתודת "__str__ ל-class:

נבצע בתוכניתprint:

נסו בעצמכם!

35 ברק גונן

Page 36: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

אפשר ליצור מכלclass אובייקטים רבים

כל אובייקט חייב שם ייחודי

אובייקטים ומאתחל אותם 4הקוד הבא יוצר:

36 ברק גונן

שימוש בערך ברירת המחדל

Page 37: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

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

:נוכל לבצע עליהם פעולות בלולאה

37 ברק גונן

Page 38: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

שפרו את ה-class של החיה :שיצרתם

למודול ועשו לו class-היפכו את ה◦import

הסתירו את שם החיה ואת הגיל שלה ◦ (__: תזכורת)אפשרו לקבוע את שם החיה בזמן יצירת ◦

האובייקט (setמתודת )אפשרו לשנות את שם החיה ◦אפשרו לקרוא את שם החיה ואת הגיל ◦

(getמתודות )החיה printי "אפשרו הדפסת פרטי החיה ע◦

(__str__מתודת ) __repr__ממשו את מתודת : לימוד עצמי◦

38 ברק גונן

Page 39: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

עליכם למנוע התנגשות מטוסים המרחב האווירי שלכם הוא ריבוע

10X10בגודל 4 מטוסים מסוגCrazyPlane

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

המטוסים

פחות מ)אם שני מטוסים מתקרבים-עם turnשילחו הוראת ( משבצות 2

קואורדינטה סמוכה למיקום המטוסיכול לקבל [1,2]-לדוגמה מטוס שנמצא ב◦

[1,3]-פקודה לעבור ל

מטוס שקיבל הוראתturn ישנה את מיקומו בהתאם

39 ברק גונן

Page 40: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

לעיתיםclass הוא סוג ספציפי שלclass

:אחר חתול הוא חיה◦

מכונית היא כלי תחבורה◦

חולצה היא פריט לבוש◦

נוכל ליצורclass ( מקבל בירושה)שיש לו

אחר ועוד classאת כל התכונות של

תכונות מיוחדות לו

40 ברק גונן

Page 41: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

ה-class היורש נקראsubclass

ה-class שיורשים ממנו נקרא

superclass

Teacher ו-Student הם

subclasses של ה-

superclass “Person”

Cat ו-Dog הםsubclasses

"superclass "Animal-של ה

41 ברק גונן

Page 42: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

ב-Person נשמר השם והגיל של האדם

42 ברק גונן

Page 43: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

נוסיףaccessors

mutators-ו

nameלמשתנים

:age-ו

43 ברק גונן

Page 44: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

בבית הספר יש מורים ותלמידים

גיל ושכר, למורים יש שם◦

וממוצע ציונים, גיל, לתלמידים יש שם◦

יש לנו כברclass שמכיל שם וגיל

?האם אפשר להשתמש בו◦

כמובן נגדיר יחס ירושה:

44 ברק גונן

-מציין ירושה מPerson

Page 45: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

ניצורclass שאין בו כלום

מה יודפס אם נריץ את שורות הקוד הבאות?

חישבו מדוע?

45 ברק גונן

Person Tal is 20 years old

Page 46: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

אנחנו רוצים ש-Teacher יהיהPerson עם שכר:

46 ברק גונן

-מציין ירושה מPerson

אתחול של Person

הוספת מידע

ספציפי של Teacher

ערכי ברירת

מחדל של Teacher

Page 47: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

מה כעת יודפס אם נריץ את שורות הקוד הבאות?

ומה יודפס אם לא נשתמש בערכי ברירת המחדל?

47 ברק גונן

Person Daniel is 30 years old

Person Barak is 40 years old

Page 48: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

אפשר לקרוא ל-superclass בלי לכתוב את :השם שלו

צריך להוסיף ל-superclass ירושה מ-object

מתי זה שימושי? superclass-כשלא ידוע לנו מי ה◦

נרצה לקרוא לפונקציה שהיורש דרס◦

48 ברק גונן

Page 49: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

צרו“Student” שיורש מ-“Person”

קבעו ערכי ברירת מחדל כרצונכם◦

grade__שלו את __init__-הוסיפו ל◦

: grade__-הוסיפו ל◦

accessor

mutator

49 ברק גונן

Page 50: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

נפעיל אתsay() על אובייקט

:Teacherמסוג

נרצה שהמורה יאמר משהו

ייחודיועדיין יירש את כל יתר ... ◦

Personהתכונות של

50 ברק גונן

Page 51: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

בתוךTeacher "נדרוס "

של sayאת המתודה

Person :

51 ברק גונן

Page 52: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

כעת מה יקרה אם נפעיל אתsay על

?Teacherאובייקט מסוג

נעדכן גם את מתודת ה-__str__ כך

:Teacher-שתהיה ייחודית ל

52 ברק גונן

פונה subclassשימו לב איך

למשתנים מוסתרים של superclass

Page 53: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

בבית הספר המעולה של נווה חמציצים

נפתחה מגמת סייבר

אובייקט מסוגCyberStudent הוא

:אך כולל גם Studentכמו

ציון בסייבר◦

◦accessor ו-mutator לציון הסייבר

53 ברק גונן

Page 54: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

מנהל בית הספר מבקש שכל תלמיד שהציון שלו בסייבר "”!Wowיקבל הודעת 80-גבוה מ

התלמידים נמצאים ב כל-list שנקראstudents

האם הקוד הבא יעבוד היטב?

...ל-Student אין מתודהget_cyber_grade()

54 ברק גונן

Page 55: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

הפונקציהisinstance מאפשרת לבדוק

כלשהו class-אם אובייקט שייך ל

Falseאו Trueמחזירה ◦

superclass-אובייקט תמיד שייך ל -שימו לב◦

שלו class-של ה

isinstance(object_name, class_name)

CyberStudentכעת ניתן לבדוק שאובייקט הוא מסוג ◦

שלו cyber_grade-לפני שמנסים לקרוא ל

55 ברק גונן

Page 56: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

נתון:

מה תהיה התוצאה בכל אחת מהשורות הבאות:

56 ברק גונן

Page 57: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

הגדירוclass בשםBigThing

מקבלת אובייקט כלשהו◦

:sizeמתודה ◦

מחזירה אותו -אם האובייקט הוא מספר

מילון / אם האובייקט הוא רשימה / שלו lenמחזירה את -מחרוזת

57 ברק גונן

הגדירוclass בשםBigCat BigThing-יורש מ◦

מקבל כפרמטר גם משקל◦

תחזיר 20< אם המשקל , ”Fat“תחזיר size, 15< אם המשקל ◦

“Very fat” , אחרת“OK”

Page 58: OOP םימצע החנומ תונכת : רועיש · 2017. 7. 1. · יאנב constructor :OOP ה םלועב יללכ ... ןנוג קרב 20 . class תונבל דמלנ ... ןנוג

58 ברק גונן