אובייקט (מדעי המחשב)

תכנות מונחה עצמים

בתכנות מונחה-עצמים, אובייקטים הם מבני נתונים ביחד עם שגרות העיבוד המצורפות אליהם. אובייקט הוא מופע (instance) של מחלקה (class). מחלקה משמשת כדי להגדיר פעם אחת את משתני המחלקה (properties) וההתנהגות (המתודות), ולאחר מכן ניתן להשתמש בה ליצירת הרבה מופעים (אובייקטים) מהסוג של אותה מחלקה.
אובייקט הוא בדרך כלל סט ארעי של תכונות (משתני מחלקה; באנגלית: properties או attributes) והתנהגויות (מתודות או שגרות) המכמסות ישות כלשהי. בצורה כזו, מתקיימת הבחנה בין טיפוסי נתונים פשוטים או פרימיטיביים המהווים יחידות אינפורמציה בדידות, לבין אובייקטים של תכנות מונחה-עצמים המהווים טיפוסי נתונים מורכבים הכוללים הרבה יחידות מידע ותכונות ספציפיות. לדוגמה, ניתן ליצור אובייקט המייצג קובץ: אוסף של נתונים ביחד עם מתודות הקריאה והכתיבה המשויכות אליהם. ההגדרה הכללית של "קובץ" כלשהו תהיה מחלקה, וכאשר יווצר מופע של "קובץ" ספציפי הוא יהיה אובייקט מטיפוס "קובץ". שלא כמו טיפוסי נתונים פרימיטיביים, להם ניתן לבצע השמה של ערך (לדוגמה, int a = 10), אובייקטים צריכים ל"היבנות" על ידי קריאה לפונקציית constructor.
אחד הרעיונות החשובים בתכנות מונחה-עצמים הוא רעיון הירושה (inheritance) המאפשר להגדיר יחס מסוג is-a בין אובייקטים. לדוגמה, "a car is a vehicle", כלומר, "מכונית היא סוג של כלי רכב". ניתן לממש יחס כזה בתכנות מונחה-עצמים על ידי מימוש מחלקת Vehicle (כלי רכב) ומימוש של מחלקה נוספת Car (מכונית) שיורשת מהמחלקה Vehicle. בדוגמה זו המחלקה Vehicle היא מחלקת האב (superclass) והמחלקה Car היא המחלקה היורשת (subclass). לאחר שהוגדרה המחלקה Car, ניתן ליצור מספר בלתי מוגבל של אובייקטים (מופעים) מהטיפוס Car אשר כולם כוללים את כל התכונות (לדוגמה, "מהירות מרבית") וההתנהגויות (לדוגמה, "לנסוע") שהוגדרו במחלקה Car. ניתן ליצור גם היררכיה מורכבת יותר של ירושה בין מחלקות, לדוגמה: "בעל חיים" יכולה להיות מחלקת אב של המחלקה "יונק" שממנה יורשת המחלקה "פרימט" שממנה יורשת המחלקה "אדם". פרטים ספציפיים כמו "יוסי לוי" ו"משה כהן" יהיו אובייקטים ממחלקת ה"אדם" ולכן יהיו להם גם כל התכונות הנכללות במחלקות: "אדם", "פרימט", "יונק" ו"בעל חיים".

דוגמה ליצירת אובייקט ושימוש בו בשפת Java

קטע הקוד הבא בשפת Java מגדיר את המחלקה Calculator (מחשבון) הכוללת מימוש למתודות: add (חבר), subtract (חסר), multiply (הכפל) ו-divide (חלק):
public class Calculator {

 public float add(float a, float b) {
 return a + b;
 }

 public float subtract(float a, float b) {
 return a - b;
 }

 public float multiply(float a, float b) {
 return a * b;
 }

 public float divide(float a, float b) {
 return a / b;
 }}
כמעט בכל שפות התכנות מונחות העצמים אופרטור הנקודה (.) משמש כדי לקרוא למתודה ספציפית של האובייקט כאשר הוא נמצא בין האובייקט לבין שם המתודה. קטע הקוד הבא כולל יצירה של אובייקט בשם calculatorObject שהוא מופע של המחלקה Calculator, קריאה למתודות של האובייקט והדפסת תוצאות החישוב שבוצעו על ידי האובייקט. (יצירת האובייקט בשורה השלישית):
public class CalculatorExample {

 public static void main(String[] args) {

 Calculator calculatorObject = new Calculator(); // creating an instance of the Calculator class

 float a = 10;
 float b = 2;

 float result1 = calculatorObject.add(a, b);
 float result2 = calculatorObject.subtract(a, b);
 float result3 = calculatorObject.multiply(a, b);
 float result4 = calculatorObject.divide(a, b);

 System.out.println(result1); // prints: 12.0
 System.out.println(result2); // prints: 8.0
 System.out.println(result3); // prints: 20.0
 System.out.println(result4); // prints: 5.0 
 }}