כפי שהשם מרמז, תכנות מונחה עצמים או Java OOP מתייחס לשפות תכנות שמשתמשות בעצמים בתכנות.
משתמשים בעצמים כמקור העיקרי ליישום מה שצריך לקרות בקוד.
תכנות מונחה עצמים שואף ליישם ישויות מהעולם האמיתי כמו ירושה, הסתרה, פולימורפיזם ועוד בתכנות.

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

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


מושגי OOP ב-Java

בואו נתחיל בחידוד מושגים של הצהרת מתודה (Method Declaration) ושליחת הודעות (Message Passing).
נתחיל עם הצהרת המתודה, שמורכבת משישה רכיבים:

  1. Access Modifier: מגדיר את סוג הגישה למתודה, כלומר, מאיפה ניתן לגשת אליה באפליקציה שלך. ב-Java ישנם 4 סוגי מודיפיירים:
    • public: נגיש בכל המחלקות באפליקציה שלך.
    • protected: נגיש בתוך החבילה בה הוא מוגדר ובתת-המחלקות שלו (כולל תת-מחלקות המוצהרות מחוץ לחבילה).
    • private: נגיש רק בתוך המחלקה בה הוא מוגדר.
    • default: נגיש בתוך אותה מחלקה וחבילה בהן המחלקה מוגדרת.
  2. Return type: סוג הנתונים של הערך המוחזר על ידי המתודה, או void אם היא לא מחזירה ערך.
  3. Method Name: הכללים לשמות שדות חלים גם על שמות מתודות, אך הקונבנציה מעט שונה.
  4. Parameter list: רשימה מופרדת בפסיקים של הפרמטרים הנכנסים, המוגדרת עם סוג הנתונים שלהם בתוך סוגריים מעוגלים. אם אין פרמטרים, יש להשתמש בסוגריים ריקים ().
  5. Exception list: החריגות שהמתודה עשויה להעלות. ניתן להגדיר רשימה זו.
  6. Method body: זהו בלוק הקוד, המוקף בסוגריים מסולסלים, שצריך להתבצע כדי לבצע את הפעולות המתוכננות.

שליחת הודעות (Message Passing)

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

כעת, לאחר שסקרנו את התנאים המוקדמים, נעבור ל-4 עמודי היסוד של OOPs, שהם:

  • Abstraction (הפשטה)
  • Encapsulation (הסתרה)
  • Inheritance (ירושה)
  • Polymorphism (פולימורפיזם)

מחלקה (Class)

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

  • Modifiers: מחלקה יכולה להיות public או עם גישה ברירת מחדל.
  • Class name: שם המחלקה צריך להתחיל באות גדולה לפי קונבנציה.
  • Superclass: שם המחלקה ההורה, אם ישנה, ומקדימה אותה מילת המפתח extends.
  • Interfaces: רשימה מופרדת בפסיקים של ממשקים שמיושמים על ידי המחלקה, ומקדימה אותה מילת המפתח implements.
  • Body: גוף המחלקה מוקף בסוגריים מסולסלים { }.

אובייקט (Object)

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

אובייקט מורכב בעיקר מ:

  • State: מיוצג על ידי התכונות של האובייקט. הוא גם משקף את תכונות האובייקט.
  • Behavior: מיוצג על ידי המתודות של האובייקט. הוא גם משקף את התגובה של האובייקט לאובייקטים אחרים.
  • Identity: שם ייחודי הניתן לאובייקט המאפשר לו לתקשר עם אובייקטים אחרים.

מתודה (Method)

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

תודה! בזכותכם נוכל להשתפר