24 Nisan 2012 Salı

C# 'da OOP-6 Abstract Üyeler

Merhaba arkadaşlar..
C# 'da OOP-5 Inheritance (Kalıtım) makalemin devamı niteliğindedir. Aynı örnek üzerinden devam edeceğim. Bir tane "urun" adında ata sınıfım var. Bu sınıftan türeyen, "bilgisayar" ve "telefon" adında iki tane de türemiş sınıfm var. 

    
    public class Urun
    {
        ...
       }



Ama hala "urun"sınıfımdan da instance alabiliyorum. Ürün sınıfımdan örnek alamayayım istiyorum. Önceki makalelerimde de verdiğim örnekte: bir bakkala gittiğinizde bana ürün versene demiyoruz. 1 paket çay, 2 karton sigara felan diyoruz. İşte arkadaşlar bizim örneğimizde de ben ürün istiyorum değil de, bilgisayar istiyorum yada telefon istiyorum diyebilmeliyim. Bunun için benim "urun" sınıfımı "abstract" tanımlamam gerekir arkadaşlar.

    public abstract class Urun
    {
        ...
       }


"Abstract" tanımlanan bu sınıfımın üyelerine başka sınıflardan ulaşmam gerekirse:


şeklinde "new" keyword 'unun altı kırmızı bir hal almıştır. Derleme hatası olarak "can not create an instance of the abstract class or interface" hata mesajını bize verecektir. (Bu sayede interface 'lerin de instance 'ının alınamaz olduğunu anladık :) Interface konusuna da ileride deyineceğiz).


"Abstract" soyut demektir. Ben sınıfımı "abstarct" tanımlayarak, "urun" sınıfımı soyutlaştırmış oldum. Yani "urun" sınıfını sadece kendisinden türeyen, ortak benzerlik gösteren sınıflar tarafından miras alınır yaptım. Artık "urun" sınıfının "doğrudan instance" 'ı alınamaz demiş oldum. Ancak "dolaylı yoldan instance" alınabilir. Dolaylı yoldan instance almak demek: "encapsulation" makalemde de dediğim gibi, bir sınıftan instance alındığı zaman, o sınıfın miras aldığı tüm sınıflardan da instance alınır. Yani bilgisayar sınıfı, "urun" sınıfından miras aldığı için, "bilgisayar" sınıfından instance alındığı zaman, dolaylı olarak "urun" sınıfından da instance alınmış olur.

Bir başka yazıda görüşmek dileğiyle, hoşçakalın...

Hiç yorum yok:

Yorum Gönder