Menu
CoddyTech

מאפיינים לכימוס

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

מאפיינים הם הכלי העיקרי למימוש הכמסה ב-C#. במקום לחשוף שדות ישירות, עוטפים אותם במאפיינים השולטים באופן הגישה לנתונים ושינוים.

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

public class Temperature
{
    private double celsius;
    
    public double Celsius
    {
        get { return celsius; }
        set
        {
            if (value < -273.15)
                celsius = -273.15;  // המינימום הוא האפס המוחלט
            else
                celsius = value;
        }
    }
}

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

אפשר גם להשתמש במאפיינים כדי לחשב ערכים או להפעיל תופעות לוואי:

public double Fahrenheit
{
    get { return celsius * 9 / 5 + 32; }
    set { celsius = (value - 32) * 5 / 9; }
}

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

challenge icon

אתגר

קל

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

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

  • Product.cs: צרו מחלקה בשם Product במרחב השמות Inventory, שתנהל מידע על מוצרים באמצעות אימות דרך מאפיינים. המוצר שלכם זקוק ל:
    • שדה פרטי price (decimal) עם מאפיין ציבורי Price שמבטיח שהמחיר לעולם לא ירד מתחת ל־0 — אם מישהו ינסה להגדיר מחיר שלילי, יש לשמור במקומו את הערך 0
    • שדה פרטי quantity (int) עם מאפיין ציבורי Quantity ששומר על ערכים בין 0 ל־1000 — ערכים שמתחת ל־0 יהפכו ל־0, וערכים שמעל 1000 יהפכו ל־1000
    • מאפיין ציבורי במימוש אוטומטי בשם Name (string)
    • מאפיין לקריאה בלבד ומחושב בשם TotalValue, שמחזיר את Price * Quantity
    כללו בנאי שמקבל שם, מחיר וכמות (בסדר הזה), ומגדיר את כל הערכים דרך המאפיינים כדי שהאימות יתבצע.
  • Program.cs: בקובץ הראשי שלכם, צרו Product באמצעות ערכי קלט. לאחר מכן נסו לשנות את המחיר והכמות באמצעות ערכי קלט נוספים שעשויים להיות לא תקינים. הדפיסו את מצב המוצר לאחר יצירתו ולאחר כל שינוי, כדי לראות כיצד המאפיינים מגינים על הנתונים.

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

  • שם המוצר
  • מחיר התחלתי (decimal)
  • כמות התחלתית (מספר שלם)
  • מחיר חדש להגדרה (decimal, עשוי להיות שלילי)
  • כמות חדשה להגדרה (מספר שלם, עשויה להיות מחוץ לטווח)

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

After creation:
{Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
After modifications:
{Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}

לדוגמה, אם ערכי הקלט הם Laptop, 999.99, 50, -100 ו־1500, הפלט צריך להיות:

After creation:
Laptop: Price=999.99, Qty=50, Total=49999.50
After modifications:
Laptop: Price=0, Qty=1000, Total=0

שימו לב כיצד המחיר השלילי הפך ל־0 והכמות 1500 הוגבלה ל־1000. המאפיינים שלכם מגינים על האובייקט מפני מצבים לא תקינים — זוהי אנקפסולציה בפעולה!

נסו בעצמכם

using System;
using Inventory;

class Program
{
    public static void Main(string[] args)
    {
        // קרא את הקלטים
        string name = Console.ReadLine();
        decimal initialPrice = Convert.ToDecimal(Console.ReadLine());
        int initialQuantity = Convert.ToInt32(Console.ReadLine());
        decimal newPrice = Convert.ToDecimal(Console.ReadLine());
        int newQuantity = Convert.ToInt32(Console.ReadLine());

        // TODO: צור Product באמצעות הערכים ההתחלתיים
        
        // TODO: הדפס את מצב המוצר לאחר יצירתו
        Console.WriteLine("After creation:");
        // פורמט ההדפסה: {Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
        
        // TODO: שנה את המחיר והכמות בהתאם לערכים החדשים
        
        // TODO: הדפס את מצב המוצר לאחר השינויים
        Console.WriteLine("After modifications:");
        // פורמט ההדפסה: {Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
    }
}
quiz iconבחנו את עצמכם

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

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

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