Encapsulation vs Abstraction
Encapsulation והפשטה הם שני מושגים שונים אך קשורים שנמצאים בשפות OOP (Object Oriented Programming). Encapsulation הוא הרעיון של שילוב נתונים והתנהגות יחד כישות אחת. מצד שני, הפשטה היא תהליך של הצגת איך ישות מתנהגת\נראית בניגוד לאופן יישום.
מה זה Encapsulation?
Encapsulation הוא תהליך של גלישת נתונים ותפעול שפועלים עליהם לישות אחת. זה בעצם אומר שכדי לגשת לנתונים, יש להשתמש בשיטות מסוימות מוגדרות מראש.במילים אחרות, נתונים מובלעים אינם נגישים ישירות. זה מוודא כי שלמות הנתונים נשמרת מכיוון שהמשתמש אינו מסוגל לגשת ישירות ולשנות את הנתונים כרצונו. המשתמשים יקבלו או יגדירו את ערכי הנתונים רק באמצעות השיטות הזמינות לציבור למשתמשים. שיטות אלו מספקות בדרך כלל אימות נתונים כך שרק הנתונים בפורמט המתאים יורשו להיות מוכנסים לשדות. לכן, היתרונות של Encapsulation הם משולשים. באמצעות Encapsulation, המתכנת יכול להפוך שדות של מחלקה לקריאה בלבד או לכתיבה בלבד. שנית, לכיתה יכולה להיות שליטה מוחלטת על מה שמאוחסן בשדות שלה. לבסוף, המשתמשים בכיתה אינם צריכים לדאוג כיצד מאוחסנים הנתונים שלו. ב-Java, המתכנת יכול להכריז על כל משתני המופע כפרטיים ולספק שיטות קבל והגדר (שהן ציבוריות) כדי לגשת ולשנות את השדות הפרטיים.
מה זה הפשטה?
Abstraction הוא תהליך ההפרדה בין פרטי המצגת מפרטי היישום.זה נעשה כדי שהמפתח ישוחרר מפרטי היישום המורכבים יותר. במקום זאת, המתכנת יכול להתמקד במצגת או בפרטי ההתנהגות של הישות. במילים פשוטות, הפשטה מתמקדת כיצד ניתן להשתמש בישות מסוימת ולא כיצד היא מיושמת. הפשטה בעצם מסתירה את פרטי ההטמעה, כך שגם אם מתודולוגיית ההטמעה משתנה עם הזמן, המתכנת לא יצטרך לדאוג כיצד זה ישפיע על התוכנית שלו. מערכת יכולה להיות מופשטת במספר רבדים או רמות. לדוגמה, שכבות הפשטה ברמה נמוכה יחשפו פרטי חומרה, בעוד שהפשטה ברמה גבוהה תחשוף רק את ההיגיון העסקי של הישות. ניתן להשתמש במונח הפשטה כדי להתייחס גם לישות וגם לתהליך וזה מוביל לבלבול מסוים. כתהליך, הפשטה פירושה שליפת פרטים חיוניים תוך התעלמות מהפרטים הלא חיוניים של פריט או קבוצת פריטים, בעוד כישות, הפשטה פירושה מודל או השקפה של ישות עם הפרטים החיוניים בלבד.ב-Java, המתכנת יכול להשתמש במילת המפתח אבסטרקטית כדי להכריז על מחלקה כישות אבסטרקטית, המייצגת את המאפיינים המהותיים של ישות בעולם האמיתי.
מה ההבדל בין Encapsulation להפשטה?
למרות ש-Encapsulation והפשטה הם מושגים קשורים מאוד שנמצאים בשפות תכנות מונחה עצמים, יש להם הבדלים עיקריים. הפשטה היא טכניקה, שעוזרת לנו לזהות מה צריך להיות גלוי ומה צריך להיות מוסתר. אנקפסולציה היא הטכניקות לאריזת המידע כך שתראה את מה שצריך להיות גלוי ומסתירה את מה שצריך להסתיר. במילים אחרות, ניתן לזהות אנקפסולציה כצעד אחד מעבר להפשטה. בעוד שהפשטה מצמצמת אובייקט בעולם האמיתי למאפיינים המהותיים המגדירים שלו, אנקפסולציה מרחיבה את הרעיון הזה על ידי מודלים וקישור של פונקציונליות זו של אותה ישות.