Menu
Coddy logo textTech

שדות גיבוי

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C# של Coddy. שיעור 17 מתוך 70.

מאפיינים במימוש אוטומטי הם נוחים, אבל לפעמים דרושה לך שליטה רבה יותר באופן שבו מאפיין שומר או מאחזר את הערך שלו. כאן נכנסים לתמונה שדות גיבוי. שדה גיבוי הוא שדה פרטי ששומר את הנתונים בפועל עבור מאפיין.

public class Product
{
    private decimal _price;  // שדה גיבוי
    
    public decimal Price
    {
        get { return _price; }
        set { _price = value; }
    }
}

זה נראה כמו עבודה נוספת בהשוואה למאפיינים אוטומטיים, אבל שדות גיבוי מאפשרים לך להוסיף לוגיקה. לדוגמה, אפשר לאמת נתונים לפני ששומרים אותם:

public class Product
{
    private decimal _price;
    
    public decimal Price
    {
        get => _price;
        set => _price = value < 0 ? 0 : value;
    }
}

כעת מחירים שליליים הופכים אוטומטית לאפס. אפשר גם לבצע טרנספורמציה לנתונים בעת קריאה או כתיבה, לתעד שינויים או להפעיל פעולות אחרות.

מוסכמת השמות של שדה הגיבוי משתמשת בדרך כלל בקידומת קו תחתון (_price) או באותיות קטנות (price) כדי להבדיל אותו מהמאפיין.

כשמשתמשים במאפיינים שמיושמים אוטומטית כמו public decimal Price { get; set; }, המהדר למעשה יוצר עבורך שדה גיבוי מוסתר. שדות גיבוי מפורשים מעניקים לך את אותו אחסון, לצד שליטה מלאה בהתנהגות.

challenge icon

אתגר

קל

בואו נבנה מערכת חיישן טמפרטורה שמשתמשת בשדות גיבוי כדי לאמת ולהמיר נתונים בזמן שהם נשמרים ונשלפים.

תיצרו שני קבצים כדי לארגן את הקוד:

  • TemperatureSensor.cs: הגדירו מחלקה בשם TemperatureSensor במרחב השמות Sensors. החיישן הזה מודד טמפרטורה במעלות צלזיוס, אבל עלינו לוודא שהקריאות נשארות בטווח התקין. השתמשו בשדות גיבוי כדי לממש את הדברים הבאים:
    • מאפיין Location (מחרוזת) עם שדה גיבוי _location. בעת הגדרת המיקום, אם הערך הוא null או ריק, שמרו במקום זאת את "Unknown".
    • מאפיין Temperature (double) עם שדה גיבוי _temperature. בעת הגדרת הטמפרטורה, תחמו את הערך לטווח שבין -50 ל-150 (אם הוא נמוך מ-50-, שמרו 50-; אם הוא גבוה מ-150, שמרו 150).
    • מאפיין לקריאה בלבד בשם TemperatureFahrenheit, שמחשב ומחזיר את הטמפרטורה בפרנהייט באמצעות הנוסחה: (celsius * 9 / 5) + 32. עליו להשתמש ישירות בשדה הגיבוי.
    • בנאי שמקבל ערכים של מיקום וטמפרטורה התחלתית.
  • Program.cs: בקובץ הראשי שלכם, צרו חיישן באמצעות ערכי הקלט והציגו את הקריאות שלו. לאחר מכן עדכנו את הטמפרטורה באמצעות ערך קלט שני והציגו את הקריאות המעודכנות.

תקבלו שלושה ערכי קלט:

  • מיקום החיישן
  • קריאת הטמפרטורה ההתחלתית
  • קריאת הטמפרטורה המעודכנת

הדפיסו את הפלט בפורמט הזה:

Sensor: {Location}
Temperature: {Temperature}C ({TemperatureFahrenheit}F)
Updated Temperature: {Temperature}C ({TemperatureFahrenheit}F)

לדוגמה, אם ערכי הקלט הם Lab Room, 25 ו-200, הפלט אמור להיות:

Sensor: Lab Room
Temperature: 25C (77F)
Updated Temperature: 150C (302F)

שימו לב שקריאת הטמפרטורה השנייה, 200, נתחמת ל-150 מכיוון שהיא חורגת מהטמפרטורה המרבית התקינה. שדות הגיבוי מאפשרים לכם לשלוט באופן שבו הנתונים נשמרים!

נסו בעצמכם

using System;
using Sensors;

class Program
{
    public static void Main(string[] args)
    {
        // קרא את הקלטים
        string location = Console.ReadLine();
        double initialTemp = Convert.ToDouble(Console.ReadLine());
        double updatedTemp = Convert.ToDouble(Console.ReadLine());

        // TODO: צור TemperatureSensor עם המיקום והטמפרטורה ההתחלתית

        // TODO: הדפס את מיקום החיישן ואת קריאות הטמפרטורה ההתחלתיות
        // פורמט: "Sensor: {Location}"
        // פורמט: "Temperature: {Temperature}C ({TemperatureFahrenheit}F)"

        // TODO: עדכן את טמפרטורת החיישן לערך המעודכן

        // TODO: הדפס את קריאות הטמפרטורה המעודכנות
        // פורמט: "Updated Temperature: {Temperature}C ({TemperatureFahrenheit}F)"
    }
}
quiz iconבחנו את עצמכם

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

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

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