אובייקט (מדעי המחשב) – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
מ סקריפט החלפות (ביניה, ישו, מרבי, משוי)
שורה 15:
ב[[תכנות מונחה-עצמים]], אובייקטים הם [[מבנה נתונים|מבני נתונים]] ביחד עם [[שגרה (תכנות)|שגרות]] ה[[מעבד|עיבוד]] המצורפות אליהם. אובייקט הוא [[מופע (מדעי המחשב)|מופע]] (instance) של [[מחלקה (תכנות)|מחלקה]] (class). מחלקה משמשת כדי להגדיר פעם אחת את [[משתנה (תכנות)|משתני]] המחלקה (properties) וההתנהגות (הפונקציות), ולאחר מכן ניתן להשתמש בה ליצירת הרבה מופעים (אובייקטים) מהסוג של אותה מחלקה. להבחנה זו בין מחלקה לאובייקט קיימות מקבילות גם בתחומי מדע אחרים. לדוגמה, ב[[ביולוגיה]] ו[[אבולוציה]] קיימת ההבחנה ה[[טקסונומיה|טקסונומית]] בין [[סוג (טקסונומיה)|סוג]] ו[[מין (טקסונומיה)|מין]].
 
אובייקט הוא בדרך כלל סט ארעי של תכונות (משתני מחלקה; באנגלית: properties או attributes) והתנהגויות (מתודות או שגרות) ה[[כימוס|מכמסות]] יישותישות כלשהי. בצורה כזו, מתקיימת הבחנה בין [[טיפוס נתונים|טיפוסי נתונים]] פשוטים או [[סקלר (מחשבים)|פרימיטיביים]] המהווים יחידות אינפורמציה בדידות, לבין אובייקטים של תכנות מונחה-עצמים המהווים טיפוסי נתונים מורכבים הכוללים הרבה יחידות מידע ותכונות ספציפיות. לדוגמה, ניתן ליצור אובייקט המייצג [[קובץ]]: אוסף של [[נתונים]] ביחד עם מתודות הקריאה והכתיבה המשוייכותהמשויכות אליהם. ההגדרה הכללית של "קובץ" כלשהו תהיה מחלקה, וכאשר יווצר מופע של "קובץ" ספציפי הוא יהיה אובייקט מטיפוס "קובץ". שלא כמו טיפוסי נתונים פרימיטיביים, להם ניתן לבצע [[פקודת השמה|השמה]] של [[ערך (מדעי המחשב)|ערך]] (לדוגמה, <code>int a = 10</code>), אובייקטים צריכים ל"היבנות" על ידי קריאה לפונקציית [[בנאי (מדעי המחשב)|constructor]].
 
אחד הרעיונות החשובים בתכנות מונחה-עצמים הוא רעיון ה[[תכנות מונחה-עצמים#ירושה|ירושה]] (inheritance) המאפשר להגדיר יחס מסוג [[is-a]] בין אובייקטים. לדוגמה, "a car '''is a''' vehicle", כלומר, "מכונית היא סוג של כלי רכב". ניתן לממש יחס כזה בתכנות מונחה-עצמים על ידי מימוש מחלקת <code>Vehicle</code> (כלי רכב) ומימוש של מחלקה נוספת <code>Car</code> (מכונית) שיורשת מהמחלקה <code>Vehicle</code>. בדוגמה זו המחלקה <code>Vehicle</code> היא מחלקת האב (superclass) והמחלקה <code>Car</code> היא המחלקה היורשת (subclass). לאחר שהוגדרה המחלקה <code>Car</code>, ניתן ליצור מספר בלתי מוגבל של אובייקטים (מופעים) מהטיפוס <code>Car</code> אשר כולם כוללים את כל התכונות (לדוגמה, "מהירות מירביתמרבית") וההתנהגויות (לדוגמה, "לנסוע") שהוגדרו במחלקה <code>Car</code>. ניתן ליצור גם [[היררכיה]] מורכבת יותר של ירושה בין מחלקות, לדוגמה: "[[בעל חיים]]" יכולה להיות מחלקת אב של המחלקה "[[יונק]]" שממנה יורשת המחלקה "[[פרימט]]" שממנה יורשת המחלקה "[[אדם]]". פרטים ספציפיים כמו "יוסי לוי" ו"משה כהן" יהיו אובייקטים ממחלקת ה"אדם" ולכן יהיו להם גם כל התכונות הנכללות במחלקות: "אדם", "פרימט", "יונק" ו"בעל חיים".
 
== דוגמה ליצירת אובייקט ושימוש בו בשפת Java ==
שורה 25:
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;
}
}
</source>
שורה 48:
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
}
}
</source>
 
== אובייקטים מיוחדים ==
ישנם אובייקטים מיוחדים הנוצרים על סמך [[תבנית עיצוב]] מסוימת. בדרך כלל אובייקטים כאלה נקראים על שם תבנית העיצוב שלפיה הם נוצרו. בינהםביניהם:
* [[תבנית Factory Method|Factory object]] (אובייקט בית חרושת): אובייקט שמטרתו ליצור אובייקטים אחרים.
* [[תבנית Singleton|Singleton object]]: אובייקט שהוא המופע היחיד של המחלקה שלו לאורך כל זמן הריצה של התוכנית.
* [[תבנית Prototype|Prototype]] (אב טיפוס): אובייקט מיוחד שלפיו יכולים להווצר אובייקטים נוספים על ידי העתקה.
* [[Immutable object]] (אובייקט שלא ניתן לשינוי): אובייקט המקבל [[מצב (מדעי המחשב)|מצב]] קבוע בזמן היצירה שלו והוא אינו משתנה לאחר מכן. אובייקטים מהמחלקה <code>String</code> ב-[[Java]] הם דוגמה ל-Immutable objects.
* [[Function object]]: אובייקט שיש לו מתודה אחת והיא פועלת כפונקציה (בדומה ל[[מצביע]] לפונקציה בשפות [[C (שפת תכנות)|C]] ו-[[C++|++C]]). ב-++C ניתן לממש function object על ידי [[העמסת פונקציות|העמסת]] (overloading) המתודה <code>()operator</code>.