מחלקות ב-C

dove2

New member
עקרון האנקפסולציה ועקרון הציבוריות

לאנקפסולציה יש משמעות של איגוד, ריכוז ביחד במקום אחד. המילה (לפחות האנגלית) איננה מרמזת על אלמנט של הסתרה. האופנה שצריך להסתיר בכזו קנאות היא יחסית חדשה, ואולי ברוח ג'אווה או C# שם מקובל שכל משתנה מקבל getter ו- setter. אם תסתכל על ספרי לימוד מלפני עשור ל C++ תראה שהגישה היתה הרבה פחות פנאטית, והיה מאוד לגיטימי לגשת ישירות למשתנים ולעדכן אותם (גם בג'אווה זה היה ככה). היום זה נתפס קצת כלא אלגנטי ומצופה שבעצם כל המשתנים יהיו פרטיים, ומה שאתה צריך שיהיה ציבורי תעשה לו מתודות get/set מתאימות. מאחר ומתודות כאלה הן על פי רוב inline אזי כל נושא ההסתרה הזה הוא די מיותר ומבחינת הקומפיילר זה כאילו שמת הצבה ישירה למשתנים של המחלקה. היתרון העיקרי של זה הוא פדגוגי (בכל זאת יתרון משמעותי ולא הייתי מזלזל בו). לסיכום- עקרון האנקפסולציה הוא ותיק יותר מסוגיית הציבוריות. הקישור האסוציאטיבי שיש לך בין שני העקרונות מרמז על התקופה בה התחנכת ולמדת C++.
 

selalerer

New member
אחת המשמעויות של encapsulate הוא לה

כניס ל-capsule, דווקא המשמעות באנגלית היא שמביאה לי את האסוסיאציה להסתרה, לא שזה ממש חשוב.
 

zbobo

New member
אבל אתה פועל לפי העבר או העתיד?

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

dove2

New member
תמיד היתה חשיבות ל"הסתרה"

אבל זה לא קשור לקונספט של אנקפסולציה. פעם היו עושים struct ככה-
/* Dear user of this package, Do NOT touch any of the members starting with underscore unless you really knows what you are doing. */ struct Whatever { /* public */ int visible; int known; int accessible; /* private */ int _hidden; int _secrent; int _limited; };​
וראה איזה פלא, למרות שהקומפיילר לא הקפיד, אנשים לא נגעו בחברים ה"פרטיים" בלי אכיפה של הקומפיילר. בדר"כ בחרו תחילית מעצבנת כמו קו-תחתי כדי שמי שחוטא לא יגיד "לא שמתי לב". מצד שני, כבר נתקלתי במקרים של קוד C++ שהיה במחלקה חבר פרטי ומישהו אינטליגנט רצה לקבוע לו ערך, אז הוא פשוט חישב את האופסט המתאים יחסית ל this של האובייקט ושם בתא הזיכרון ערך מתאים. כמובן שהכל היה חוקי אל מול מוסכמות השפה והקומפיילר לא כעס. אז גם את האכיפה הזו אפשר לעקוף די בקלות אם רק רוצים. בסופו של דבר סוגיית הציבוריות היא בעיקר עניין של מוסכמה, וזו היתה קיימת עוד הרבה לפני C++.
 
למעלה