משתנים פרטיים ומוגנים

שלום לכולם!
תודה על הקורס המאלף הזה!!
נהנה מכל רגע!! :slight_smile:

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

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

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

  1. תכונה פרטית – אסור לערוך/לגשת אליה, ותכונה לא פרטית – מותר לערוך/לגשת אליה.
  2. מותר לקרוא לפעולות לא פרטיות, אסור לקרוא פעולות פרטיות.

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

בקצרה:

  1. השם של תכונה/פעולה פרטית יכול להשתנות בעתיד
  2. הלוגיקה של תכונה/פעולה פרטית יכולה להשתנות בעתיד
  3. המתכנת משתמש בזה לרוב למטרות הפשטה – לא אמור לעניין אותך אם רשימת אנשי הקשר שמורה ברשימה, במילון או במבנה חדש מוזר שיצרתי בשם “מנגו”. אתה מנסה לתפעל פיצ’ר של אנשי קשר, וכל הדברים האלו הם פרטי מימוש שאתה לא צריך לדעת. הנה תיעוד לפעולות A, B ו־C שבהן אתה יכול להשתמש כדי לנהל את רשימת אנשי הקשר.
2 לייקים

תודה רבה!
הבנתי!
ושאלה אחרונה בנושא:
אתה יכול להסביר / לנמק מדוע בחרת להשתמש
במשתנה אנשי הקשר כפרטי? (ולא כמשתנה רגיל)

לא חשבתי שנכון שהמשתמש ידע על צורת המימוש של contacts, זה implementation details ואם ארצה לשנות את זה בעתיד למילון זה לא אמור להפריע למשתמש (+ אני לא צריך לתת לו דין וחשבון על backward compitability)