תכנות מתקדם ב-Java/אובייקטים: הבדלים בין גרסאות בדף

אין תקציר עריכה
אין תקציר עריכה
אין תקציר עריכה
ניקח דוגמה פשוטה: נניח שאנו רוצים לבנות תוכנה לניהול מלאי של חנות מכולת. הדרישות הן פשוטות: אפשר ליצור סוגי מוצרים חדשים, ולשנות את המחיר של מוצרים חדשים. אפשר להוסיף ולהחסיר מהמלאי, ואפשר גם לחשב את ערך כל המוצרים במלאי ולהדפיס רשימת מלאי. כיצד נממש זאת בעזרת אובייקטים?
נשתמש בשני סוגי אובייקטים:
* אובייקט מטיפוס "'''מוצר'''", שיכיל נתונים לגבי המוצר: שם, מחיר, תיאור, כמות, ותאריך תפוגה. אובייקט מטיפוס מוצר יתמוך בכמה פעולות: יצירה של מוצר, עדכון של מחיר המוצר, עדכון כמות המוצר, והדפסה של פרטי המוצר.
* אובייקט מטיפוס "'''מלאי'''", שיכיל אוסף של מוצרים. אובייקט מטיפוס מלאי יתמוך בפעולות משלו: הכנסה של סוג מוצר למלאי, הוספת והחסרת מוצרים מהמלאי, חישוב של כלל ערך המוצרים והדפסת רשימת מלאי.
 
===משתנים פנימיים===
משתנים פנימיים הם המשתנים אותם מכיל האובייקט בתוכו. הם יכולים להיות מכל סוג שהוא - משתנים פשוטים כמו int או String, מערכים, או אף אובייקטים אחרים. לעיתים קרובות הם מכונים גם "שדות".
 
===שיטות===
החלק העיקרי ברוב האובייקטים הוא השיטות אותן הוא כולל בתוכו. מחוץ לפרמטרים הרגילים, השיטות (למעט הסטטיות) נקראות ומתבצעות על האובייקט עצמו. שיטות מכונות לעיתים קרובות גם "מתודות".
 
==איך זה נראה בג'אווה==
===תוכנית המכולת===
נראה כאן מימוש בג'אווה של ה"מכולת" אותה תיארנו קודם. נעבוד עם שני קבצים: {{קוד בשורה|Item.java}} יכיל את המחלקה המטפלת במוצרים. {{קוד בשורה|Stock.java}} יכיל את המחלקה המטפלת במלאי.
<source lang = "java">
// Item.java
 
public class Item {
// Item's name
String _name;
// Item's description
String _description;
// Item's price
double _price;
// Quantity of that item
int _quantity;
// Days left for that item until expired
int _daysLeft;
/*
* Constructor
*/
public Item(String name, String desc, double price, int quantity, int days) {
_name = name;
_description = desc;
_price = price;
_quantity = quantity;
_daysLeft = days;
}
// Set days left until expiration
public void SetDaysLeft(int newDaysLeft) {
_daysLeft = newDaysLeft;
}
// Set item's quantity
public void setQuantity(int newQuantity) {
_quantity = newQuantity;
}
// Get item's price
public double getPrice() {
return _price;
}
// Print item details
public void printItem() {
System.out.println("Item: "+_name);
System.out.println("Description: "+_description);
System.out.println("Price: "+_price+" Quantity in stock: "+_quantity+
" Days until expiration: "+_daysLeft);
}
 
}
</source>
זהו המימוש של מוצר במכולת. המחלקה מכילה את כל השדות (המשתנים הפנימיים) והשיטות הדרושות לנו (כפי שפורטו למעלה). לשם הפשטות תאריך התפוגה נקבע באמצעות מספר שלם שסופר את הימים עד התפוגה. נראה כאן את קוד המחלקה האחראית על ניהול המלאי:
<source lang = "java">
// Stock.java
 
public class Stock {
public final int MAX_ITEMS = 10;
// Array that holds all items in the stock
Item[] _stock;
/*
* Constructor
*/
public Stock() {
// Build the array of items
_stock = new Item[MAX_ITEMS];
}
// Add item to stock
public void addItem(Item it, int serial) {
if(_stock[serial] != null) {
System.out.println("Cannot add item: this cell is full");
return;
}
_stock[serial] = it;
}
// Print all items in stock
public void printStock() {
for(int i=0; i<_stock.length; i++) {
if(_stock[i] != null)
_stock[i].printItem();
}
}
// Calculates the value of all items in stock
public double sumStock() {
double sum = 0.0;
for(int i=0; i<_stock.length; i++) {
if(_stock[i] != null)
sum+=_stock[i].getPrice();
}
return sum;
}
// Set new quantity for that item
public void setItemQuantity(int serial, int newQuantity) {
if(_stock[serial] == null) {
System.out.println("No such item!");
return;
}
_stock[serial].setQuantity(newQuantity);
}
}
</source>
957

עריכות