Alıştırmalar
← Ünite 7

Ünite 7: Erişim Belirleyiciler — Alıştırmalar

Ders kitabının açık uçlu alıştırmaları. Bunlar çoktan seçmeli sınav sorusu değil — düşünmeni, araştırmanı, kendi cümlelerinle anlatmanı isteyen etkinlikler. Kitabın verdiği örnek yanıtlar kapalı duruyor; önce kendin dene.

  1. Alıştırma 1myders hazırladı
    Bir sınıftaki değişkenlerin doğrudan dışarıdan değiştirilmesinin yaratabileceği riskleri düşünerek, 'kapsülleme' (encapsulation) ilkesinin bu riskleri nasıl engellediğini bir örnek senaryo üzerinden açıklayınız.
    Yanıt / ipucu
    Değişkenlerin doğrudan erişime açık olması, geçersiz verilerin atanmasına yol açabilir (örneğin, yaş değişkenine negatif değer verilmesi). Kapsülleme sayesinde değişkenler 'private' yapılarak sadece 'public' metotlar veya özellikler üzerinden, doğrulama kontrolleri eşliğinde güvenli bir şekilde güncellenir.
  2. Alıştırma 1myders hazırladı
    Bir sınıfta tanımlanan değişkenlerin doğrudan dışarıya açılması yerine 'private' yapılıp 'public' metotlar üzerinden erişilmesi (kapsülleme) neden önemlidir? Günlük hayattan bir senaryo üzerinden örnekleyerek açıklayınız.
    Yanıt / ipucu
    Kapsülleme, verilerin kontrolsüzce değiştirilmesini önler. Örneğin, bir banka hesabındaki bakiye değişkeni doğrudan dışarıya açık olursa negatif değerler atanabilir; ancak public bir metot üzerinden erişildiğinde bakiye güncellemeden önce değerin sıfırdan büyük olup olmadığı kontrol edilebilir.
  3. Alıştırma 2myders hazırladı
    C# dilinde 'public' ve 'private' erişim belirleyicileri arasındaki temel farkları karşılaştırınız ve bir sınıf tanımlandığında varsayılan erişim belirleyicisinin ne olduğunu belirtiniz.
    Yanıt / ipucu
    'Public' tanımlanan üyelere her yerden erişilebilirken, 'private' üyelere sadece tanımlandıkları sınıf içinden erişilebilir. C# dilinde sınıf üyeleri için herhangi bir erişim belirleyici yazılmazsa, varsayılan olarak 'private' kabul edilir.
  4. Alıştırma 2myders hazırladı
    'Public' ve 'Internal' erişim belirleyicileri arasındaki temel farkı, birden fazla projenin yer aldığı bir yazılım mimarisi üzerinden karşılaştırarak analiz ediniz.
    Yanıt / ipucu
    Public belirleyicisi, projenin referans eklendiği diğer tüm dış projelerden erişime izin verirken; Internal belirleyicisi erişimi sadece tanımlandığı projenin sınırları içinde tutar. Tek projeli yapılarda fark gözlenmezken, çoklu projelerde Internal kütüphane içi gizliliği korur.
  5. Alıştırma 3myders hazırladı
    'Protected' ve 'Internal' erişim belirleyicilerinin kullanım amaçlarını araştırınız; hangi durumlarda kalıtım ilişkisinin, hangi durumlarda ise proje sınırlarının ön plana çıktığını örnekleyiniz.
    Yanıt / ipucu
    'Protected', sadece sınıfın kendisi ve ondan türetilen alt sınıfların erişimi için kalıtım senaryolarında kullanılır. 'Internal' ise erişimi aynı derleme (proje) içiyle sınırlandırarak, farklı projelerin bu iç detaylara erişmesini engellemek amacıyla modüler yapılarda tercih edilir.
  6. Alıştırma 3myders hazırladı
    'Protected' erişim belirleyicisinin işlevini ve sadece kalıtım (inheritance) ilişkisi olan sınıflar arasındaki görünürlüğünü gösteren basit bir C# sınıf şeması veya kod taslağı hazırlayınız.
    Yanıt / ipucu
    Bir 'Calisan' üst sınıfında 'protected maas' değişkeni tanımlanır. Bu değişkene ondan türeyen 'Yonetici' alt sınıfı içinden erişilebilirken, kalıtım bağı olmayan bir 'Musteri' sınıfından erişim sağlanamaz.
  7. Alıştırma 4myders hazırladı
    Çoklu projeden oluşan bir çözüm (solution) yapısı kurgulayarak, 'Internal' ile 'Protected Internal' belirleyicileri arasındaki farkı projeler arası erişim sınırları açısından analiz ediniz.
    Yanıt / ipucu
    'Internal' üyelere sadece tanımlandıkları proje içinden erişilebilirken, 'Protected Internal' üyelere hem aynı proje içinden hem de farklı projelerdeki türetilmiş (miras alan) sınıflar üzerinden erişim sağlanabilir.
  8. Alıştırma 4myders hazırladı
    Erişim belirleyicilerinin sınıflar, namespace'ler ve enum'lar üzerindeki kısıtlamalarını araştırarak, hangi yapıların hangi belirleyicileri alamayacağını gerekçeleriyle listeleyiniz.
    Yanıt / ipucu
    Namespace ve Enum yapıları doğası gereği daima public olmak zorundadır ve değiştirilemezler. Sınıflar ise en dış düzeyde sadece public veya internal olabilir; private veya protected olarak tanımlanamazlar çünkü bu durum sınıfın örneklenmesini imkansız kılardı.
  9. Alıştırma 5myders hazırladı
    Erişim belirleyicilerinin sınırlandırmalarını inceleyerek; namespace, enum ve sınıfların (class) hangi erişim belirleyicilerini alabileceğini, hangilerini alamayacağını gerekçeleriyle açıklayınız.
    Yanıt / ipucu
    Namespace ve Enum yapıları doğası gereği daima 'public' olmak zorundadır ve değiştirilemez. Sınıflar ise en dış düzeyde sadece 'public' veya 'internal' olabilir; doğrudan bir namespace içinde 'private' veya 'protected' olarak tanımlanamazlar.
  10. Alıştırma 5myders hazırladı
    Üst sınıfta 'public' olarak tanımlanmış bir metodu, alt sınıfta 'private' olarak ezmeye (override etmeye) çalıştığınızda karşılaşacağınız kısıtlamayı ve bunun nesne yönelimli programlama ilkeleri açısından nedenini tartışınız.
    Yanıt / ipucu
    Kalıtım yoluyla alınan kısıtlamalar artırılabilir ancak azaltılamaz. Üst sınıfta public olan bir metot alt sınıfta daha kısıtlı bir belirleyiciye (örneğin private) dönüştürülemez; çünkü bu durum üst sınıf referansı üzerinden yapılan polimorfik çağrıların güvenliğini ve tutarlılığını bozar.