Ölümcül Ölüm Elması

Murat YÜKSEKTEPE
2 min readOct 30, 2023

--

Yazılımın en önemli konusu olan “kalıtım” ile karşımıza çıkan Elmas Problemini biliyor muydunuz?

Diğer adıyla “Ölümcül Ölüm Elması” probleminden bahsetmek için öncelikle çoklu kalıtım modelinden bir kez daha bahsedelim. Bu kalıtım modeli yani bir alt sınıfın birden fazla üst sınıftan kalıtılması işlemi uzun yıllar boyunca tartışma konusu olmuştur. Bunun sebebi A ve B nesnesinden türetilen bir C nesnesinin hem A’da hem B’de yer alan aynı isimli fonksiyon ve değişkenlerin hangisine sahip olacağı sorusudur.

Deadly Dimond of Death — Ölümcül Ölüm Elması

Örneğin bir Buton (D) sınıfı Dikdörtgen (B) ve Tıklanılabilir sınıflarından genişletilmiş olsun. Bu iki sınıf da üst sınıf olan Nesne (A) sınıfından genişletilmiş olsun. Nesne sınıfında yer alan bir X metotu, Dikdörtgen ve Tıklanılabilir sınıfları içerisinde çağırılır ve fonksiyon gövdesinde farklı işlemler tanımlanabilir. Bu durumda Buton sınıfı hangi üst sınıfındaki X metodunu kullanmalıdır?

Konuyu daha iyi anlamak için gerçek hayattan bir örnek ile ilerleyelim. İçerisinde SesCikart isimli bir fonksiyon yer alan Hayvan isminde bir üst sınıfımız olsun. Bu sınıftan At ve Esek isminde iki orta sınıf türetelim. Bu orta sınıflar içerisinde SesCikart metodunu çağırmak zorundayız. At için bu metot ekrana “At kişnemesi” metnini yazdırırken Esek içinse bu metot ekrana “Eşek anırması” metnini yazdırır. En alt sınıfımız olan Katir, bu iki orta sınıftan genişletildiğinde SesCikart metodunu hangi orta sınıftan çağırmalıdır?

Bu soruna çözüm üretmek için bazı yazılım dilleri farklı yöntemler geliştirmişlerdir. Örneğin Kotlin dilinde Katir içerisindeki SesCikart metodunu çağırırken hangi orta sınıftan çağırılacağını belirtebilirsiniz. Bunun için “super“ anahtar kelimesini kullanmalısınız. Örneğin: Esek.super.SesCikart()

Swift, Java, Fortran, C# ve Ruby gibi yazılım dilleri ise çoklu kalıtım modelini desteklemezler.

--

--