Inheritance (Kalıtım)

Inheritance (Kalıtım), Object Oriented Programing felsefesinin 3 temel taşından biridir.   Programlama yaparken yaptığımız olay aslında, gerçek hayattaki nesneleri modellemektir. İşte nesneler arasındaki bu ilişkiyi, programdaki nesnelerimize uygulama olayına kalıtım deriz. Temelde belirttiğimiz ilişki, “is a” ya da “has a” ilişkisidir aslında.


Örnek;
Bir şirketteki Personeller için bir sınıf yazacağımızı düşünelim. Basit olarak, tüm personellerin sicil numarası, ad ve maaş bilgilerinin tutan bir sınıf tasarlayalım.

class Personel
        {
            long _sicilNo;
            string _ad;
            double _maas;

            public long SicilNo
            {
                get { return _sicilNo; }
                set { _sicilNo = value; }
            }

            public string Ad
            {
                get { return _ad; }
                set { _ad = value; }
            }

            public double Maas
            {
                get { return _maas; }
                set { _maas = value; }
            }

            public Personel(int sicilNo, string ad, double maas)
            {
                SicilNo = sicilNo;
                Ad = ad;
                Maas = maas;
            }
        }

Şimdi de Müdür sınıfı tasarlamaya çalışalım. Müdür’ün de sicil numarası, adı ve maaşı mevcuttur. Aynı zamanda; müdür de bir personeldir. İşte bu noktada Müdür sınıfımızı tasarlarken “Müdür is a Personel” ilişkisini belirtmeye çalışalım.


class Mudur : Personel
    {
        string _sorumluOlduguDepartman;

        public string SorumluOlduguDepartman
        {
            get { return _sorumluOlduguDepartman; }
            set { _sorumluOlduguDepartman = value; }
        }

        public Mudur(long sicilNo, string ad, double maas, string sorumluOlduguDepartman)
            : base(sicilNo, ad, maas)
        {
            SorumluOlduguDepartman = sorumluOlduguDepartman;
        }
    }

Yukarıdaki tasarım ile Mudur’un de bir Personel olduğunu belirtmiş olduk. Bu sayede hem daha doğru bir tasarım yaptık, hem de sicilNo, ad, maas gibi alanları tekrar tanımlama gereği duymadık. Burada görmemiz gereken diğer bir kavram da “base” anahtar sözcüğüdür. burada base anahtar sözcüğünü kullanarak constructor yönlendirmesi yaptık. Böylece, zaten personel sınıfında varolan sicilNo, ad ve maas field’larının Personel sınıfından gelmesini sağlamış olduk.
Şimdi Program tarafında bu iki sınıfın nesnelerini oluşturalım.

class Program
    {
        static void Main(string[] args)
        {
            Personel pers = new Personel(123456789, "onur", 5000);

            Mudur mdr = new Mudur(987654321, "ali", 8000, "ARGE");

        }
    }

! Burada akıllara bir soru gelebilir. Madem Mudur de bir Personeldi, o halde bir mudur nesnesi personel tipinden bir değişkende tutulabilir mi? Elbette tutulabilir. Zaten bu, kalıtımın bize sağladığı bir özelliktir.

class Program
    {
        static void Main(string[] args)
        {
            Personel pers = new Mudur(987654321, "ali", 8000, "ARGE");
        }
    }

Bu noktada da başka bir sorun ile karşı karşıyayız. Yukarıdaki kod parçasına göre; pers. dediğimizde, new ile örneklediğimiz nesnemiz “Mudur” tipinden olmasına rağmen “sorumluOlduguDepartman” property’sini göremeyeceğiz. Bunun sebebi ise tip güvenliğinin korunmasıdır. nesneyi tutan değişkenin tipi “Personel” dir. Dolayısı ile bu işaretçi üzerinden, sadece o işaretçi tipinin üyelerine erişebiliriz. 

! Eğer “sorumluOlduguDepartman” property’sine ulaşmak istersek, pers değişkeni üzerinde cast işlemi yapmamız gerekmektedir.

((Mudur)pers).SorumluOlduguDepartman = "Hardware";

Yorum Gönder Blogger

 
Üst