Menu
Coddy logo textTech

מתודות 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 בלבד. כך ניתן לשלוט באופן מדויק על האופן שבו קוד חיצוני מקיים אינטראקציה עם הנתונים של האובייקט שלך.

challenge icon

אתגר

קל

בואו נבנה ממיר 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: false
    • Fahrenheit: 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) להצגת ספרה אחת אחרי הנקודה העשרונית
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Java אונליין