Menu
Coddy logo textTech

Kapsülleme için Özellikler

Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 32 / 70.

Özellikler, C# dilinde kapsüllemeyi uygulamak için kullanılan temel araçtır. Alanları doğrudan dışarı açmak yerine, verilere nasıl erişileceğini ve verilerin nasıl değiştirileceğini denetleyen özelliklerle onları sararsınız.

Bu desen, erişim belirleyicilerinde doğrulama veya mantık içeren bir ortak özelliği özel bir alanla birleştirir:

public class Temperature
{
    private double celsius;
    
    public double Celsius
    {
        get { return celsius; }
        set
        {
            if (value < -273.15)
                celsius = -273.15;  // Mutlak sıfır minimumu
            else
                celsius = value;
        }
    }
}

Artık harici kod imkansız bir sıcaklık değeri ayarlayamaz. Bu özellik bir bekçi görevi görerek nesnenizin her zaman geçerli bir durumda kalmasını sağlar. Bu, iş başındaki kapsüllemedir (encapsulation); dahili veriler korunurken kontrollü bir arayüz aracılığıyla hala erişilebilir durumdadır.

Değerleri hesaplamak veya yan etkileri tetiklemek için özellikleri de kullanabilirsiniz:

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

Dış dünya iki özellik görür, ancak dahili olarak yalnızca bir alan vardır. Özellikler, sınıfınızı kullanan kodu bozmadan uygulama ayrıntılarını değiştirmenize olanak tanır; bu, doğru kapsüllemenin (encapsulation) temel bir avantajıdır.

challenge icon

Görev

Kolay

Veri bütünlüğünü korumak için özellikleri kullanan bir ürün envanter sistemi oluşturalım. Fiyatların asla negatif olamayacağı ve miktarların her zaman geçerli sınırlar içinde tutulacağı bir sınıf oluşturacaksın; böylece özelliklerin verilerin için nasıl bekçi görevi gördüğünü göstereceksin.

Kodunu iki dosyaya ayıracaksın:

  • Product.cs: Product ad alanında, özellikler aracılığıyla doğrulama kullanarak ürün bilgilerini yöneten bir Inventory sınıfı oluştur. Ürünün şunlara sahip olması gerekir:
    • Ondalık türünde özel bir price alanı ve fiyatın Price'ın altına düşmemesini sağlayan herkese açık bir 0 özelliği — biri negatif bir fiyat ayarlamaya çalışırsa bunun yerine 0 olarak saklanmalıdır
    • Tamsayı türünde özel bir quantity alanı ve değerleri Quantity ile 0 arasında tutan herkese açık bir 1000 özelliği — 0'ın altındaki değerler 0, 1000'in üzerindeki değerler 1000 olur
    • Herkese açık, otomatik uygulanan bir Name özelliği (string)
    • TotalValue değerini döndüren, hesaplanan salt okunur bir Price * Quantity özelliği
    name, price ve quantity değerlerini (bu sırayla) kabul eden ve doğrulamanın uygulanması için tüm değerleri özellikler üzerinden ayarlayan bir oluşturucu ekle.
  • Program.cs: Ana dosyanda, giriş değerlerini kullanarak bir Product oluştur. Ardından, geçersiz olabilecek ek giriş değerleriyle fiyatı ve miktarı değiştirmeyi dene. Özelliklerin verileri nasıl koruduğunu görmek için ürünün durumunu oluşturma sonrasında ve her değişiklikten sonra yazdır.

Beş giriş alacaksın:

  • Ürün adı
  • Başlangıç fiyatı (ondalık)
  • Başlangıç miktarı (tamsayı)
  • Ayarlanacak yeni fiyat (ondalık, negatif olabilir)
  • Ayarlanacak yeni miktar (tamsayı, aralık dışında olabilir)

Çıktıyı şu biçimde yazdır:

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

Örneğin, girdiler Laptop, 999.99, 50, -100 ve 1500 ise çıktı şu şekilde olmalıdır:

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

Negatif fiyatın nasıl 0 olduğunu ve 1500 miktarının 1000 ile sınırlandırıldığını fark et. Özelliklerin nesneyi geçersiz durumlardan koruyor — işte kapsülleme böyle çalışır!

Kendin dene

using System;
using Inventory;

class Program
{
    public static void Main(string[] args)
    {
        // Girdileri oku
        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: Başlangıç değerlerini kullanarak bir Product oluşturun
        
        // TODO: Oluşturulduktan sonra ürün durumunu yazdırın
        Console.WriteLine("After creation:");
        // Yazdırma formatı: {Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
        
        // TODO: Fiyatı ve miktarı yeni değerlerle değiştirin
        
        // TODO: Değişikliklerden sonra ürün durumunu yazdırın
        Console.WriteLine("After modifications:");
        // Yazdırma formatı: {Name}: Price={Price}, Qty={Quantity}, Total={TotalValue}
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C# derleyicisi