İçeriğe atla

Kalıtım (programlama)

Bir üst sınıftan türemiş alt sınıfın, kalıtım şeması.

Kalıtım (İngilizceinheritance), bir sınıfın üst sınıftan miras almasına denir. Pratikte karışıklıklara sebep olduğundan kimi programlama dilleri, ancak tekli kalıtıma izin verirler (Java gibi). Bu dillerde çoklu kalıtım yerine interface denilen nesnelerden faydalanılarak çoklu kalıtımın verdiği özellikler, yan etkileri olmaksızın kullanılabilmektedir. Çoklu kalıtıma izin veren programlama dillerindeyse doğrudan bir sınıfın birden fazla sınıftan miras alması mümkündür. (C++ ve C# gibi dillerde olduğu gibi).

Tarihçe

1996'da Tony Hoare bileşikler üzerine birkaç görüş ortaya koydu ve özellikle de bileşik alt sınıflarına dair fikrini meydana attı. Bunları ortak nicelikleri olan fakat bir değişke etiketi ile ayırt edilen ve değişkelere özel nicelikler de içeren birer bileşik olarak tanımladı.[1] Bundan esinlenerek, 1967'da Ole-Johan Dahl ve Kristen Nygaard farklı sınıflara mensup fakat farklı niceliklere sahip nesneler tanımlamaya yol açan bir tasarım ortaya koydu. Ortak nicelikler bir üst sınıfta toplanmakta ve üst sınıflar ise kendileri birer üst sınıfa mensup olabilmekteydi. Bu halde, bir alt sınıfın değerleri farklı üst sınıflara ait herhangi bir sayıda ön kısım ve alt sınıfa ait bir ana kısım içeren birer bileşik nesneydi. Bu kısımlar birleştirilmekteydi.[2] Bir bileşik nesnenin nicelikleri nokta gösterimi ile erişilirdi. Bu fikir ilk Simula 67 programlama dilinde uygulanmıştı.[3] Fikir sonrasında Smalltalk, C++, Java, Python ve başka birçok dile yayıldı.

Çeşitler

Tekli kalıtım
Çoklu kalıtım

Paradigma ve dile göre farklı kalıtım çeşitleri bulunmaktadır.[4]

Tekli kalıtım
Alt sınıflar tek bir üst sınıfın özelliklerini miras alır. Bir sınıf başka bir sınıfın özelliklerine sahip olur.
Çoklu kalıtım
Tek bir sınıf birden fazla üst sınıfa sahip olabilip tüm üst sınıflarından özellik miras alır.

Çoklu kalıtımı verimli bir şekilde programlaması çok zor olarak görülüyordu. Mesela, Objective-C üzerine kitabında, Brad Cox gerçekten C++'a çoklu kalıtım eklemenin imkansız olduğunu öne sürdü. 1982 kadar erken bir vakitte çoklu kalıtımı düşünüp 1984'te basit ve verimli bir programlama tekniği bulduğum için bu zorluğu üstüme aldım. Zannediyorum ki bu modanın olay örgüsünü değiştirdiği tek durum.[5]

Bjarne Stroustrup

Çok seviyeli kalıtım
Alt sınıflar başka bir alt sınıfa/alt sınıflara mensup olabilir. "Çok seviyeli kalıtım" şeklinde gösterildiği halde bu durum epey yaygındır.
Çok seviyeli kalıtım
A sınıfı B türetilmiş sınıfı için bir taban sınıfı görevi görür, ki o da C türetilmiş sınıfı için bir taban sınıfı görevi görür. B sınıfı bu durumda A ve C arasındaki kalıtım için bir aracı olduğundan dolayı ortanca taban sınıfı olarak bilinir. ABC zinciri kalıtım yolu olarak bilinir.
Çok seviyeli kalıtım ile türetilmiş sınıflar aşağıdaki gibi tanımlanır:
// C++ dilinde emplementasyon
class A { /* ... */ };      // Taban sınıfı
class B : public A { /* ... */ };   // A'dan türetilmiş B
class C : public B { /* ... */ };   // B'den türetilmiş C
Bu işlem herhangi bir seviye derinliğine sürdürülebilir.
Hiyerarşik kalıtım
Bu durumda tek bir sınıf birden fazla sınıfa üst sınıflık eder. Mesela, bir üst sınıf, A, B ve C olmak üzere iki alt sınıfa sahip olabilir. Hem B hem de C'nin üst sınıfı A olsa da B ve C farklı birer sınıftır.
Karma kalıtım
Karma kalıtım, yukarıdaki çeşitlerden iki ya da ikiden fazlası gerçekleşmesidir. Bunun bir örneği bir A sınıfının iki C ve D olmak üzere iki alt sınıfa sahip bir B alt sınıfına sahip olmasıdır. Bu, çok seviyeli ve hiyerarşik kalıtımın bir karışımıdır.

Kaynakça

  1. ^ Hoare, C. A. R. (1966). Record Handling (PDF). ss. 15-16. 7 Nisan 2022 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 24 Mart 2024. 
  2. ^ Dahl, Ole-Johan; Nygaard, Kristen (May 1967). Class and subclass declarations (PDF). IFIP Working Conference on Simulation Languages. Oslo: Norwegian Computing Center. 16 Mayıs 2023 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 24 Mart 2024. 
  3. ^ Dahl, Ole-Johan (2004). "The Birth of Object Orientation: the Simula Languages" (PDF). From Object-Orientation to Formal Methods. Lecture Notes in Computer Science. 2635. ss. 15-25. doi:10.1007/978-3-540-39993-3_3. ISBN 978-3-540-21366-6.  Eksik ya da boş |başlık= (yardım)
  4. ^ "C++ Inheritance". www.cs.nmsu.edu. 24 Eylül 2023 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Mart 2024. 
  5. ^ Stroustrup, Bjarne (1994). The Design and Evolution of C++. Pearson. s. 417. ISBN 9780135229477. 


İlgili Araştırma Makaleleri

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

<span class="mw-page-title-main">C♯</span> programlama dili

C#; Microsoft tarafından .NET Teknolojisi için geliştirilen modern bir programlama dilidir. Sözdizimi C-like bir deneyim sunar.

<span class="mw-page-title-main">C++</span> bir programlama dili

C++, Bjarne Stroustrup tarafından 1979 yılında Bell Laboratuvarları'nda geliştirilmeye başlanmış, C'yi kapsayan ve çok paradigmalı, yaygın olarak kullanılan, genel amaçlı bir programlama dilidir.

<span class="mw-page-title-main">Çoklu kalıtım</span>

Çoklu kalıtım bir sınıfın iki veya daha fazla üst sınıftan miras almasını sağlar.Pratikte karışıklıklara sebep olabildiği için C++ içinde kullanılabilen bu yapı C# içinde kaldırılmış ve yerine arayüz (interface) mantığı getirilmiştir.

Python, nesne yönelimli, yorumlamalı, birimsel (modüler) ve etkileşimli yüksek seviyeli bir programlama dilidir.

Tasarım desenleri, tasarım kalıpları, tasarım örüntüleri veya tasarım şablonları, çok rastlanan, birbirine benzer sorunları çözmek için geliştirilmiş ve işlerliği kanıtlanmış genel çözüm önerileridir.

<span class="mw-page-title-main">Nesne yönelimli programlama</span> nesne kavramına dayalı programlama paradigması

Nesne yönelimli programlama veya kısaca NYP, Her işlevin nesneler olarak soyutlandığı bir programlama yaklaşımıdır. NYP destekleyen programlama dilleri yüksek seviye diller olarak adlandırılır.

ABAP,İngilizce Advanced Business Application Programming kelimelerinin baş harflerinden oluşan bir kısaltmadır ve Alman yazılım şirketi SAP tarafından geliştirilen üst seviye bir nesne tabanlı programlama dilidir. SAP'nin iş uygulamaları geliştirmek için kullanılan NetWeaver platformunun parçası olan Web Uygulama Sunucusu'nu programlamak amacıyla kullanılır. Sözdizimi COBOL'a benzemektedir.

Nesne tabanlı programlama dili, nesne kullanımını destekleyen ve kapsülleme ilkesine uyan programlama dillerini tanımlar. Ancak nesne tabanlı programlama dilleri, kalıtım gibi nesne yönelimli programlama dillerine özel özellikleri taşımazlar. Bu durumda nesne tabanlı programlama dilleri nesne yönelimli programlama dillerinin altkümesini oluşturur.

Ruby, nesneye yönelik, dinamik, reflektif ve esnek bir programlama dilidir. Ruby dili, Yukihiro Matsumoto tarafından Japonya'da tasarlanmaya ve geliştirilmeye başlanmıştır.

Programlama dili teorisi (PDT), programlama dilleri olarak bilinen biçimsel dillerin ve bunların bireysel özelliklerinin tasarımı, uygulanması, analizi, karakterizasyonu ve sınıflandırılması ile ilgilenen bir bilgisayar bilimleri dalıdır. Matematik, yazılım mühendisliği, dilbilim ve hatta bilişsel bilime bağlı ve onu etkileyen bilgisayar bilimi disiplinine girer. PDT'ye adanmış çok sayıda dergide ve genel bilgisayar bilimi ve mühendisliği yayınlarında yayınlanan sonuçlarla tanınmış bir bilgisayar bilimi dalı ve aktif bir araştırma alanı haline gelmiştir.

<span class="mw-page-title-main">Sınıf (programlama)</span> nesne yönelimli programlamada, bir nesnenin nasıl çalıştığını belirten bir tanım

Sınıf, nesne yönelimli programlama dillerinde nesnelerin özelliklerini, davranışlarını ve başlangıç durumlarını tanımlamak için kullanılan şablonlara verilen addır. Bir sınıftan türetilmiş bir nesne ise o sınıfın örneği olarak tanımlanır. Sınıflar genelde şahıs, yer ya da bir nesnenin ismini temsil ederler. Sınıflar metotları ile nesnelerin davranışlarını, değişkenleri ile ise nesnelerin durumlarını kapsül ederler. Sınıflar hem veri yapısına hem de bir ara yüze sahiptirler. Sınıflar ile nasıl etkileşime girileceği bu ara yüzler sayesinde sağlanır. Örneğin bir sınıf şablonu ile renk özelliğine, tekerleklere ve sür metoduna sahip olan bir araba temsil edebilir.

<span class="mw-page-title-main">Java sanal makinesi</span>

Java Sanal Makinesi (JSM), Java platformunun nesne modülü formatı olan class uzantılı sınıf dosyalarının belleğe yüklenip çalıştırılması için gereken hizmetleri sunan bir sistem programıdır ve temel görevinin sınıf dosyalarını yorumlamak olduğu söylenebilir. Ancak, JSM'ni salt bir yorumlayıcı olarak görmek büyük haksızlık olur. Zira, yorumlama ile birlikte JSM'nin şu görevleri de vardır.

Simula, 1960'lı yıllarda Ole-Johan Dahl ve Kristen Nygaard tarafından Oslo'daki Norveç Bilgi İşlem Merkezi'nde geliştirilen Simula I ve Simula 67 adında iki programlama dilidir. Sözdizimsel olarak, ALGOL 60'ın oldukça sadık bir üst kümesidir.

<span class="mw-page-title-main">Kristen Nygaard</span> Norveçli bilgisayar bilimcisi, programlama dili tasarımcısı ve siyasetçi

Kristen Nygaard Norveçli bir bilgisayar bilimcisi, programlama dili öncüsü ve politikacıydı. Uluslararası alanda Nygaard, 1960'larda Ole-Johan Dahl ile nesne yönelimli programlamanın ve Simula programlama dilinin ortak mucidi olarak kabul edilmektedir. Nygaard ve Dahl, bilgisayar bilimine yaptıkları katkılardan dolayı 2001 A. M. Turing Ödülü'nü, 2002 yılında IEEE John von Neumann Madalyası'nı kazanmıştır.

Ole-Johan Dahl, Norveçli bilgisayar bilimcisi. Oslo Üniversitesi'nde profesör olarak çalışmış olan Dahl, Kristen Nygaard ile birlikte nesne yönelimli programlamanın babası olarak bilinmektedir. Dahl, Simula adlı programlama diline yaptığı katkılardan ötürü 2001 yılında Turing Ödülü'nü almaya hak kazanmıştır.

Cocoa, masaüstü işletim sistemi macOS için Apple'ın yerel nesne yönelimli programlama ve uygulama programlama arayüzüdür (API).

Objective-J, [ Cappuccino web] geliştirme çerçevesinin bir parçası olarak geliştirilmiş bir programlama dilidir. Sözdizimi Objective-C sözdizimi ile hemen hemen aynıdır ve JavaScript ile Objective-C'nin C programlama diliyle aynı ilişkiyi paylaşır: katı, ancak küçük bir üst küme olmak; geleneksel kalıtım ve Smalltalk / Objective-C tarzı dinamik gönderim ekleniyor. Prototip tabanlı bir dil olan Pure JavaScript zaten nesne yönelimi ve miras kavramına sahiptir, ancak Objective-J JavaScript'e sınıf tabanlı programlama kullanımını ekler.Objective-J ile yazılmış programların, bir web tarayıcısının JavaScript sanal makinesi tarafından çalıştırılmadan önce önceden işlenmesi gerekir. Bu adım, çalışma zamanında web tarayıcısında veya Objective-J programlarını saf JavaScript koduna çeviren bir derleyici tarafından gerçekleşebilir. Objective-J derleyicisi JavaScript dilinde yazılmıştır; Sonuç olarak, Objective-J programlarını dağıtmak için bir web tarayıcısı eklentisi gerekmez. Objective-J, Node.js üzerinde derlenebilir ve çalıştırılabilir.

Microsoft Windows uygulama programlamasında, OLE Otomasyonu, Microsoft tarafından oluşturulan süreçler arası bir iletişim mekanizmasıdır. Başlangıçta Visual Basic olan komut dosyası dilleri tarafından kullanılması amaçlanan Bileşen Nesne Modeli'nin (COM) bir alt kümesine dayanmaktadır, ancak şimdi Windows'ta birkaç dil tarafından kullanılmaktadır. IDispatch arabirimini uygulamak için tüm otomasyon nesneleri gereklidir. Otomasyon denetleyicileri adı verilen uygulamaların, diğer uygulamalar tarafından dışa aktarılan paylaşılan otomasyon nesnelerine erişebildiği ve bunları değiştirebildiği bir altyapı sağlamaktadır. Uygulamaların birbirini kontrol etmesi için daha eski bir mekanizma olan Dinamik Veri Değişimi'nin (DDE) yerini almaktadır. DDE'de olduğu gibi, OLE Otomasyonunda otomasyon denetleyicisi "istemci"dir ve otomasyon nesnelerini dışa aktaran uygulama "sunucu"dur.