מתודות Getter ו-Setter
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Java של Coddy. שיעור 11 מתוך 87.
מתודות getter ו-setter מספקות גישה מבוקרת לשדות פרטיים. getter מחזירה את הערך של שדה, ואילו setter משנה אותו.
מוסכמת השמות פועלת לפי תבנית תקנית: התחילית get או set ואחריה שם השדה כשהאות הראשונה שלו גדולה.
public class Product {
private String name;
private double price;
// מתודת גישה לקריאת name
public String getName() {
return name;
}
// מתודת גישה לעדכון name
public void setName(String name) {
this.name = name;
}
// מתודת גישה לקריאת price
public double getPrice() {
return price;
}
// מתודת גישה לעדכון הערך עם אימות
public void setPrice(double price) {
if (price >= 0) {
this.price = price;
}
}
}העוצמה האמיתית של פונקציות הגדרה היא היכולת להוסיף לוגיקת אימות. בדוגמה שלמעלה, setPrice מקבלת רק ערכים שאינם שליליים, וכך מגינה על האובייקט מפני נתונים לא תקינים.
בשדות מסוג boolean, פונקציות גישה בדרך כלל משתמשות בקידומת is במקום get:
private boolean active;
public boolean isActive() {
return active;
}אפשר גם ליצור שדות לקריאה בלבד באמצעות הגדרת getter בלבד, או שדות לכתיבה בלבד באמצעות הגדרת setter בלבד. כך ניתן לשלוט באופן מדויק על האופן שבו קוד חיצוני מקיים אינטראקציה עם הנתונים של האובייקט שלך.
אתגר
קלבואו נבנה ממיר Temperature שמדגים את העוצמה של getters ו-setters עם לוגיקת אימות.
תיצרו שני קבצים כדי לארגן את הקוד:
Temperature.java: הגדירו מחלקה בשם Temperature ששומרת ערך טמפרטורה במעלות צלזיוס. למחלקה צריכים להיות:- שדה פרטי
celsius(double) - שדה פרטי
valid(boolean) שעוקב אחר האפשרות הפיזיקלית של הטמפרטורה - getter בשם
getCelsius()שמחזיר את ערך הצלזיוס - setter בשם
setCelsius()שמקבל רק ערכים ששווים לאפס המוחלט (-273.15) או גדולים ממנו. אם הערך תקין, הגדירו אתvalidל-true; אחרת, אל תשנו את celsius והגדירו אתvalidל-false - getter בשם
isValid()עבור השדה הבוליאני (זכרו: getters בוליאניים משתמשים בקידומתis) - getter בשם
getFahrenheit()שממיר את הטמפרטורה לפרנהייט ומחזיר אותה באמצעות הנוסחה:(celsius * 9/5) + 32
- שדה פרטי
Main.java: צרו אובייקט Temperature, קראו ערך צלזיוס כקלט, השתמשו ב-setter כדי להגדיר אותו, ואז הדפיסו אם הטמפרטורה תקינה ואת הערך המקביל בפרנהייט. עצבו את הפלט בשתי שורות:Valid: trueאוValid: falseFahrenheit: X.X(עם ספרה אחת אחרי הנקודה העשרונית)
תקבלו קלט אחד: ערך double המייצג טמפרטורה במעלות צלזיוס.
לעיצוב פלט הפרנהייט עם ספרה אחת אחרי הנקודה העשרונית, אפשר להשתמש ב-String.format("%.1f", value).
נסו בעצמכם
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double celsiusInput = scanner.nextDouble();
// TODO: צרו אובייקט מסוג Temperature
// TODO: השתמשו ב-setter כדי להגדיר את ערך הצלזיוס
// TODO: הדפיסו אם הטמפרטורה תקינה (פורמט: "Valid: true" או "Valid: false")
// TODO: הדפיסו את הערך המקביל בפרנהייט (פורמט: "Fahrenheit: X.X")
// רמז: השתמשו ב-String.format("%.1f", value) להצגת ספרה אחת אחרי הנקודה העשרונית
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםמבוא לתכנות מונחה עצמיםמחלקות לעומת אובייקטיםמילת המפתח thisמתודותשדות (מאפיינים)מתודת הבנאיהעמסת בנאיםחזרה – מחשבון פשוט4ירושה
ירושה בסיסית (extends)מילת המפתח superדריסת מתודות (@Override)שרשור בנאיםהמחלקה Objectירושה יחידה ורב־רמתיתלמה אין ירושה מרובה של מחלקותסיכום – היררכיית עובדים7מתודות מיוחדות ומחלקת Object
מתודת toString()equals() ו-hashCode()מתודת clone()compareTo() ו-Comparableהממשק Comparatorסיכום – מיון מותאם אישית2מצייני גישה ואנקפסולציה
סקירה של רמות הגישהמתודות Getter ו-Setterהסתרת מידעמילת המפתח finalסיכום – מנהל חשבון בנק5פולימורפיזם
יסודות העמסת מתודותדריסת מתודות (בזמן ריצה)המרה כלפי מעלה וכלפי מטההאופרטור instanceofמחלקות ומתודות מופשטותסיכום – מחשבון צורות8מושגי OOP מתקדמים
הרכבה מול ירושהאגרגציה מול הרכבהמחלקות פנימיות, מקוננות ואנונימיותEnums ומתודות של EnumRecords (Java 16+)מחלקות חתומות (Java 17+)3מאפייני מחלקה וחברים סטטיים
משתני מופע לעומת משתנים סטטייםמתודות סטטיותבלוקים סטטייםקבועים (static final)סיכום — מונה ומחלקת עזר6ממשקים ומחלקות מופשטות
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםמתודות ברירת מחדל וסטטיות בממשקמחלקות מופשטות לעומת ממשקיםממשקים פונקציונלייםסיכום – מערכת תשלומיםתרגלו בעצמכם: קומפיילר Java אונליין