C# Inheritance(Kalıtım,Miras Alma) - SOFTSAM

Breaking

About Software

25.03.2017

C# Inheritance(Kalıtım,Miras Alma)

Bildiğiniz üzere C# tamamen nesneye dayalı bir programlama dili. Nesneye dayalı programlama dillerinde amaç gerçek dünyanın bir tasvirini bilgisayar ortamında oluşturmak olduğu için her şeyi birer nesne olarak alıp, bu nesnelerin gerçek dünyada ataları olduğunu da unutmamak gerekir. Cümleyi toparlamak gerekirse her bir nesnenin ortak özelliklerini taşıdığı bir üst nesne vardır gerçek dünyada. Kendimizi ele alalım örneğin;

Ben bir insanım yani bir insanın taşıdığı birçok ortak özelliği bende taşıyorum.İnsanda bir canlıdır.Canlıların taşıdığı ortak özelliklerin çoğunu bulundurur.Canlılarda birer maddedir diyebiliriz uzayda yer kapladıkları için.

Örneği uzatabiliriz ama örneğimizde ana yapının Madde olduğunu hepimiz fark ettik.Madde içerisinde canlı ve cansızlar bulunabilir. İki tür de uzayda yer kaplar.Canlılar içlerinde farklı özel gruplara ayrılabilir.İnsanlar Hayvanlar Bitkiler gibi...Bu anlamlı ve güzel yapının nesne tabanlı programlamadaki karşılığı inheritance(Kalıtım,Miras Alma) 'dır. Peki bunu nasıl yaparız. Örneğimiz üzerinden gidiyoruz:



Görüldüğü üzre Madde adında bir sınıfımız var. Canlılar birer maddedir demiştik o zaman madde sınıfından türemesi gerekiyor yani o sınıfın özellik ve metodlarını miras olarak alacak. Insan bir canlıdır.Canlıda maddedir demiştik aslında insan da bir madde oldu. Türetme işlemini ":" ile yaptık.Her sınıfın kendine ait özellikleri ve işlevleri olacağı gibi birde alt sınıfa yani kendisinden türeyen sınıfa aktaracağı özellikleri ve işlevleri vardır.Aslında bu durum alt sınıflara indikçe artacak üst sınıflara gittikçe azalacaktır. Maddeyi ele alırsak:
Maddelerin özellikleri 
Bunlar:

Renk ve Şekil
Koku
Tat
Saydamlık
Sertlik ve yumuşaklık
Düzgünlük ve pürüzsüzlük


Bu özellikleri tüm alt sınıflar kullanacaktır çünkü madde geniş bir tanımdır. Bu özelliklerimizi sınıfımıza ekleyelim.



Madde sınıfımıza özelliklerini yazdık. İşlevsel olması açısından madde kavramının yapabileceği pek bir şey yoktur. Canlı sınıfımızda bazı işlevleri göreceğiz.Canlıların maddeden aldığı özelliklerden ziyade kendine ait özellikleri de vardır.

Hareketlilik
Solunum;Akciger:Solungac
İskelet;Var:Yok

gibi bir çok özellik sayılabilir biz birkaçını kullanalım. Aynı zamanda canlıların bazıları hareket eder tam genelleme yapamasak ta bu doğrudur.Ses çıkarırlar yada beslenirler. Bunlar ortak işlevlerdir.
Özelliklerimiz ile işlevlerimizi sınıfımızda oluşturalım


virtual - override meselesini daha sonra detaylı olarak anlatmaya çalışacağım.


base anahtar kelimesi:
Türetilmiş sınıflarda üst sınıfın public özellik değişken ve metotlarına erişim sağlayıp çalıştırmak istediğimiz de base anahtar sözcüğünü kullanırız. base. yazdığımız zaman karşımıza public olan tüm içerikler gelir.


Birde yapıcı metodlarımızı oluşturalım. Yapıcı metodlar bildiğimiz üzere sınıftan bir nesne oluşturulacağı zaman çalışır. Türetilmiş bir sınıftan nesne ürettiğinizde otomatik olarak miras alınan sınıfın boş yapıcı metodu çalışır. Bunu değiştirmek için yine base anahtar sözcüğüğnü kullanırız.Örneklerimizde verelim:



      Önceki resmimiz de base.Beslen(); şeklinde metotlarımızı çağırırken yapıcı metotlar da :base(params) şeklinde bir syntax kullandık. artık biz insan sınıfından herhangi bir nesne oluşturduğumuzda Canli sinifinin Tur parametreli yapıcısına gidip Canli oluşturduğumuz için özelliklerin ona göre belirlenmesini sağlar. Eğer Canlı sınıfının boş yapıcısının çalışmasına izin vermiş olsaydık bize bir cansız özelliklerine sahip nesne oluşturmamızı sağlayacaktı.
Normal sınıflar ile miras işlemi üzerinde aklıma gelenler bu kadar sorularınızı yorum kısmına yazarsanız unuttuğumuz yada hatamız varsa belirtirseniz sevinirim.
Teşekkürler


Hiç yorum yok:

Yorum Gönder