כיצד להסביר מושגי תכנות מונחים עצמים לילד בן 6

שמתם לב כיצד אותן שאלות קלישתיות תמיד נשאלות בראיונות עבודה - שוב ושוב?

אני בטוח שאתה יודע למה אני מתכוון.

לדוגמה:

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

או, גרוע מכך:

מה אתה מחשיב כחולשה הגדולה ביותר שלך?

אוף ... תן לי הפסקה. אני רואה במענה על שאלה זו חולשה גדולה! בכל מקרה, לא הנקודה שלי.

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

כשאתה עונה, עליך להיזהר מכיוון שאתה עלול לחשוף משהו שאתה מאוחר יותר מתחרט עליו.

היום אני רוצה לדבר על סוג שאלה דומה בעולם התכנות:

מהם העקרונות העיקריים של תכנות מונחה עצמים?

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

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

  1. האם המועמד התכונן לראיון זה?

    נקודות בונוס אם אתה שומע תשובה מיד - זה מראה גישה רצינית.

  2. האם המועמד עבר את שלב ההדרכה?

    הבנת העקרונות של תכנות מונחה עצמים (OOP) מראה כי חרגת מהעתקה והדבקה מתוך מדריכים - אתה כבר רואה דברים מנקודת מבט גבוהה יותר.

  3. האם ההבנה של המועמד עמוקה או רדודה?

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

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

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

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

כימוס

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

אנקפסולציה מושגת כאשר כל אובייקט שומר על מצבו הפרטי , בתוך כיתה. לאובייקטים אחרים אין גישה ישירה למצב זה. במקום זאת, הם יכולים להתקשר רק לרשימת פונקציות ציבוריות - שנקראות שיטות.

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

נניח שאנחנו בונים משחק סימס זעיר. יש אנשים ויש חתול. הם מתקשרים זה עם זה. אנו רוצים להחיל אנקפסולציה, ולכן אנו עוטפים את כל ההיגיון "החתול" לאCatמעמד. זה עשוי להיראות כך:

כאן "מצבו" של החתול הוא המשתנים הפרטייםmood , hungryו energy. יש לו גם שיטה פרטית meow(). זה יכול לקרוא לזה מתי שהוא רוצה, השיעורים האחרים לא יכולים להגיד לחתול מתי למיאו.

מה הם יכולים לעשות מוגדר בשיטות הציבוריותsleep() , play()ו feed(). כל אחד מהם משנה את המצב הפנימי איכשהו ועשוי להפעיל meow(). לפיכך, נעשית הכריכה בין המדינה הפרטית לשיטות הציבוריות.

זה אנקפסולציה.

הַפשָׁטָה

הפשטה יכולה להיחשב כהרחבה טבעית של הקפסולציה.

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

הפשטה היא מושג שמטרתו להקל על בעיה זו.

יישום הפשטה פירושו שכל אובייקט צריך לחשוף רק מנגנון ברמה גבוהה לשימוש בו.

מנגנון זה אמור להסתיר פרטי יישום פנימיים. זה אמור לחשוף רק פעולות שרלוונטיות לאובייקטים האחרים.

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

רצוי שמנגנון זה אמור להיות קל לשימוש ולעתים רחוקות להשתנות לאורך זמן. חשוב על זה כעל קבוצה קטנה של שיטות ציבוריות שכל כיתה אחרת יכולה לקרוא לה מבלי "לדעת" כיצד הן עובדות.

דוגמה נוספת לחיים האמיתיים של הפשטה?

חשוב כיצד אתה משתמש בטלפון שלך:

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

שינויים ביישום - למשל עדכון תוכנה - לעיתים נדירות משפיעים על ההפשטה בה אתה משתמש.

יְרוּשָׁה

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

אך האם אתה יודע מהי בעיה נפוצה נוספת בתכנון OOP?

אובייקטים לעיתים קרובות דומים מאוד. הם חולקים היגיון משותף. אבל הם לא לגמרי אותו דבר. אוף ...

אז איך נשתמש שוב בהיגיון המשותף ונפיק את ההיגיון הייחודי לכיתה נפרדת? אחת הדרכים להשיג זאת היא ירושה.

המשמעות היא שאתה יוצר כיתה (ילד) על ידי נגזרת מכיתה אחרת (הורה). בדרך זו, אנו יוצרים היררכיה.

כיתת הילדים עושה שימוש חוזר בכל התחומים והשיטות של כיתת ההורים (חלק משותף) ויכולה ליישם את החלק שלה (חלק ייחודי).

לדוגמה:

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

בדרך זו, כל כיתה מוסיפה רק את הדרוש לה תוך שימוש חוזר בהיגיון משותף עם כיתות ההורים.

רב צורתיות

אנחנו במילה המורכבת ביותר! משמעות פולימורפיזם היא "צורות רבות" ביוונית.

אז אנחנו כבר יודעים את כוחה של הירושה ומשתמשים בה בשמחה. אבל מגיעה הבעיה הזו.

נגיד שיש לנו כיתת הורים וכמה כיתות ילדים שעוברות בירושה ממנה. לפעמים אנו רוצים להשתמש באוסף - למשל רשימה - המכיל שילוב של כל הכיתות הללו. או שיש לנו שיטה המיושמת עבור כיתת ההורים - אך נרצה להשתמש בה גם לילדים.

ניתן לפתור זאת באמצעות פולימורפיזם.

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

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

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

התבונן בסקיצה של יישום דמויות גיאומטריות. הם עושים שימוש חוזר בממשק משותף לחישוב שטח הפנים וההיקף:

לאחר שלוש הדמויות הללו בירושת ההורה Figure Interfaceמאפשר לך ליצור רשימה של מעורבות triangles, circles, ו rectangles. והתייחס אליהם כמו לאותו סוג של אובייקט.

ואז, אם רשימה זו מנסה לחשב את המשטח עבור אלמנט, השיטה הנכונה נמצאת ומבוצעת. אם האלמנט הוא משולש, משולשCalculateSurface()נקרא. אם זה מעגל - אז מעגלCalculateSurface()נקרא. וכן הלאה.

אם יש לך פונקציה הפועלת עם דמות באמצעות הפרמטר שלה, אינך צריך להגדיר אותה שלוש פעמים - פעם למשולש, מעגל ומלבן.

אתה יכול להגדיר את זה פעם אחת ולקבל א Figureכוויכוח. בין אם עוברים משולש, מעגל או מלבן - כל עוד הם מיישמים CalculateParamter(), הסוג שלהם לא משנה.

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

אם אתה עדיין מוצא משהו שקשה להבין - אל תהסס לשאול בתגובות למטה.

מה הלאה?

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

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

המשך לעקוב.