שיעורי מודול (1/2)
כיתות וחפצים
Java היא שפה המתמקדת ב-תכנות מונחה עצמים (OOP). ב-OOP, אנו מדגמים את העולם האמיתי באמצעות אובייקטים. לאובייקט יש מצב (נתונים) והתנהגויות (פעולות).
כיתות וחפצים
- מחלקה: זוהי תוכנית (או תבנית) המגדירה את המאפיינים וההתנהגות של סוג אובייקט.
- Object: זהו מופע קונקרטי שנוצר ממחלקה.
לדוגמה, אם Car הוא המחלקה, המכונית שלך במוסך היא האובייקט בפועל.
שדות מופע ובנאים
הנתונים בתוך מחלקה נקראים שדות מופע (או תכונות). כדי לאתחל את מצבו של אובייקט ברגע יצירתו, אנו משתמשים בשיטה מיוחדת הנקראת קונסטרוקטור.
לבנאי יש את שם זהה למחלקה ואין לו סוג החזרה (אפילו לא void).
class Dog {
// Instance fields
String name;
int age;
// Constructor
public Dog(String name, int age) {
this.name = name; // 'this' refers to the current object's field
this.age = age;
}
}יצירת אובייקט עם new
כדי ליצור אובייקט בזיכרון, אנו משתמשים במילת המפתח new ואחריה בבנאי המחלקה:
public class Main {
public static void main(String[] args) {
// Creating a Dog object
Dog myDog = new Dog("Fido", 3);
// Accessing fields
System.out.println(myDog.name + " is " + myDog.age + " years old.");
}
}הפניה this
מילת המפתח this ב-Java מתייחסת לאובייקט הנוכחי עליו מבוצעים הבנאי או השיטה. הוא משמש בעיקר כדי למנוע אי בהירות כאשר לפרמטרים של בנאי יש שם זהה לשדות המופע של האובייקט (הצללת משתנה):
class User {
String username;
public User(String username) {
this.username = username; // this.username is the instance field, username is the parameter
}
}הקצאת זיכרון: Stack vs Heap
חשוב להבין כיצד Java מקצה זיכרון:
- מחסנית: זהו אזור זיכרון מהיר ומאורגן שבו מאוחסנים משתנים פרימיטיביים והפניות לאובייקט (כתובות זיכרון) מקומיות לשיטות.
- ערימה: זהו אזור זיכרון גדול יותר ודינמי שבו מוקצים אובייקטים בפועל (באמצעות מילת המפתח
new).
כאשר אנו מכריזים על Dog myDog = new Dog("Fido", 3);:
- ההפניה
myDogנוצרת ב-Stack. - האובייקט
Dogבפועל עם הנתונים שלו נוצר ב-Heap. - המשתנה
myDogמצביע על מיקומו של האובייקט על ה-Heap.
נסה זאת בעצמך
השלם את המחלקה Person על ידי הוספת שם השדה ובנאי מתאים. לאחר מכן, בשיטה הראשית, צור אובייקט Person בשם p עם השם Alice.
הצג רמז
כתוב `String name;` בתוך המחלקה, הכריז על הבנאי `public Person(String name) { this.name = name; }` והפעל אותו באמצעות `new Person('Alice')`.
הפתרון זמין לאחר 3 ניסיונות
צור מחלקה Book עם השדות title (String) ו-pages (int), בנאי שלם, והצג בשיטה הראשית ספר בשם b עם הכותרת Moby Dick ו-600 עמודים.
הצג רמז
זכור להגדיר את שני השדות בספר, למפות אותם בבנאי באמצעות `this.title = title;` ו-`this.pages = pages;`, ולהשתמש ב`new Book('Moby Dick', 600)`.
הפתרון זמין לאחר 3 ניסיונות
צור מחלקת מוצר עם שם השדות (מחרוזת) ומחיר (כפול), ובנאי המאתחל את שני השדות. בשיטה הראשית, צור אובייקט מוצר בשם p עם השם Laptop ומחיר 999.99.
הצג רמז
הכריז על השדות `שם מחרוזת;` ו`מחיר כפול;` במוצר, הקצה אותם בבנאי עם `this.name = name;` ו-`this.price = price;`, ולבסוף צור את האובייקט בשיטה הראשית.
הפתרון זמין לאחר 3 ניסיונות