אבסטרקציה ב-OOP: הסתרת מורכבות
אתם נוהגים במכונית על ידי לחיצה על דוושות וסיבוב ההגה. אתם לא צריכים להבין את הזרקת הדלק או את תנועת הבוכנות. המכונית מסתירה מכם את הפרטים הללו. אתם משתמשים רק בממשק פשוט.
תוכנה עובדת באותו אופן.
חשבו על שליחת אימייל. הקוד שלכם נראה כנראה כך:
emailService.send(email);
זה נראה פשוט. מאחורי הקלעים, המערכת מבצעת משימות רבות:
- מאמתת את הכתובת.
- מתחברת לשרת SMTP.
- מבצעת אימות למשתמש.
- בונה את ההודעה.
- מטפלת בניסיונות חוזרים.
- מתעדת שגיאות.
אתם לא צריכים לראות את השלבים הללו. אכפת לכם רק שהאימייל יישלח.
אם תחשפו כל שלב, תיצרו בעיות. דמיינו שאילו כל מפתח היה צריך לקרוא ידנית ל:
connect()authenticate()buildMessage()sendMessage()disconnect()
זה הופך את הקוד שלכם לשברירי. אם תשנו את ספק האימייל שלכם, תצטרכו לעדכן כל מקום באפליקציה. הקוד שלכם הופך להיות תלוי בצורה הדוקה במימוש.
אבסטרקציה פותרת זאת.
אבסטרקציה חושפת מה אובייקט עושה. היא מסתירה איך הוא עושה זאת. אתם מראים למשתמש רק את מה שהוא צריך.
המשתמש מתקשר עם ממשק יציב. לא אכפת לו מהלוגיקה של האימות שלכם או מאסטרטגיית הניסיונות החוזרים שלכם. הפרטים הללו נשארים מוסתרים.
אנשים רבים מבלבלים בין אבסטרקציה לאנקפסולציה. הנה ההבדל:
אנקפסולציה שואלת: מי יכול לשנות את המצב של האובייקט הזה? היא מגנה על הנתונים.
אבסטרקציה שואלת: אילו פרטים המשתמש צריך לראות? היא מסתירה מורכבות.
הן עובדות יחד כדי לבנות מערכות טובות יותר.
בהמשך, נדון בירושה. נראה כיצד לטפל בהתנהגות משותפת מבלי לכתוב את אותו הקוד פעמיים.