מה זה בדיוק תכנות מונחה עצמים?
תכנות מונחה עצמים (Object Oriented Programming) מחקה את החשיבה האנושית. אנו כבני האדם נוטים לסווג את כל מה שבו בקטגוריות. כל עצם בעולם נמצא בקטגוריות מסוימות, שחוסכות לנו את הצורך לציין פרטים שמשותפים לקטגוריות הללו. אם נתאר מכונית מדגם מסוים, נוכל לתאר רק את מה שייחודי לה, כי תכונות כמו מנוע, או 4 גלגלים, ברורות מעצם זה שהיא משתייכת לקטגוריית המכוניות.
בדומה לכך, התכנות מונחה העצמים במדעי המחשב מאופיין בביצוע פעולות על עצמים ממוחשבים שנקראים "אובייקטים" (Objects). זהו סגנון תכנות יעיל מאוד, המאפשר קוד מאורגן יותר, קצר משמעותית ופחות חוזר על עצמו ומשום כך גם חסכוני בקידוד ובשגיאות אפשריות.
שפות כמו ++C ו-TypeScript הציעו הרחבות מבוססות אובייקטים לשפות כמו C ו-JavaScript, מה שהפך את ההגירה אליהן קלה יחסית, מהשפות חפרוצדורליות, חסרות האובייקטים.
בתכנות מבוסס אובייקטים, שבראשי תיבות קוראים לו OOP, מקבצים את כל המשתנים והפונקציות של עניין מסוים אל תוך מחלקה (class).
בדומה לצורת החשיבה שלנו על העולם, האובייקטים בתכנות OOP מתייחסים ומתקשרים אחד עם השני, כשכל אובייקט מתאר מהו ומה הוא יכול לעשות, אבל הידיעה שלנו למי הוא דומה או משתייך, חוסכת הרבה מידע מיותר. אם נראה נשר בשמיים, נזהה מיד שהוא עוף ומכאן צריך רק לדעת מה מיוחד בו לעומת העופות ככלל, בעוד שכנפיים, מקור או נוצות הם ברורים מאליהם.
אבל יש עוד משהו טוב בתכנות כזה. תכנות מונחה עצמים היא שיטה המחקה את החשיבה האנושית. היא אינטואיטיבית וקרובה יותר לדרך החשיבה בה רובנו חושבים ומטפלים בבעיות שבפניהן אנו ניצבים.
למעשה, גם בתכנות וגם בחיים, סידור וארגון המידע בצורה כזו מקלים את השליטה בכמות המידע העצומה שבה אנו מוצפים ומאפשרים לסדר את המידע הזה במוחנו ובמחשב, בצורה נוחה ויעילה מאוד.
באופן כזה ניתן לשלוף ולזהות מידע בקלות, כל אימת שנרצה ולנהל אותו היטב. גם העדכונים והשינויים בקוד כזה הם פשוטים הרבה יותר ומונעים שגיאות.
ניתן לומר שבפרויקטים גדולים, המבוססים על Frameworks קיימים ומעסיקים מספר מתכנתים, הקידוד בתכנות מונחה עצמים מתאים במיוחד ואולי אף הכרחי.
כימוס (Encapsulation)- הסתרה של פרטי המימוש מהמשתמש בעצם.
מודולריות (Modularity) - מפרידים עצמים ליחידות נושא.
היררכיה, או הורשה (Inheritance) - מגדירים יחסים היררכיים בין העצמים ואובייקט יורש תכונות מהמחלקה שלו.
טיפוסיות חזקה (Strong Typing) - מניעה של בלבול או ערבוב בין טיפוסי עצמים שונים זה מזה.
בתכנות מונחה עצמים מגדירים מחלקות (Classes). לאחר הגדרת מחלקה אפשר לייצר מופעים שלה, שנקראים אובייקטים (Objects).
כך למשל מתכננים ומייצרים מטוס חדש, מחלקים ידועים ומוכרים המרכיבים אותו, שעל גבם תבוא החדשנות של הדגם החדש. איש בימינו לא מתחיל לייצר מטוס מכלום, כי יש הגדרות מוכרות ומוכחות למרכיבים העיקריים שמייצרים מטוס וממרכיבים אלה הוא ייבנה.
כך מחליף סדר וארגון יעיל את הקוד המשוטח, המסורבל והארוך של התכנות הרגיל של פעם (הפרוצדורלי למי שמכיר). במקום רצף הפקודות הענקי והמבולגן יחסית שמאפיין תכנות פשוט, עם המון קודים שחוזרים על עצמם שוב ושוב, מתכננים מחלקה מרכזית לכל דבר וממנה מייצרים בקלות את האובייקטים שנגזרים ממנה, גם עם מאפייניהם היחודיים.
עצם (Object) הוא מעין קפסולת קוד שבתוכה אנו מכניסים שילוב של מידע ופעולות. לרוב זו תהיה מחלקה (Class).
המידע במחלקה ייקרא "תכונות" (Attributes). התכונות שיוצגו הן רק אלה שרלוונטיות לפיתוח או לאפליקציה המסוימת שעליה אנו עובדים.
הפעולות באובייקט שנראות כמו פונקציות ייקראו "שיטות" או "מתודות" (methods). השיטות או המתודות הללו מתארות את מה שאובייקט במחלקה מסוגל לעשות.
ההודעות (Messages) הן מה שמניע את הפעולות. כי השיטות הן בגדר פוטנציאל ובלי הודעה לא תופעל שום שיטה.
עוד דוגמה? - בתכנות מונחה עצמים ניתן לרשום עובדים למערכת מסוימת. אבל במקום לשמור בנפרד את הנתונים של כל אחד מהם (שם, גיל, תפקיד, השכלה, התמחות וכו') ניצור אובייקט של עובד. מהמחלקה הזו נגזור המון עובדים, על מאפייניהם ותכונותיהם ועל המידע הזה נוכל לבצע פעולות שונות, כמו הדפסה, שאילתות, חיתוכים ועוד.
עוד על המחלקה בתגית מחלקות.
תכנות מונחה עצמים (Object Oriented Programming) מחקה את החשיבה האנושית. אנו כבני האדם נוטים לסווג את כל מה שבו בקטגוריות. כל עצם בעולם נמצא בקטגוריות מסוימות, שחוסכות לנו את הצורך לציין פרטים שמשותפים לקטגוריות הללו. אם נתאר מכונית מדגם מסוים, נוכל לתאר רק את מה שייחודי לה, כי תכונות כמו מנוע, או 4 גלגלים, ברורות מעצם זה שהיא משתייכת לקטגוריית המכוניות.
בדומה לכך, התכנות מונחה העצמים במדעי המחשב מאופיין בביצוע פעולות על עצמים ממוחשבים שנקראים "אובייקטים" (Objects). זהו סגנון תכנות יעיל מאוד, המאפשר קוד מאורגן יותר, קצר משמעותית ופחות חוזר על עצמו ומשום כך גם חסכוני בקידוד ובשגיאות אפשריות.
שפות כמו ++C ו-TypeScript הציעו הרחבות מבוססות אובייקטים לשפות כמו C ו-JavaScript, מה שהפך את ההגירה אליהן קלה יחסית, מהשפות חפרוצדורליות, חסרות האובייקטים.
בתכנות מבוסס אובייקטים, שבראשי תיבות קוראים לו OOP, מקבצים את כל המשתנים והפונקציות של עניין מסוים אל תוך מחלקה (class).
בדומה לצורת החשיבה שלנו על העולם, האובייקטים בתכנות OOP מתייחסים ומתקשרים אחד עם השני, כשכל אובייקט מתאר מהו ומה הוא יכול לעשות, אבל הידיעה שלנו למי הוא דומה או משתייך, חוסכת הרבה מידע מיותר. אם נראה נשר בשמיים, נזהה מיד שהוא עוף ומכאן צריך רק לדעת מה מיוחד בו לעומת העופות ככלל, בעוד שכנפיים, מקור או נוצות הם ברורים מאליהם.
יתרונות
יתרונו הגדול של תכנות OOP הוא בכך שאנו מתכנתים בו אובייקטים ומגדירים ביניהם פעולות ובכך מארגנים ומפשטים את הקוד ועושים את העבודה איתו קלה, מדויקת ויעילה יותר.
אבל יש עוד משהו טוב בתכנות כזה. תכנות מונחה עצמים היא שיטה המחקה את החשיבה האנושית. היא אינטואיטיבית וקרובה יותר לדרך החשיבה בה רובנו חושבים ומטפלים בבעיות שבפניהן אנו ניצבים.
למעשה, גם בתכנות וגם בחיים, סידור וארגון המידע בצורה כזו מקלים את השליטה בכמות המידע העצומה שבה אנו מוצפים ומאפשרים לסדר את המידע הזה במוחנו ובמחשב, בצורה נוחה ויעילה מאוד.
באופן כזה ניתן לשלוף ולזהות מידע בקלות, כל אימת שנרצה ולנהל אותו היטב. גם העדכונים והשינויים בקוד כזה הם פשוטים הרבה יותר ומונעים שגיאות.
ניתן לומר שבפרויקטים גדולים, המבוססים על Frameworks קיימים ומעסיקים מספר מתכנתים, הקידוד בתכנות מונחה עצמים מתאים במיוחד ואולי אף הכרחי.
עקרונות
הפשטה של הנתונים (Data Abstraction) - המתכנת מתרכז במאפיינים הרלוונטיים של העצם.
כימוס (Encapsulation)- הסתרה של פרטי המימוש מהמשתמש בעצם.
מודולריות (Modularity) - מפרידים עצמים ליחידות נושא.
היררכיה, או הורשה (Inheritance) - מגדירים יחסים היררכיים בין העצמים ואובייקט יורש תכונות מהמחלקה שלו.
טיפוסיות חזקה (Strong Typing) - מניעה של בלבול או ערבוב בין טיפוסי עצמים שונים זה מזה.
האובייקט
בשיטת ה-Object Oriented Programming כל דבר הוא אובייקט.
בתכנות מונחה עצמים מגדירים מחלקות (Classes). לאחר הגדרת מחלקה אפשר לייצר מופעים שלה, שנקראים אובייקטים (Objects).
כך למשל מתכננים ומייצרים מטוס חדש, מחלקים ידועים ומוכרים המרכיבים אותו, שעל גבם תבוא החדשנות של הדגם החדש. איש בימינו לא מתחיל לייצר מטוס מכלום, כי יש הגדרות מוכרות ומוכחות למרכיבים העיקריים שמייצרים מטוס וממרכיבים אלה הוא ייבנה.
כך מחליף סדר וארגון יעיל את הקוד המשוטח, המסורבל והארוך של התכנות הרגיל של פעם (הפרוצדורלי למי שמכיר). במקום רצף הפקודות הענקי והמבולגן יחסית שמאפיין תכנות פשוט, עם המון קודים שחוזרים על עצמם שוב ושוב, מתכננים מחלקה מרכזית לכל דבר וממנה מייצרים בקלות את האובייקטים שנגזרים ממנה, גם עם מאפייניהם היחודיים.
הגדרות
אם תכנות מונחה עצמים מתמקד בפיתוח של עצמים וביצירת פעולות ביניהם, אז כדאי שנגדיר כמה דברים:
עצם (Object) הוא מעין קפסולת קוד שבתוכה אנו מכניסים שילוב של מידע ופעולות. לרוב זו תהיה מחלקה (Class).
המידע במחלקה ייקרא "תכונות" (Attributes). התכונות שיוצגו הן רק אלה שרלוונטיות לפיתוח או לאפליקציה המסוימת שעליה אנו עובדים.
הפעולות באובייקט שנראות כמו פונקציות ייקראו "שיטות" או "מתודות" (methods). השיטות או המתודות הללו מתארות את מה שאובייקט במחלקה מסוגל לעשות.
ההודעות (Messages) הן מה שמניע את הפעולות. כי השיטות הן בגדר פוטנציאל ובלי הודעה לא תופעל שום שיטה.
דוגמה
ניתן לראות אובייקט כמו String, בעברית מחרוזת, כשילוב של מידע, שהוא תוכן התווים שמהווה את המחרוזת. יוגדרו גם הפעולות שניתן יהיה לעשות על המחרוזת, כמו הדפסה, חיתוך רשימה, המרה לאותיות גדולות באנגלית וכדומה.
עוד דוגמה? - בתכנות מונחה עצמים ניתן לרשום עובדים למערכת מסוימת. אבל במקום לשמור בנפרד את הנתונים של כל אחד מהם (שם, גיל, תפקיד, השכלה, התמחות וכו') ניצור אובייקט של עובד. מהמחלקה הזו נגזור המון עובדים, על מאפייניהם ותכונותיהם ועל המידע הזה נוכל לבצע פעולות שונות, כמו הדפסה, שאילתות, חיתוכים ועוד.
סיכום
בתכנות מבוסס עצמים יש תבניות שמתארות סוג של יישות, כמו בחיים עם ישויות כמו מכוניות, בני אדם וכדומה. התבניות הללו נקראות "מחלקות" (Class). תחת ה-Class כהגדרה מרכזית, עם ריכוז של מאפיינים (שהם בעצם משתנים) ומתודות (שהן פעולות שניתן לעשות במחלקה), כל אובייקט שיווצר תחת המחלקה ישאב אותם ממנה.
עוד על המחלקה בתגית מחלקות.
קישורים מצורפים: