Nesneye yönelik programlamada veri ile bu veri üzerinde çalışan metotlar nesnelerin içinde birlikte tutulur. Her nesne kendisiyle ilgili veriyi barındırır. Kalıtım, abstract sınıf ve nesne gibi kavramlar ise nesneye yönelik programlamaya özgüdür, fonksiyonel programlamada bulunmaz; bu yüzden B, C ve D yanlıştır.
Nesneye Yönelik Programlama Ünite 7
Kaynak: https://lolonolo.com/2022/08/11/nesneye-yonelik-programlama-unite-7/
📖 Konu özeti (sınav öncesi tekrar)
Kalıtım ( Inheritance )
Kalıtım ( Inheritance )
Türetilmiş sınıf da sonuçta bir sınıftır ve class anahtar kelimesiyle tanımlanır. Temel sınıf iki nokta ile belirtilir: class Ogrenci : Kisi { }. interface sınıf değil ara birim tanımlar.
Kalıtım, abstract sınıflar, bilgi saklama ve kolay hata ayıklama, nesneye yönelik programlamanın kavramları ve faydaları arasındadır. "Zor kod geliştirme" ise bu yaklaşımın bir kavramı değildir. Nesneye yönelik programlamanın amacı, aksine geliştirmeyi kolaylaştırmaktır.
Soru yanlış olan ifadeyi soruyor. private üyelere yalnızca tanımlandıkları sınıfın içinden erişilebilir, türetilmiş sınıflar bile bu üyelere erişemez. Bu yüzden "private üyeler her yerden erişilir" ifadesi yanlıştır. D şıkkı ise bunun doğru tanımıdır.
abstract sınıflar tamamlanmamış sınıflardır ve new ile doğrudan nesne üretilemez; ancak türetilen somut alt sınıflar aracılığıyla kullanılırlar. Abstract sınıflardan kalıtım alınabilir ve bu sınıflar yapıcı (constructor) içerebilir, bu yüzden D ve E yanlıştır. C#'ta çoklu sınıf kalıtımı da yoktur.
Türetilmiş sınıfta temel sınıftaki bir metotla aynı imzaya sahip yeni bir metot tanımlanırken new anahtar kelimesi kullanılır. Bu işleme metot gizleme (method hiding) denir ve temel sınıftaki metot gizlenir. Temel metot virtual olsaydı override ile de ezilebilirdi, ancak şıklar arasındaki doğru anahtar kelime new'dur.
protected üyelere tanımlandıkları sınıfın içinden ve o sınıftan türetilen alt sınıfların içinden erişilebilir. Dış sınıflar bu üyelere erişemez. A şıkkı public belirleyicisini, B şıkkı ise private belirleyicisini tanımlar.
II – Kalıtım yolu ile türetilen sınıf temel sınıfın yapıcısnı çağırabilir.
III – Yapıcılar (constructor) bir sonuç dönderirler.
C# programlama dilinde sınıflar (class) ile ilgili verilen ifadelerden hangisi doğrudur?
C#'ta bir sınıf yalnızca bir temel sınıftan kalıtım alabilir, yani tekli kalıtım vardır (I). Türetilen sınıf, temel sınıfın yapıcısını base(...) ile çağırabilir (II). Yapıcıların dönüş türü olmadığı için değer döndürmezler, bu yüzden III yanlıştır ve cevap I ve II'dir.
II – Yıkıcılar (destructor) parametre alabilirler.
III – Yıkıcılar (destructor) bir sonuç dönderirler.
C# programlama dilinde yıkıcılar (destructor) ile ilgili verilen ifadelerden hangisi veya hangileri yanlıştır?
Soru yanlış olan ifadeleri soruyor. Türetilmiş sınıflarda da yapıcı tanımlanabilir, bu yüzden I yanlıştır. Yıkıcılar (~Sinif()) parametre almaz, bu yüzden II yanlıştır. Yıkıcıların dönüş türü de yoktur, bu yüzden III de yanlıştır. Üç ifade de yanlış olduğu için cevap E'dir.
II – Yapılar (struct) değer türündedirler.
III – Sınıf (class) ve yapı (struct) arasında bir fark yoktur.
C# programlama dilinde Kalıtım yoluyla oluşturulan sınıf (class) ve/veya yapılar (struct) ile ilgili verilen ifadelerden hangisi doğrudur?
C#'ta sınıflar referans türü, yapılar (struct) ise değer türüdür. Kalıtım da bu ayrımı değiştirmez. İkisi arasında kopyalanma biçimi ve kalıtım desteği gibi önemli farklar olduğu için III yanlıştır.