C# (C Sharp) Ders 15 – Nesne Yönelimli Programlama (OOP) – Kapsülleme (Encapsulation)

Kapsülleme (Encapsulation), veri ve bu veriyi işleyen metotları bir araya getirerek dışarıdan doğrudan erişimi engelleme ve kontrollü erişim sağlama tekniğidir.

Veri Gizliliği (Data Hiding): Sınıfın içindeki verilerin (özelliklerin) doğrudan değiştirilmesini veya okunmasını engelleyerek veri bütünlüğünü korumak.

Kontrollü Erişim: Veriye erişimi ve değiştirmeyi sınırlayarak, hatalı kullanımları önlemek ve sınıfın davranışlarını kontrol etmek.

Neden Kapsülleme Yapmalıyız?

  • Güvenlik: Dışarıdan yanlışlıkla veya kötü amaçlı olarak veri değiştirilmesini engeller.
  • Esneklik: Sınıfın iç yapısını değiştirmeden dış arayüzü (interface) koruyabiliriz.
  • Bakım Kolaylığı: Veri doğrulama ve işleme mantığını tek bir yerde toplarız, bu da bakımı kolaylaştırır.

Erişimi Belirteçleri (Access Modifiers): public, private, protected, internal

  • Erişim Belirteçlerinin Tanımı: Sınıf üyelerine (özellikler, metotlar) erişim seviyesini belirleyen anahtar kelimelerdir.
  • public: Her yerden erişilebilir. En geniş erişim seviyesi.
  • private: Sadece sınıfın içinden erişilebilir. En kısıtlı erişim seviyesi. Veri gizliliği için kullanılır.
  • protected: Sınıfın içinden ve türetilmiş sınıflardan (derived classes) erişilebilir. Kalıtım senaryolarında kullanılır.
  • internal: Aynı proje içindeki diğer sınıflardan erişilebilir. Proje dışından erişilemez.
C#
public class Araba
{
    // Her yerden erişilebilir
    public string Model;

    // Sadece sınıfın içinden erişilebilir
    private string _renk;

    // Sınıfın içinden ve türetilmiş sınıflardan erişilebilir
    protected int Hiz;

    // Aynı proje içindeki diğer sınıflardan erişilebilir
    internal decimal Fiyat;
}

Özellikler ile Kapsülleme Uygulaması: Getters ve Setters’ı kullanarak veri doğrulama (validation)

  • Getters ve Setters: private alanları kullanırken, dışarıdan erişimi sağlamak için kullanılan özel metotlardır.
  • Veri Doğrulama (Validation): Setter içinde verinin geçerliliğini kontrol etmek. Örneğin, yaşın negatif olmaması veya renk adının belirli bir listede olması gibi kontroller yapılabilir.
C#
public class Araba
{
    private string _renk;

    public string Renk
    {
        get { return _renk; }
        set
        {
            if (!string.IsNullOrEmpty(value)) // Boş olmama kontrolü
            {
                _renk = value;
            }
            else
            {
                Console.WriteLine("Renk boş olamaz!");
            }
        }
    }

    // ... diğer özellikler ve metotlar ...
}

Otomatik Özellikler (Auto-Implemented Properties): Kısaltılmış Kapsülleme Yöntemi

Otomatik Özelliklerin Tanımı: Derleyici tarafından otomatik olarak private bir destek alanı oluşturulur ve getter/setter metotları sağlanır.

Kullanım Alanları: Basit kapsülleme işlemleri için daha kısa ve okunabilir kod yazmayı sağlar.

C#
public class Araba
{
    // Otomatik özellik
    public string Renk { get; set; }

    public string Model { get; set; }

    // ... diğer özellikler ve metotlar ...
}

Otomatik Özelliklerde Doğrulama: Getter/setter blokları kullanılarak doğrulama yapılabilir.

C#
public class Araba
{
    private string _renk;

    public string Renk
    {
        get { return _renk; }
        set
        {
            if (!string.IsNullOrEmpty(value))
            {
                _renk = value;
            }
            else
            {
                Console.WriteLine("Renk boş olamaz!");
            }
        }
    }

    // ... diğer özellikler ve metotlar ...
}

Kaynak: https://learn.microsoft.com/tr-tr/dotnet/csharp/tour-of-csharp/tutorials/