תכנות מונחה עצמים או OOP (Object Oriented Programming) היא גישה תכנותית שבאה לחקות את החשיבה האנושית, ובדיוק כפי שבתפיסה שלנו אנו מחלקים אובייקטים שונים לקטגוריות שונות, כך גם בתכנות מונחה עצמים
אנו כבני האדם נוטים לחלק את כל מה שבעולמנו למחלקות כאשר כל עצם שייך לקטגוריה.
אם נתאר בעל חיים מסוג מסוים, נוכל לתאר את מה שייחודי לו, כי ראש או עיניים הן תכונות משותפות לכל בעלי החיים.
בהתאם לכך, לפי שיטת תכנות מונחה עצמים אנו מבצעים מניפולציות על עצמים שהם ממחלקות שונות.
גישה זו תורמת לנו לסדר וארגון בקוד שלנו וכתוצאה מכך גם הסיכוי להיתקל בשגיאות קטן.
בתכנות מונחה עצמים משתמשים במחלקה אשר מכילה משתנים ופונקציות.
ניתן לומר כי המשתנים מאפיינים את המחלקה והפונקציות הם היכולות שלה.
חיקוי החשיבה האנושית
אחד מהעקרונות הבולטים של תכנות מונחה עצמים היא שיטה המחקה את החשיבה האנושית ואת אופן הטיפול שלנו בבעיות יום יומיות.
סידור וארגון המידע בצורה אשר דומה לזו של המוח האנושי מקלה על המתכנת לשלוט בכמות המידע שבו הוא מטפל.
זה גם מאפשר לסדר מידע זה בצורה נוחה ויעילה יותר מאשר בתכנות פונקציונלי\פרוצדורלי בהיבט זה.
באופן כזה ניתן לשלוף מידע ולבצע עליו אופרציות שונות ככל שנרצה ולנהל אותו בצורה מאוד יעילה.
כמו כן, הקוד כתוב בצורה שסגורה לשינויים ופתוחה להרחבות מה שגם מונע שגיאות.
ניתן לומר כי זהו סטנדרט של התעשייה בפרויקטים גדולים אשר עובדים עליהם מספר מתכנתים, תכנות מונחה עצמים מתאים במיוחד למצבים כאלו ואף הכרחי.
עקרונות התכנות מונחה העצמים
יש מספר עקרונות שעליהם מתבסס התכנות מונחה העצמים, כאשר נעבור על הקונספטים המרכזיים:
ירושה – Inheritence
ירושה זה מצב שבו יש מחלקת בסיס שלה תת מחלקה שיורשת ממנה את היכולות והמאפיינים.
למרות שהמחלקה היורשת היא תת מחלקה של מחלקת הבסיס, נוכל להתייחס אליה באופן בלעדי.
כך שבפשטות ניתן לומר שירושה זה ליצור מחלקה חדשה ממחלקה קיימת.
הפשטה – Abstraction
גישה זו מאפשרת למתכנת להתעסק עם הנתונים הרלוונטיים למחלקה.
אנחנו יודעים שלכל בעלי החיים יש ראש ועיניים.
כאשר נבנה את מחלקת "כלב" נוכל להתעסק במאפיינים שייחודים לכלב, ולא בתכונות כמו ראש ועיניים.
דוגמא נוספת שניתן לתאר היא שבמפעל לרהיטים יש מחלקת רהיטים לסלון שממנה יורשת מחלקת שולחנות.
המתכנת יוכל להתעסק עם המאפיינים שייחודיים רק לשולחנות משום שמאפיינים של כלל הרהיטים כתובים כבר במחלקה האבסטרקטית המורישה.
רב צורתיות – Polymorphism
נחזור לרגע לדוגמת מחלקת – "בעלי חיים" שהיא מחלקת בסיס.
המחלקות "כלב", "חתול" ו-"סוס" הם תתי מחלקות של מחלקת "בעלי חיים".
לכלב ולחתול יש יכולת לרוץ, אבל כל אחד מהם רץ בצורה אחרת.
כלומר שהם יוכלו לממש את הפונקציה "ריצה" בצורה שונה למרות שהם חולקים מחלקת בסיס משותפת .
כך שניתן לומר כי ה-Polymorphism מאפשר לנו לנהל מגוון של תבניות בתוך מחלקת בסיס אחת.
הכמסה – Encapsulation
הכמסה היא למעשה הסתרה של "הקוד הקשה" והחצנה של "הקוד הפשוט".
לשם ההדגמה ניקח מכשיר פשוט מחיי היום יום – מחשבון.
מה שאנחנו רואים זה את הכפתורים וברור לכולנו איך להשתמש בהם, הרי זה מחשבון לא?
ובכן בתוך הקופסא יש מערכת שמחשבת את מה שאנחנו מבקשים ממנה והיא מוכמסת.
מה שהמשתמש לא רואה – זה כיצד מתבצע חישוב זה.
דוגמא נוספת היא שהתוכנית כתובה כך שכל המידע הלוגי במחלקה מוכמס מהפונקציה הראשית שמפעילה את התוכנית, וניתן להשתמש במידע ובפונקציות של המחלקה בקלות.
המתכנת יצטרך ליצור מופעים של המחלקה והוא יוכל לבצע מניפולציות על מופעים אלו.
מופע – Instance
בתכנות מונחה עצמים אנו מייצרים מופעים של מחלקות שנקראים אובייקטים (Objects).
אם ניקח לדוגמא את מחלקת רכב פרטי כאשר המתכנת יוצר מופע של אותו הרכב הוא לא צריך לייצר רכב מכלום, הרי יש את מחלקת רכב פרטי שמכילה את כל הפרטים (הפונקציות והמאפיינים) של הרכב, והוא יוכל ליצור רכב מדגם מסוים לפי דרישות הלקוח מבלי ליצור מאפס, כך שאנו יכולים לראות במחלקה גם מעין שרטוט או תוכנית (blueprint) שבהתבסס עליה אנו יוצרים מופעים.
ובדיוק כך מחליף סדר וארגון יעיל את הקוד הרפטיבי, המסורבל והארוך של התכנות הפונקציונלי\פרוצדורלי שבו היו משתמשים בתעשייה לפני שטכנולוגיה זו נכנסה לשימוש נרחב בעולם.
במקום רצף הפקודות הארוך והפחות "נקי" עם המון קוד שחוזר על עצמו, המתכנת יוצר מחלקה מרכזית לכל דבר, וממנה הוא מייצר בקלות את האובייקטים שהוא צריך אשר עליהם הוא מבצע את המניפולציות או שולף נותנים שהוא צריך.
אז למה כדאי לי להשתמש ב-OOP?
לסיכום ניתן לומר כי תכנות מונחה עצמים גם עוזר לנו בקוד בכך שהוא מדמה את העולם האמתי, ומעבר לכך הוא גם עוזר לנו להפריד בין מאפיינים ליכולות, ובכך הוא עוזר לנו לסדר ולנהל את הקוד שלנו בצורה יעלה וטובה יותר.
אך יש לזכור כי לכל בעיה יש פתרון מתאים, ותכנות מונחה עצמים יכול להיות פתרון מעולה להרבה מצבים שמתכנת עלול להיתקל בהם, אך יש מקרים שבהם התכנית שאנחנו צריכים לכתוב מאוד פשוטה, וזה יהיה מיותר לכתוב אותה בגישת – OOP.