Nesneye Dayalı Programlama -12- Kalıtım - Giriş


Merhabalar Arakadaşlar,

Bu yazımızda Kalıtım (Inheritance) a giriş yapacağız.

Bir sınıf, değişkenlerden ve fonksiyonlardan oluşmaktadır. Bu sınıf üzerinden başka bir sınıf oluşturarak eski sınıfın değişkenlerini ve fonksiyonlarını kullanabilirsiniz.

Sorulması gereken soru ise neden böyle bir şeye ihtiyaç duyulduğudur ?

Bir sınıf üzerinden bir nesne ürettiğinizde o nesne, sınıfın tüm değişkenlerine ve fonksiyonlarına sahip olacaktır. Fakat bazı durumlarda nesnenin, o sınıfın değişkenlerinin ve fonksiyonlarının haricinde başka değişkenler ve fonksiyonlar içermesini de isteyebiliriz, bazen bu gerekecektir. Böylesi durumlarda temel sınıfı kullanarak bir sınıf türetmek gerekir. Dolayısıyla türettiğiniz sınıftan oluşturduğunuz bir nesne, hem temel sınıfın elemanlarına hem de yeni (türetilmiş) sınıfın elemanlarına sahip olacaktır.

Kalıtım da ki temel amaç benzer kodları barındıran sınıfların ortak özellik/davranışlarını bir araya toplayarak kodun tekrar kullanılabilirliği (reuse) ve merkezi yönetimini sağlamaktır.

Burada kalıtım veren sınıf; taban(base), kalıtım alan sınıf ise türetilmiş sınıf (derived, çocuk sınıf) olarak adlandırılır.

Biraz soyut bir konu olduğu için bir örnek üzerinden gitmek yararlı olabilir.


Bir okulda hem öğrenciler hem de öğretmenler bulunmaktadır.
Öğrenciler de öğretmenlerde birer ad ve soyad a sahiptir. Öğrencileri ve öğretmenleri “kullanici” sınıfı altında toplamak, benzer eleman sahaları içerecekleri için mantıklı olacaktır. Fakat öğrencilerin bir numarası olmasına karşın öğretmenlerin bir numarası yoktur, ayrıca öğretmenlerin bir branşı olmasına karşın öğrencileri yoktur. Dolayısıyla kullanici sınıfı üzerinden, “ogrenci” ve “ogretmen” sınıflarını türetmemiz gerekir.

Sınıflarda kalıtım C#'ta : operatörü ile sağlanmaktadır.



Kullanici Sınıfı


Kullanici sınıfından miras almış Ogrenci sınıfı


Kullanici sınıfından miras almış Ogretmen sınıfı



Ana Programda Kullanici, Ogrenci ve Ogretmen sınıflarından birer adet nesne oluşturulmuştur ve bu nesnelerin ulaşabildikleri değişkenler ve metotlar gösterilmiştir.


Programın Ekran Görüntüsü


C++ birden çok sınıftan kalıtım almayı (multi inheritance) desteklerken C# ve Java'da buna kısıtlama getirerek ancak tek bir sınıftan kalıtım almayı, ancak daha fazla gerek duyulan hallerde arayüz (interface) adı verilen yapılardan mümkün kılmıştır.

Sınıflarda kalıtım C#'ta : operatörü ile sağlanırken Java'da extends anahtar kelimesi ile gerçekleştirilir.

Teorik olarak kalıtım sonsuz seviyededir. Ancak tecrübeler 4 ila 6. kademeden sonra analizin ciddi şekilde tekrar incelenmesi gerektiğini söylemektedir.

İyi çalışmalar dilerim.

1 yorum:

Write yorum
Adsız
AUTHOR
10 Temmuz 2017 00:34 Sil

Merhabalar Hocam;
En son kod sayfasında oluşturduğumuz Ogretmen nesnesinin 3. satırında ogretmenNesnesi.brans="Ogretmen Brans" //Ogretmen olması gerekiyordu.
Emekleriniz çok teşekkürler
Bizler için çok güzel bir kaynak olmuş.

Reply
avatar