Tarayıcınız JavaScript! desteklememektedir.

OOP Inheritance (Miras-Kalitim) Nedir? Nasil Kullanilir?

Merhaba Arkadaslar,

Bir önceki makalemizde Object Oriented Programming (Nesne Yönelimli Programlama) konusunu derinlemesine incelemistik. Bu makalemizde ise OOP'un temellerinden olan Inheritance (Miras-Kalitim) konusunu ele alacagiz.

Biraz bahsetmistim ama okumayanlar için Inheritance (Miras-Kalitim) Nedir? Sorusunun cevabini vereyim;
Inheritance (Miras-Kalitim), bir sinifin temel anlamda yapacagi is ve eylemleri baska bir siniftan kalitim almasidir. Miras deyince akla ilk gelen, misirdaki dede muhabbeti de bu konu için örnek sayilabilir. Bir gün telefon çalar, arayan avukattir ve bingo! Misir'da ki dedenizden miras kaldi.

Peki kalan yalnizca para mi? Para ise tamami mi? Ev mi araba mi arsa mi?

Iste inheritance konusu tam olarak bu noktanin uyarlanabildigi bir konu. Dede miras birakti ama neyi ne kadar miras birakti?

Bir sinifin baska bir sinifa yapacagi is-eylemleri belirtiyor olmasi ya da baska bir deyisle miras birakmis olmasi o sinifin içerisindeki herseyin miras birakildigi anlamina gelmiyor.

Sembolik bir örnekle daha rahat anlayacagiz sanirim. O zaman senaryomuz su olsun;

Üye, Gold Üye ve Platin Üye olmak üzere 3 farkli kullanici profilimiz var. 

  • Üye

Adi,Soyadi,Dogum Tarihi,Cinsiyeti bilgilerini tutacak degiskenler ve ayni zamanda KullaniciBilgileri isminde bir fonksiyonumuz olmali. Çünkü Gold Üyeler'de Platin Üyeler'de bu özelliklere sahip olacak. 

  • Gold Üye

Üye sinifinda yazdigimiz degiskenleri, fonksiyonlari tekrardan burada yazmamiz Object Oriented Programming'in ve makalemizin konusu olan Inheritace'in (Miras-Kalitim) içerigine tamamen aykiri. Öyle bir sey yapmaliyiz ki Üye sinifinin tüm özellikleri buraya aktarilsa, biz tekrardan yazmasak,sapkadan tavsan çiksa falan laugh Saka bir yana Üye sinifindaki tüm degiskenlerin ve fonksiyonlarin Gold Üye sinifinda olmasi gerekiyor. Tabii Gold Üye sinifinin kendisine özel fonksiyonlari, degiskenleri de olacak. Mesela Gold Üye mesaj gönderebilir dolayisi ile MesajGonder fonksiyonu olabilir. Inheritance ile bir sinifta public,protected, ayni assembly içerisinde protected internal, internal gibi erisim belirleyicilerin oldugu degiskenler, method/fonksiyonlar miras verdigi sinifa aktarilir. 

  • Platin Üye

Gold Üye sinifindaki tüm degiskenlerin,method/fonksiyonlarin bu sinifta olmasi gerekiyor. Çünkü en kapsamli üyelik paketi. Yani kullanici mesaj gönderebilecek hatta ekstra olarak profilini kimlerin görüntüledigini de görebilecek. Bunun içinde sembolik olarak ProfiliGoruntuleyenler diye bir methodumuz olsun. Peki, Gold Üye sinifindaki degiskenler,method/fonksiyonlar bu sinifa aktarildi ama Üye sinifindakiler aktarildi mi?

Burada müthis bir hiyerarsik yapi var arkadaslar. Üye sinifindan Gold Üye sinifina aktarilan üyeler, Gold Üye sinifi Platin Üye sinifina miras verildigi için Platin Üye sinifina aktarildi. Kisacasi söyle söylersek pek te yanlis olmaz;

Inheritance(Miras-Kalitim) kullaniyorsak, bir sinif N tane sinifa miras verebilir.

Dikkat etmemiz gerekenler:

  • Her programlama dili, OOP kullaniminda terim olarak farklilik gösterebilir. Örnegin C#'ta bir sinif kalitim verirken gerek Class gerek Interface :"Iki nokta üst üste" isareti ile belirtilir. Yani Gold Üye sinifi Üye sinifindan miras aldigi için "class GoldUye:Uye" olarak tanimlanir. Ayni durum Java'da "class GoldUye extends Uye" olarak tanimlanir. TypeScript'te de ayni Java'da tanimlandigi gibi "extends" anahtar sözcügü ile tanimlanir.
  • Bazi programlama dillerinde, bir sinif N tane sinifa miras verebilirken, bir sinif en fazla bir adet siniftan miras alabilir. Ki bu durum yazilim gelistiriciler tarafindan ciddi sekilde elestirilmektedir. Multiple Inheritance'i bazi programlama dilleri ise desteklemektedir. Mesela C++ Multiple Inheritance desteklerken, C# desteklememektedir. Java desteklememektedir. Nedeni ise Arayüz (Interface) olarak degerlendirilmektedir.
  • Bir sinif bir tane siniftan miras alabilir ancak N tane Interface'den implement edilebilir.Bu durumu miras almak olarak kabul edebiliriz. Bir sinif,N tane Interface. Zaten C++'tan sonra C#'ta multiple inheritance(çoklu kalitim) olmamasinin nedeni de tam olarak bu. Daha düzenli, daha açiklayici kod yazabilmek. Çoklu kalitim class bazinda olsaydi çok karisik kod bloglari ortaya çikabilirdi. Aslinda bu durumda Programlamanin Tarihçesini ve Düsük - Orta - Yüksek Seviyeli Programlama Dillerini analiz etmek gerekiyor. Kafamizda olusabilecek bir çok soru bu arastirma ile cevap bulacaktir.

Umarim faydali olmustur... Takildiginiz yerlerde yorum yazabilirsiniz arkadaslar... Kod'la kalin...