menu search
  • Kaydol
brightness_auto

Hoş geldiniz! TÜRKLER SORUYOR PLATFORMU'na katılmak ister misiniz? Hemen kayıt olun veya giriş yapın.

more_vert
Kalıtım nedir ?
thumb_up_off_alt 0 beğenilme thumb_down_off_alt 0 beğenilmeme

1 cevap

more_vert

Kalıtım, nesne yönelimli programlamanın (NYP) en temel ve güçlü prensiplerinden biridir. Esasen, bir sınıfın (çocuk sınıf veya alt sınıf denir) başka bir sınıfın (ebeveyn sınıf veya üst sınıf denir) özelliklerini (alanlarını) ve davranışlarını (metotlarını) miras alarak yeni bir sınıf oluşturma mekanizmasıdır.

Bu sayede, kod tekrarını en aza indirir, çünkü ortak işlevsellik tek bir yerde tanımlanır ve birden fazla sınıf tarafından kullanılır. Ayrıca, yazılım mimarinde hiyerarşik bir yapı kurmanı sağlayarak modülerliği ve okunabilirliği artırır.

Kalıtımın Temel Mantığı

Sen bir ebeveyn sınıf tanımlarsın ve bu ebeveyn sınıftan bir veya daha fazla çocuk sınıf türetirsin. Çocuk sınıf, ebeveyninin tüm public ve protected üyelerine otomatik olarak erişebilir. Hatta kendi özel ihtiyaçlarına göre ebeveyninden miras aldığı metotları geçersiz kılabilir (override) veya tamamen yeni metotlar ve özellikler ekleyebilir. Bu, sana hem standart bir temel sunarken hem de özelleştirme esnekliği sağlar.

Örneğin, Hayvan adında bir ebeveyn sınıfın olsun, içinde adi, yasi gibi özellikler ve yemekYe() gibi bir metot bulunsun. Köpek ve Kedi gibi çocuk sınıflar bu Hayvan sınıfından miras alabilir. Böylece Köpek ve Kedi otomatik olarak adi ve yasi özelliklerine ve yemekYe() metoduna sahip olur. Köpek kendi havla() metodunu eklerken, Kedi de kendi miyavla() metodunu ekleyebilir.

Uzmanlık Gerektiren Püf Noktaları

  1. "Is-a" İlişkisi: Kalıtımı kullanırken daima "bir X, bir Y midir?" sorusunu sorman gerekir. Örneğin, "Bir Araba, bir Taşıt mıdır?" Evet. O zaman Araba, Taşıttan miras alabilir. Ama "Bir Araba, bir Motor mudur?" Hayır. Bu durumda kalıtım yerine bileşim (composition) kullanman daha doğru olur. Yanlış kalıtım hiyerarşileri, kodunu karmaşıklaştırır ve ileride bakımını zorlaştırır.
  2. Sıkı Bağlılık (Tight Coupling): Kalıtım, ebeveyn ve çocuk sınıflar arasında doğal olarak sıkı bir bağlılık oluşturur. Ebeveyn sınıfta yapılan bir değişiklik, tüm alt sınıfları etkileyebilir. Bu, değişiklik maliyetini artırabilir. Bu yüzden ebeveyn sınıf tasarımını çok iyi düşünmelisin.
  3. Tek ve Çoklu Kalıtım: Java, C# gibi dillerde tekli kalıtım desteklenirken (bir sınıf yalnızca bir ebeveyn sınıftan miras alabilir), C++ gibi dillerde çoklu kalıtım (bir sınıf birden fazla ebeveyn sınıftan miras alabilir) mümkündür. Çoklu kalıtım, "elmas problemi" gibi karmaşıklıklara yol açabildiği için genellikle kaçınılması veya arayüzler gibi başka yapılarla çözülmesi tavsiye edilir.
  4. Arayüzler ve Soyut Sınıflar: Bazen kalıtım yerine veya onunla birlikte arayüzler (interfaces) veya soyut sınıflar (abstract classes) kullanman gerekir. Eğer sadece bir davranış kümesi tanımlıyorsan (ne yapması gerektiğini, nasıl yaptığını değil), arayüzler daha uygundur. Eğer hem ortak özellikler hem de bazı varsayılan davranışlar sunmak istiyorsan, soyut sınıflar güçlü bir çözümdür. Ben kendi tecrübelerimde, genellikle "is-a" ilişkisi katı ise somut sınıflar arası kalıtım, "can-do" (bir şey yapabilir) ilişkisi varsa arayüzleri tercih ederim.

Özetle, kalıtım sana kodunu düzenli, sürdürülebilir ve esnek tutmanda büyük bir araçtır, ancak onu doğru kullanmak için temel prensipleri ve potansiyel tuzakları iyi anlaman gerekir.

thumb_up_off_alt 0 beğenilme thumb_down_off_alt 0 beğenilmeme

İlgili sorular

thumb_up_off_alt 1 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap
thumb_up_off_alt 5 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap
thumb_up_off_alt 0 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap
thumb_up_off_alt 0 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap
thumb_up_off_alt 0 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap

12,071 soru

14,440 cevap

4 yorum

190 üye

Çevrimiçi Kullanıcı Sayısı: 65
0 Üye 65 Ziyaretçi
Bugünkü Ziyaretler: 7733
Dünkü Ziyaretler: 21974
Toplam Ziyaretler: 6301756

Son Kazanılan Rozetler

huseyin Bir rozet kazandı
ayşe_aydin Bir rozet kazandı
süleyman_Şahin Bir rozet kazandı
İbrahim_kaplan Bir rozet kazandı
ahmet_yılmaz_01 Bir rozet kazandı
...