Menu
Coddy logo textTech

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

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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# אונליין